Что такое нагрузочное тестирование и зачем оно проводится?
Столкнулся с тем, что у многих есть сложности с ответом на простой вопрос - "в чем цель нагрузочного тестирования?".
Когда в ответ на этот вопрос я слышу: "Вот у нас тут есть запланированные профили, а цель тестирования - прогнать эти профили и написать отчет", то у меня начинают ныть зубы. Кроме того, часто путают и смешивают нагрузочное, стресс-тестированию и тестирование производительности.
Для чего же проводят такого рода тестирования?
Мне видится, что цели бывают, как минимум, такие:
1. Проверить, что система способна выдержать ожидаемые (или требуемые) нагрузки. В этом случае составляют профили нагрузки исходя из ожидаемой реальной нагрузки, моделируют настоящее поведение пользователей и контролируют показатели работы системы (время отклика, объемы потребляемых ресурсов и т.п.) под заданной нагрузкой (например, RPS или количество одновременно подключенных пользователей).
2. Измерить предельно допустимую нагрузку на систему. Применяется для планирования нагрузки и, например, обоснования увеличения КТС. При таком тестировании используют профили нагрузки, аналогичные первому случаю, но нагрузку устанавливают не целевую, а плавно поднимают от минимальной до тех пор, пока показатели работы системы остаются в приемлемом диапазоне. В результате не только выявляется допустимая нагрузка, но и выявляются ограничения, которые её определяют - объем памяти, производительность системы хранения или количество процессорных ядер.
3. Измерить показатели производительности для отслеживания динамики и реагирования на изменения значений показателей. При таком тестировании выполняют заранее подготовленные типовые задачи и замеряют время их выполнения и другие показатели - количество операций в секунду, время выполнения одной операции и т.п.
4. Выявить узкие места для последующей оптимизации. Когда известны пределы допустимой нагрузки, но хочется их расширить, то реалистичные сценарии и профили нагрузки откладываются в сторону, вместо этого берутся в рассмотрение и прогоняются самые тяжеловесные и проблемные сценарии. По итогам прогонов собирается отладочная и вспомогательная информация с помощью специализированных инструментов (трейсеров, профайлеров), которая помогает идентифицировать проблемные места с точки зрения потребления вычислительных ресурсов. Это работа на стыке тестирования, разработки и архитектуры.
Наверняка список не исчерпывающий, но суть поста в том, что в зависимости от цели существенно изменяется методика и подходы к тестированию.
А просто прогон профилей без понимания цели - это так себе подход.
#performance #load #testing
Столкнулся с тем, что у многих есть сложности с ответом на простой вопрос - "в чем цель нагрузочного тестирования?".
Когда в ответ на этот вопрос я слышу: "Вот у нас тут есть запланированные профили, а цель тестирования - прогнать эти профили и написать отчет", то у меня начинают ныть зубы. Кроме того, часто путают и смешивают нагрузочное, стресс-тестированию и тестирование производительности.
Для чего же проводят такого рода тестирования?
Мне видится, что цели бывают, как минимум, такие:
1. Проверить, что система способна выдержать ожидаемые (или требуемые) нагрузки. В этом случае составляют профили нагрузки исходя из ожидаемой реальной нагрузки, моделируют настоящее поведение пользователей и контролируют показатели работы системы (время отклика, объемы потребляемых ресурсов и т.п.) под заданной нагрузкой (например, RPS или количество одновременно подключенных пользователей).
2. Измерить предельно допустимую нагрузку на систему. Применяется для планирования нагрузки и, например, обоснования увеличения КТС. При таком тестировании используют профили нагрузки, аналогичные первому случаю, но нагрузку устанавливают не целевую, а плавно поднимают от минимальной до тех пор, пока показатели работы системы остаются в приемлемом диапазоне. В результате не только выявляется допустимая нагрузка, но и выявляются ограничения, которые её определяют - объем памяти, производительность системы хранения или количество процессорных ядер.
3. Измерить показатели производительности для отслеживания динамики и реагирования на изменения значений показателей. При таком тестировании выполняют заранее подготовленные типовые задачи и замеряют время их выполнения и другие показатели - количество операций в секунду, время выполнения одной операции и т.п.
4. Выявить узкие места для последующей оптимизации. Когда известны пределы допустимой нагрузки, но хочется их расширить, то реалистичные сценарии и профили нагрузки откладываются в сторону, вместо этого берутся в рассмотрение и прогоняются самые тяжеловесные и проблемные сценарии. По итогам прогонов собирается отладочная и вспомогательная информация с помощью специализированных инструментов (трейсеров, профайлеров), которая помогает идентифицировать проблемные места с точки зрения потребления вычислительных ресурсов. Это работа на стыке тестирования, разработки и архитектуры.
Наверняка список не исчерпывающий, но суть поста в том, что в зависимости от цели существенно изменяется методика и подходы к тестированию.
А просто прогон профилей без понимания цели - это так себе подход.
#performance #load #testing