Если вы собираетесь заниматься тестированием продукта, то, скорее всего, задумывались о том, как можно проверить стабильность системы в целом. Проиллюстрируем, о чем идет речь, на двух примерах.
Когда на YouTube идет прямая трансляция футбольного матча, его одновременно смотрят сотни тысяч или даже миллионы пользователей со всего мира. И когда происходит крупная праздничная распродажа товаров на Amazon.com, количество пользователей на сайте и в приложении кратно возрастает.
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
Имея в виду такие случаи, нам важно протестировать производительность нашего приложения. Это позволит убедиться, что нагрузка на приложение распределяется равномерно и никто из пользователей не сталкивается с проблемами и зависаниями.
В этой статье представлен ряд терминов из области тестирования производительности, которые вы как QA-специалист должны знать и понимать.
Время ожидания (Latency)
Это задержка при взаимодействии по сети. Этим показателем определяется время, которое требуется для передачи данных. Сети с более длительной задержкой (лагом) имеют большое время ожидания, в то время как в сетях с короткой задержкой, соответственно, маленькое время ожидания.
Время ожидания определяет задержку, которую пользователь видит при отправке или получении данных из сети. Эту задержку можно измерить с помощью пинга. Узнать пинг можно с помощью передачи небольшого пакета данных и получении подтверждения о его доставке.
Пропускная способность (Throughput)
Это средний объем данных, который фактически может проходить через сеть за определенное время. Этот параметр охватывает количество пакетов данных, которые успешно достигают своих пунктов назначения, а также на потерянные пакеты данных.
По пропускной способности можно определить количество пользователей, которые смогут одновременно использовать сеть. Измерить пропускную способность можно как с помощью специальных инструментов для тестирования сети, так и вручную. Самыми популярными инструментами являются JMeter, Postman, Locust и Gatling. Они довольно интуитивны в настройке и позволяют легко измерить различные показатели сети.
Важно: Сеть с низкой пропускной способностью и высокой задержкой затрудняет передачу и обработку большого объема данных, что приводит к перегрузке и плохой производительности приложения. Cеть с высокой пропускной способностью и низкой задержкой, естественно, более эффективна. Пользователи получают улучшенную производительность и большую удовлетворенность использованием приложения.
Время ответа (Response Time)
Это общее время, прошедшее с момента отправки пользователем запроса к системе или приложению до момента получения ими ответа. Время ответа может зависеть от различных факторов, таких как время ожидания, мощность сервера, запросы к базе данных, эффективность кода, кэширование и параллельность.
Кэширование (Caching)
Это технология, которая улучшает скорость и производительность вашего веб-сайта путем сохранения часто используемых данных или ресурсов в легкодоступном месте, таком как браузер или сервер кэширования.
Время ответа в 2 секунды может быть нормальным для веб-страницы, но совершенно неприемлемым для приложения, где данные обновляются в реальном времени. Аналогично, время ответа в 10 миллисекунд может быть впечатляющим для запроса к базе данных, но незначительным для стриминг-сервиса.
Параллельные пользователи (Concurrent Users)
Это несколько пользователей, которые используют приложение одновременно. При тестировании производительности очень важно проводить проверки на параллельное использование. Это гарантирует, что приложение способно правильно управлять нагрузкой и предоставлять правильные ответы на запросы к нему.
Виртуальные пользователи (Virtual Users)
Если мы используем некоторые инструменты тестирования производительности, такие как JMeter, Locust, Postman и т.д., мы можем загружать виртуальных пользователей. В основном это означает пользователя, который не является реальным, но используется для воспроизведения действий реального пользователя в приложении для проверки производительности. Виртуальные пользователи могут быть описаны как потоки (Threads). Многопоточность используется для проверки параллельности.
Транзакция в секунду (Transaction Per Second)
Это измерение используется для расчета производительности систем, которые обрабатывают рутинные транзакции и ведут учет.
ТВС можно рассчитать по формуле T ÷ S = TPS
, где T
– количество транзакций, а S
– количество секунд.
Период нарастания (Ramp up period)
Это время, необходимое для постепенного увеличения числа пользователей, отправляющих запросы на сервер, в процессе проведения нагрузочного тестирования с помощью JMeter. Этот параметр позволяет смоделировать реальные условия нагрузки на сервер и проверить его стабильность и производительность в условиях постепенного увеличения нагрузки.
Время нарастания должно быть достаточно длительным, чтобы избежать слишком большой рабочей нагрузки в начале теста, и достаточно коротким, чтобы последние виртуальные пользователи начали работать до того, как закончат первые (если, конечно, вы этого не хотите). Это должно имитировать условия реального времени, но во время тестов этим становится сложно управлять, поэтому попробуйте различные комбинации.
Период спада (Ramp down period)
Если тесты при нарастании нагрузки идеальны перед пиковым периодом, тестирование при снижении нагрузки оценивает данные, когда пиковый период заканчивается. В это время часто наблюдается падение количества одновременных пользователей.
Это может быть полезно, когда мы работаем с различными сценариями, например, когда мы увеличиваем количество пользователей на определенный период времени, а затем уменьшаем его. По прошествии времени мы снова увеличиваем количество пользователей. Это гарантирует, что приложение правильно реагирует на разнообразные нагрузки. Это также может называться тестированием на выносливость. Мы обсудим это далее.
Использование периодов нарастания и спада позволяет осуществить:
- Моделирование переменной нагрузки
- Мониторинг использования ресурсов
- Оценку восстановления системы
Время на размышление (Think Time)
В реальном мире пользователю требуется время, чтобы прочитать содержимое веб-страницы или заполнить данные в веб-форме. Такие действия создают разрыв между двумя действиями пользователя. Think Time имитирует тот же временной разрыв, добавляя задержку между двумя операциями.
Протокол
Метод связи между клиентом и сервером. Например, HTTP, TCP и т. д.
Стресс-тесты (Stress tests)
Измеряют устойчивость программного обеспечения и возможности обработки ошибок в условиях экстремально высокой нагрузки и гарантируют, что ПО не откажет в критических ситуациях. Стресс-тестирование также может помочь нам определить точку останова, за которой приложение может начать выдавать ошибки.
Зачем его проводить? Для того, чтобы убедиться, что система демонстрирует эффективное управление ошибками в экстремальных условиях.
Тесты на выносливость (Endurance tests)
Нагрузка, которую мы обычно получаем в пиковое время использования нашего приложения в продакшене, поддерживается на приложении в другом окружении, но в течение продолжительного времени. Просто чтобы убедиться, что если приложение получит необычную статистику использования, оно сможет эффективно с ней справиться.
Объемное тестирование (Volume tests)
Это применение большого количества данных для тестов, например, искусственное увеличение размера базы данных. С помощью объемного тестирования можно определить влияние на время отклика и изучить поведение системы при воздействии большого объема данных.
Зачем проводить объемное тестирование? Чтобы проверить производительность системы при увеличении объема данных в базе данных.
Базовая линия (Baseline)
При создании тестов производительности нам необходимо иметь метрику, используя которую можно начать тестирование. Она может содержать данные о текущей производительности приложения или минимальный порог, которому наше приложение должно соответствовать. Эта метрика может быть описана как базовая.
Бенчмаркинг (Benchmarking)
Установив наш базовую линию, мы можем начать бенчмаркинг, выполняя различные нагрузочные тесты, или начать дросселирование сети (network throttling), то есть медленно ухудшать условия сети. Бенчмаркинг поможет нам измерить, насколько улучшилась или ухудшилась производительность нашей системы во время определенных тестов.
Перевод статьи «Performance Testing Terminologies for every QA/Test Automation/SDET».
Пингбэк: Тест-кейсы для тестирования API