Тестирование производительности для чайников |
05.07.2017 09:53 |
Оригинал статьи: http://testdetective.com/performance-testing-tutorial/ Автор: Лукас Розуонек (Łukasz Rosłonek) Перевод: Ольга Алифанова Я заметил, что большинство тестировщиков слабо знакомо с такой областью, как тестирование производительности. В основном мы концентрируем усилия на функциональных аспектах тестирования, оставляя тестирование производительности, масштабируемости и настройки на откуп разработчикам. Но ведь стабильность – важная часть качества продукта, особенно в эпоху распределенных сетей, когда приложения масштабируются независимо и опираются на интеграцию через HTTP-протоколы. Другой аспект качества – способность увеличивать масштаб наших систем. Для того, чтобы справиться с ростом трафика, нужно знать пропускную способность ПО. Инженеры хорошо знакомы с такими инструментами, как JMeter, Gatling, Tsung. Они относительно просты в использовании, но люди зачастую плохо разбираются в анализе выданных ими результатов, и не умеют делать выводы на их основании. Собеседуя кандидатов на должность тест-инженера, я часто встречаю людей, утверждающих, что они имеют опыт тестирования производительности, но не владеющих знаниями о метриках этого вида тестирования, а также о его элементарных положениях. Основная цель нагрузочного тестирования и тестирования производительности – не умение обращаться с соответствующими инструментами, а знания, полученные в результате их использования. Цель этой статьи – осветить основные аспекты этой области.
Тестирование производительности и нагрузочное тестирование Люди зачастую путают нагрузочное тестирование и тестирование производительности. Два этих термина часто используются, как взаимозаменяемые, но это вовсе не так. Цель тестирования производительности – это поиск "бутылочных горлышек" системы или архитектуры. Как говорится, скорость нашей системы – это скорость самого медленного ее компонента. Предположим, что система состоит из нескольких различных микросервисов. У каждого из них есть собственное время отклика и устойчивость к нагрузке. Добавим сюда такие факторы, как тип базы данных, сервера или местоположение дата-центра. Пользователям приложения нужен быстрый отклик системы и ее высокая доступность. Тестируя производительность, мы ищем узкие места в нашей архитектуре и независимо масштабируем и настраиваем микросервисы, чтобы добиться вышеупомянутого быстрого отклика системы целиком. А вот доступность системы оценивается при помощи нагрузочного тестирования. Если в трех словах, тестировать нагрузку – это испытывать нашу систему на прочность при помощи большого количества пользователей или подключений, нагружать ее. Мы постоянно увеличиваем это количество, чтобы определить максимально возможное количество задач, с которым наша система справится. Нагрузочные тесты особенно важны при релизе нового сервиса и проверке, соответствует ли он предположительному трафику. Эти два вида тестирования, хоть и похожие по своей природе и способу проведения тестов, очень различаются в плане анализа результатов и реакции системы. Время ожидания, пропускная способность и ширина канала Как уже говорилось, самое важное в тестировании производительности и нагрузки – это анализ полученных данных. Для его проведения нужно знать основные метрики производительности. В современном мире сетевых коммуникаций очень важно замерять время ожидания, пропускную способность и ширину канала.
Ширина канала – как правило, величина постоянная (в течение определенного времени). Поэтому очень важно анализировать время ожидания и пропускную способность совместно, потому что эти метрики дают вам ясное представление о производительности системы. Перцентили При измерении времени ожидания одним из первых приходящих в голову сценариев будет расчет среднего времени ожидания за определенное время. Первым измеряемым показателем будет арифметическое среднее, однако здесь есть некоторая проблема: арифметическое среднее очень чувствительно к большому среднеквадратичному отклонению. Так как графики времени ожидания обычно довольно равномерны с небольшими экстремумами, лучше использовать перцентили. Если вы хотите замерить среднее время ожидания вашего сервиса, то можно использовать медиану – 50-й перцентиль (p50). Однако следует помнить, что p50 тоже чувствительно к статистическим флуктуациям. Наиболее распространенная метрика для замера среднего времени ожидания – это 90-й и 99-й перцентили (p90 и p99). К примеру, если время ожидания для p90 составляет 1 мс, то это означает, что в 90% случаев ваш сервис отвечает спустя 1 мс. Частота ошибок Как уже говорилось, мы можем измерить объем полученного трафика, замеряя пропускную способность, однако что насчет исходящего трафика – ответов приложения? Важно знать, какими HTTP-кодами мы отвечаем на запросы – 2хх, 4хх или 5хх. И тут в игру вступает измерение частоты ошибок. Цель этого измерения – узнать, сколько (какой процент) наших ответов успешны, и тому подобные вещи. Какая-то часть исходящего трафика всегда будет с ошибкой (в том числе из-за валидации клиентами – коды 4хх). Однако если в частотности ошибок возникают внезапные пики, это может означать, что в приложении проблемы. Пример графика частоты ошибок приведен на изображении выше. Заключение В последнее время я заметил, что многие тест-инженеры осваивают инструменты тестирования производительности, не имея базовых знаний об этой области тестирования. Чтобы эффективно работать над масштабируемостью и профилированием системы, нужно осознавать, что именно необходимо замерять, и только потом переходить к вопросу, как. |