Тестирование программных средств Сафронов Сергей, 2009 год Оглавление Определение Виды нагрузочного тестирования Цели тестирования Терминология Соотношения и закономерности Разработка модели нагрузки Определение Тестирование производительности – это автоматизированное тестирование, имитирующее работу определенного количества бизнес пользователей на каком либо общем (разделяемом ими) ресурсе. «?»: что Вы понимаете под тестирование произвоидительности? Определение (2) Нагрузочное тестирование – это Серьезная аналитическая и исследовательская работа Реальное автоматизированное тестирование, требующее навыки программирования, а так же протоколов и различных приложений и серверов баз данных Состоит из разных видов и преследует разные цели Виды нагрузочного тестирования Тестирование производительности измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций определение количества пользователей, одновременно работающих с приложением определение границ приемлемой производительности при увеличении нагрузки (при увеличении интенсивности выполнения этих операций) исследование производительности на высоких, предельных, стрессовых нагрузках Вида нагрузочного тестирования Стресс тестирование Работоспособность системы в условиях стресса Оценка способности системы к регенерации (возвращение к нормальному режиму работы после прекращения стресса) Оценка деградации производительности (пересекается с предыдущим видом) Виды нагрузочного тестирования Объемное тестирование Оценки производительности при увеличении объемов данных в базе данных приложения Измерение времени выполнения выбранных операций при определенных интенсивности выполнения этих операций Определение максимального количества пользователей, одновременно работающих с приложением Виды нагрузочного тестирования Тестирование надежности Проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки Проверка на отсутствие утечек памяти, перезапусков серверов под нагрузкой и так далее Основные цели тестирования производительности Оценка производительности и работоспособности приложения на этапе разработки и передачи в эксплуатацию Оценка производительности и работоспособности приложения на этапе выпуска новых релизов, патч-сетов Оптимизация производительности приложения, включая настройки серверов и оптимизацию кода Подбор соответствующей для данного приложения аппаратной (программной платформы) и конфигурации сервера Технические цели Исследование производительности приложения, а именно времена отклика для операций на разных нагрузках в широких диапазонах, включая стрессовые нагрузки Тестирование стабильности, т.е. понимание насколько приложение устойчиво в режиме длительного использования Стресс-тестирование, т.е. проверка способность системы к регенерации после сверх нагрузки Терминология Виртуальный пользователь (Virtual User) программный процесс, циклически выполняющий моделируемые операции Итерация (Iteration) – это один повтор выполняемой в цикле операции Интенсивность выполнения операции (Operation Intensity) - частота выполнения операции в единицу времени, в тестовом скрипте задается интервалом времени между итерациями Нагрузка (Loading) - совокупное выполнение операций на общем ресурсе (тр./сек, хитов/сек) Терминология (2) Производительность (Performance) количество выполняемых операций за период времени (N операций за M часов) Масштабируемость приложения (Application Scalability) пропорциональный рост производительности при увеличении нагрузки Профиль нагрузки (Performance Profile) это набор операций с заданными интенсивностями, полученный на основе сбора статистических данных либо определенный путем анализа требований к тестируемой системе Терминология (3) Нагрузочной точкой называется рассчитанное (либо заданное Заказчиком) количество виртуальных пользователей в группах, выполняющих операции с определенными интенсивностями Соотношения Рост интенсивности выполняемых операций это сокращение интервала времени Рост нагрузки пропорционален росту интенсивности При увеличении интенсивности растет производительность Основные закономерности С какого то момента рост производительности прекращается (а нагрузка может продолжать расти), происходит насыщение и затем деградация системы При тестировании изменение интенсивности операций может подчиняться какому либо закону (например, Пуассона), либо быть равномерным в течении всего теста Разработка модели нагрузки Необходимо определить следующее: список тестируемых операций интенсивность выполнения операций зависимость изменения интенсивности выполнения операций от времени В список таких задач должны войти операции, которые критичны с точки зрения бизнеса и с технической точки зрения. Критичностью с точки зрения бизнеса - это реальное влияние ухудшения производительности таких операций на бизнес процессы. Выделение критический операций Операции с "тяжелыми" запросами к базе данных, отчеты Операции, выполняемые большим количеством пользователей или с высокой интенсивностью Операции критичные с точки зрения бизнеса и к тому же удовлетворяющие условиям двух верхних пунктов Основной способ получения данных – опрос бизнес пользователей или совместное исследование с разработчиками и администраторами системы Профили нагрузки Профилей может (и должно!) быть несколько Меняться в профиле могут не только операции, но и их интенсивность Типичные профили: Начало/завершение операционного дня Начало/завершение месяца Расчет нагрузочных точек Сколько разных операций – столько и групп пользователей: легче выдержать заданную интенсивность Идеальный случай – если есть точные данные о том, сколько операций в день делает пользователь Пересчет интенсивностей Чтобы уменьшить время теста и при этом получить хоть какую то статистику по выполнению операций, а так же улучшить "перемешивание" операций во время теста, можно увеличить интенсивность в N раз, при этом уменьшив количество пользователей так же в N раз Пересчет интенсивностей (2) Во-первых, есть возможность снизить время теста, не теряя статистики выполнения операций, а следовательно и достоверности результатов теста Во-вторых, можно снизить количество моделируемых пользователей там где их число уходит за несколько тысяч и таким образом понизить требования к количеству ресурсов нагружающих компьютеров (1VU ~ 10Мб), а в некоторых случаях и выполнить условия лицензионного соглашения (стоимость лицензии для тестового инструментария зависит от количества виртуальных пользователей) Ограничения Может быть критично количество одновременно открываемых соединений между клиентом и сервером Производительность может зависеть от количества именно разных пользователей Увеличение интенсивности выполнения операций, не должно приводить к ситуации когда период повторения становится меньше чем время выполнения самой операции. Полная модель нагрузки это набор профилей нагрузки со всеми нагрузочными точками для каждого профиля При разработке тестовых сценариев должны быть корректно реализованы все нагрузочные точки нагрузочных точек для каждого профиля должно быть не меньше трех, чтобы можно было оценить зависимость времен отклика выполняемых операций от роста нагрузки: чем линейнее такая зависимость тем лучше масштабируемость приложения и выше предсказуемость его поведения под нагрузкой