Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Лекция 6. Нагрузочное тестирование

.pdf
Скачиваний:
74
Добавлен:
26.02.2022
Размер:
119.21 Кб
Скачать

Тестирование программного обеспечения

Раздел 1. Основные понятия тестирования Раздел 2. Критерии выбора тестов Раздел 3. Разновидности тестирования

Раздел 4. Особенности индустриального тестирования

Раздел 5. Регрессионное тестирование

Раздел 4. Особенности индустриального тестирования

Нагрузочное тестирование

Отдельным видом индустриального тестирования является тест на устойчивость к большим нагрузкам – load-testing, stresstesting или performance testing. Такой тест имитирует одновременную работу нескольких сотен или тысяч пользователей, проверяя, будет ли устойчивой работа ПО под большой нагрузкой. Кроме этого, можно имитировать кратковременные пики нагрузки, когда количество пользователей скачкообразно увеличивается, что актуально для распределенных 2-х и 3-х звенных приложений, новостных ресурсов и других сайтов с неравномерной нагрузкой.

Термины и определения:

Нагрузочное тестирование (Load Testing) - это автоматизированное тестирование, имитирующее работу определенного количества пользователей на каком-либо общем для них ресурсе.

Виртуальный пользователь (Virtual User) - программный процесс, циклически выполняющий моделируемые операции.

Итерация (Iteration) – это один повтор выполняемой в цикле операции.

Нагрузочное тестирование

Интенсивность выполнения операции (Operation Intensity) - частота выполнения операции в единицу времени, в тестовом скрипте задается интервалом времени между итерациями.

Нагрузка (Loading) - совокупное выполнение операций на общем ресурсе.

Производительность (Performance) - количество выполняемых операций за период времени (N операций за M часов)

Масштабируемость приложения (Application Scalability) - пропорциональный рост производительности при увеличении нагрузки.

Профиль нагрузки (Performance Profile) - набор операций с заданными интенсивностями, полученный на основе сбора статистических данных либо определенный путем анализа требований к тестируемой системе.

Нагрузочная точка - рассчитанное (либо заданное Заказчиком) количество виртуальных пользователей в группах, выполняющих операции с определенными интенсивностями.

Нагрузочное тестирование

Основные цели нагрузочного тестирования:

-оценка производительности и работоспособности ПО на этапе разработки и передачи в эксплуатацию;

-оценка производительности и работоспособности ПО на этапе выпуска новых релизов;

-оптимизация производительности ПО, включая настройки серверов и оптимизацию кода;

-подбор соответствующей для данного ПО аппаратной (программной платформы) и конфигурации сервера.

Основные показатели нагрузочного тестирования:

-уникальность запросов

-время отклика системы

-зависимость времени отклика системы от степени распределённости этой системы

-разброс времени отклика системы

-точность воспроизведения профилей нагрузки

Нагрузочное тестирование

Основные этапы проведения нагрузочного тестирования:

-анализ требований и сбор информации о тестируемой системе

-конфигурация тестового стенда для нагрузочного тестирования

-разработка модели нагрузки

-выбор методов и инструментов для формирования нагрузки

исбора статистики при выполнении нагрузочного тестирования

-создание и отладка тестовых скриптов

-проведение нагрузочного тестирования

-анализ результатов нагрузочного тестирования

-формирование отчета по проведенному нагрузочному тестированию

_

Нагрузочное тестирование

Анализ требований и сбор информации о тестируемой системе

На данном этапе осуществляется задание и/или уточнение требований, таких как:

-время отклика (время необходимое для получения ожидаемого результата)

-интенсивность (количество запросов в секунду)

-используемые ресурсы (загрузка процессора, количество используемой памяти и т.д.)

-максимальное количество пользователей (количество пользователей, способных работать с системой в условиях заданной конфигурации)

Конфигурация тестового стенда для нагрузочного тестирования

На данном этапе осуществляется формирование тестового стенда

итестового окружения стенда, а также настройка всех необходимых элементов, составляющих стенд.

Основные причины, по которым не всегда возможно продублировать конфигурацию системы на тестовом стенде:

- сложность дублирования дорогого серверного железа для тестовых нужд - ограничения на использование лицензий требуемого программного обеспечения - возможная закрытость архитектуры приложения со стороны заказчика по соображениям безопасности - трудность воссоздания или транспортировки базы данных приложения

- сложность воссоздания требуемой архитектуры сети

идр.

Нагрузочное тестирование

Разработка модели нагрузки

На данном этапе осуществляется формирование модели нагрузки, включающей:

-список тестируемых операций

-интенсивность выполнения операций

-зависимость изменения интенсивности выполнения операций от времени

-используемые виды нагрузочных тестов

Виды нагрузочных тестов:

-тестирование производительности (Performance testing)

-стрессовое тестирование (Stress Testing)

-объемное тестирование (Volume Testing)

-тестирование стабильности или надежности (Stability / Reliability Testing)

-тестирование моделирования транзакций (Transaction Simulation)

-тестирование методом анализа данных на стороне клиента (Client Capture)

-тестирование методом анализа сетевого трафика (Network Sniffing)

-тестирование масштабируемости (Scalability Test)

Нагрузочное тестирование

Тестирование производительности (Performance testing)

Задачей тестирования производительности является определение масштабируемости приложения под нагрузкой, при этом выполняется:

-измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций;

-определение количества пользователей, одновременно работающих с приложением;

-определение границ приемлемой производительности при увеличении нагрузки (при увеличении интенсивности выполнения этих операций);

-исследование производительности на высоких, предельных, стрессовых нагрузках.

Стрессовое тестирование (Stress Testing)

Стрессовое тестирование позволяет проверить насколько приложение и система в целом работоспособны в условиях стресса и также оценить способность системы к регенерации, т.е. к возвращению к нормальному состоянию после прекращения воздействия стресса. Стрессом в данном контексте может быть повышение интенсивности выполнения операций до очень высоких значений или аварийное изменение конфигурации сервера. Также одной из задач при стрессовом тестировании может быть оценка деградации производительности, таким образом, цели стрессового тестирования могут пересекаться с целями тестирования производительности.

Нагрузочное тестирование

Объемное тестирование (Volume Testing)

Задачей объемного тестирования является получение оценки производительности при увеличении объемов данных в базе данных приложения, при этом выполняется:

-измерение времени выполнения выбранных операций при определенных интенсивности выполнения этих операций;

-определение количества пользователей, одновременно работающих с приложением.

Тестирование стабильности или надежности (Stability / Reliability Testing)

Задачей тестирования стабильности (надежности) является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки с целью проверки отсутствия утечек памяти, выявления количества перезапусков серверов под нагрузкой и другие аспекты, влияющие именно на стабильность работы. Времена выполнения операций в данном виде тестирования менее важны.

Нагрузочное тестирование

Тестирование моделированием транзакций (Transaction Simulation)

Тестирование моделированием транзакций основано на использовании программных GUI-роботов (GUI -Graphical User Interface). GUI-робот – это специальная программа, которая "заставляет" пользовательское приложение работать в автоматическом режиме, без участия самого пользователя. Программный GUI-робот, как и реальный пользователь приложения, анализирует содержимое экрана и вводит данные с клавиатуры, т.е. взаимодействует с пользовательским приложением через тот же интерфейс, что и человек. При этом GUI-робот работает по программе (скрипту), к коду которой всегда есть доступ

(в отличие от кода самого пользовательского приложения). Поэтому, если

в скрипт GUI-робота встроить специальные вызовы, например, перед началом и после окончания транзакции, то можно измерить время выполнения этой транзакции.

Основное достоинство тестирования моделированием транзакций заключается в том, что он позволяет измерять производительность работы приложения "с точки зрения пользователя" и, при этом, не требует доступа к коду пользовательского приложения.

Недостаток же метода в том, что он позволяет измерять время выполнения только рабочих транзакций и не может использоваться для измерения времени выполнения системных транзакций.