Запись техническая, для порядка, уточнений и ссылания на первоисточники.
Тестирование продуктивности — вот самый точный перевод термина «performance testing».
Но чаще всего используется словосочетание «тестирование производительности«.
А еще чаще мы говорим «перформанс тестинг», чтобы не упариться с переводом.
Непорядок мирового порядка заключается в том, что под словом «перформанс» подразумевается очень много всякого. Например, выступление артистов на сцене — тоже перформанс. Но мы тут далеки от необходимости кого-то в чем-то убеждать.
Большинство уверено, что в «перформансе» речь идет только о максимальных нагрузках, и в чем-то право. Вообще, мнения о том, что подразумевает «перформанс-тестинг», слегка очень сильно расходятся. Этому есть здравое, нижележащее объяснение.
Перформанс-тестированию можно подвергнуть любое приложение или изделие (например, изделие №2), но здесь и далее подразумевается только тестирование веб-ориентированных приложений.
Проверка продуктивности сайта
в принципе подразумевает следующее:
- Эмулирование пользовательских запросов к тестируемому сайту на минимальных, средних, и максимальных величинах (которые должны быть определены ДО начала перформанс-тестинга).
- Это называется испытание сайта в рабочих условиях, или максимально к ним приближенных.
- Сравнение изначальных критериев оценки продуктивности функционирования сайта (чего хотели добиться) с реальными показателями (что получилось).
Критерии продуктивности
исследуемого приложения определяются как часть общих требований задолго до того, как это самое приложение появится в сети.
Критерии продуктивности должны быть:
- измеримыми,
- количественными,
- прогнозируемыми,
- понятными.
Пример критериев
- при поиске профилей с фотографиями сервер должен «выдерживать» не меньше 150 одновременным запросов,
- генерация страницы с результатами запроса не превышает 4 секунд,
- результаты запросов кэшируются и выдаются очередному пользователю, который делает запрос, аналогичный предыдущему,
- приложение «выдерживает» 600 активных пользователей.
Делая вид, что основываются на этой информации, веб-строители выбирают подходящие инструменты и программное обеспечение. Например, мы верим в то, что система управления базами данных MySQL выдерживает, не кашляя, 200 одновременных запросов. Точнее, принимает и ставит сукиных детей в очередь. Значит, «Для обеспечения 150 одновременным запросов на разрабатываемом приложении мы выбираем MySQL!» говорят веб-строители, а потом оказывается, что надо было сразу выбирать Berkeley, но «Боржоми» уже закончилось…
Иногда разработчики ничего особо не выбирают, а пользуются тем, что есть и чем они умеют управлять…
Тестировщиков проблема выбора веб-строителей не волнует. Тестировщиков волнует проверка продуктивности этого творения.
Что следует проверять
при перформанс-тестировании, уже придумано до и для нас:
-
Время отклика
- В оригинале: Response time.
- Измеряется в секундах время между исходным запросом к серверу и его «окончательным» ответом клиенту во всех рабочих режимах — как в режиме нормальной нагрузки, так и в усиленном режиме, когда перегорают сразу все UPS в здании.
-
Максимально допустимая нагрузка
- В оригинале: Load testing.
- Просто последовательно увеличиваем нагрузку с нуля до «допустимых» параметров.
- Основной вопрос, на который мы пытаемся ответить посредством лоад-тестинга: «Как изменяется время отклика при увеличении нагрузки на сервер — линейно или по-дурацки?»
- Линейно: если время отклика растет пропорционально увеличению нагрузки. Это нормально.
- По-дурацки: если время отклика растет непропорционально увеличению нагрузки. Начинаются задумчивые, непрогнозируемые, неконтролируемые «тормоза».
- Иногда вместо «по-дурацки» говорят «логарифмически». Пример: «Время отклика растет логарифмически!»
- Лично еще не встречал человека, который мог свободно и уместно использовать этот термин.
- Уточнение: лоад-тестинг является составной частью всеобщего перформанс-тестинга.
-
Максимально выдерживаемая нагрузка
- В оригинале: Stress testing.
- Делаем то же самое, что и при load testing, просто не останавливаемся, когда доходим до предполагаемых пределов. Продолжаем увеличивать нагрузку. Доводим сервачок до истерики. Получаем информацию о том, как он себя поведет, когда нагрузка превысит расчетные нормы. Узнаем, до каких масштабов сервер (ну, или приложение) будет стараться работать, и на каких значениях оно откажется нам служить.
- Таким образом, разница между Load и Stress testing в перформансе очень субъективна, грань тонка, а со стороны вообще не разобрать, что происходит — просто сидит человек перед компьютером… В действительности разница в том, что Load приносит нам информацию о поведении приложения «в рамках ожидаемого», а stress приносит нам информацию о поведении приложения при пересечении этих «рамок».
-
Время отклика
- В оригинале: Response time.
- Измеряется в секундах время между исходным запросом к серверу и его «окончательным» ответом клиенту во всех рабочих режимах — как в режиме нормальной нагрузки, так и в усиленном режиме, когда перегорают сразу все UPS в здании.
-
Среднее время наработки на отказ
- В оригинале: Mean time to failure (MTTF).
- Разработчики клянутся в том, что при нагрузке в 300 активных пользователей сервер «будет беспроблемно жить в течение часа, пока кэш не переполнится».
- Тестировщики начинают подсчитывать: час — 300 юзеров. Значит, 600 юзеров «убьют» приложение за полчаса. А 1200 юзеров убьют сервер моментально!
- Или нет: час = 300 юзеров. А если два часа держать сервер под этой нагрузкой? А если три? А если шесть часов держать сервер под таким массивом запросов — он рухнет? Нет? Давайте проверять.
- А давайте узнаем, сколько времени будет «безотказно» работать сервер с базой данных отдельно от сервера с приложением! А процессор не перегреется?
- В общем, на основе собственных знаний, инженеры предполагают, что в течение недели сервер будет «стабильно» жить под пиковой нагрузкой в 300 запросов в течение часа. Нормально? Это предсказывали? Это и проверили?
- Для тестирования веб-серверов MTTF может и не быть очень важной проверкой. Если сдох — ну, ребутнём его… Но, например, без тестирования на MTTF систем, которые будут работать далеко от разработчиков (в космосе), фэйл может быть буквально трагичным.
-
Настройка продуктивности
- В оригинале: Performance tuning.
- Звучит странно, но тут действительно подразумевается конечная подстройка производительности тестируемого сервера. Тестировщики СОВМЕСТНО с разработчиками настраивают и в сотый раз перепроверяют работу сервера с учетом сделанных изменений. Сами по себе тестировщики здесь беспомощны.
- В тысячный раз увеличивается нагрузка на сервер до тех пор, пока все «узкие места» не объявлены «выявленными и ликвидированными». Или «выявленными, но признанными недопустимыми».
Инструменты для тестирования продуктивности
Бесплатные
- Apache JMeter
- Grinder
- WebLoad
- Microsoft Web Application Stress Tool
- OpenSTA
- QEngine
Платные
- NeoLoad
- LoadRunner
- Rational Robot, Rational Performance Tester
- SilkPerformer
- AQtime
- PureLoad
- QALoad
Если много свободного времени
- Читаем тоже общую, но толковую статью «Описание подхода к тестированию производительности ПО«:
Подготовка, в виде формирования требований к данному виду тестирования, включая нагрузочную модель, является исключительно важным этапом в практике тестирования производительности, так как некорректная нагрузочная модель может привести к результатам не правильно характеризующим поведение системы и сделать затруднительным принятие решений по улучшению производительности Приложения.
- Читаем двухсотстраничный Performance Testing Guidance (pdf) из лабораторий Microsoft за авторством
- J.D. Meier
- Carlos Farre
- Prashant Bansode
- Scott Barber
- Dennis Rea
Пожалуйста, разубедите меня в том, что за умение проводить перформанс-тестинг платят больше, нежели за мануальное и автоматизированное тестирование.
#401122 — Bash.Org.Ru
Шоколадница
а как ты производительность тестируешь?
ekeeper
никак, я просто в нее верю
Хороший пост! По делу и без «воды». Только не понял одну вещь: почему «Иногда вместо “по-дурацки” говорят “логарифмически”.»? По-моему, логарифмически — это даже лучше чем линейно. Вот экспоненциально — это «по-дурацки» 🙂 Логарифм вроде функция хорошая: http://ru.wikipedia.org/wiki/Логарифмическая_функция
Я ёрничаю по-поводу одного недоразумения, который произошел при обсуждении результатов подобного теста.
Девелопер не понял, что ему сказал мой коллега, и очень обиделся 🙂
Среднее время безотказной работы — это не совсем правильный перевод.
Mean time to failure — это Среднее время наработки на отказ в соответствии с ГОСТ 27.002
Спасибо, уточнил.
На самом деле тут описывается не только Перформанс в его чистом виде но и Стресс Тестинг (2. Максимально допустимая нагрузка). Эти 2 понятия очень часто путают многие тестеры, но различить их довольно таки лего. Перформанс — это вид тестирования при котором проверяю в основном скорость работы приложения на 1 запрос. Стресс Тестинг — это то как проложение вебед себя при больших нагрузках. Алексей название этой рубрики не совсем подходит к ее описанию. Перформанс часто используется вместе со стресс тестингом но это 2 разные вещи. Да и самое важное «Уточнение: лоад-тестинг является частью перформанс-тестинга.» — это абсолютно не так. Лоад-тестинг также становится Стресс Тестингом в случае когда проверяются пиковые мощности (как описанно во 2-м пунтке).
Хорошая статья, Алексей.
Добавлю, с Вашего позволения.
Performance Testing — собирательное название. Относительно недавно пришло на замену «чистому» определению Load Testing.
И сейчас часто употребляется как Load/Performance Testing.
Подразделы можно выделить такие:
Performance/Regression Testing — снимаем характеристики, и при последующих билдах/патчах сраниваем новые со старыми
Scalability Testing — ищем performance threshold, докуда (No. of concurrent connections) infrastructure (или только application server) может выдерживать нагрузку.
Stress Testing — даем заведомо превышающую норму нагрузку. Это может быть слишком много юзеров, или слишком часто/быстро посылаем запросы. В результате, сервер часть запросов теряет, на часть отвечает невпопад… А тестер радостно потирает руки и пишет баг-репорты.
Endurance Testing — заставляем работать долго, очень долго, пока не вылезут ляпы ресурс-менеджемента. Memory Leakage (не всю память программа освобождает), например. Или сокеты открывали, но не закрывали. Или хэндлеры создавали, но не освобождали. А может банально пожрать все место на диске или в базе данных.
Другие реальные задачи для Performance Testing — поблочное тестирование элементов инфраструктуры, с целью выявления «узких» мест (bottlenecks). Firewall, Router, DB, etc.
PS. Все понятия изначально усваивал на английском, на русском звучит непривычно, честно говоря.
Насчет тулз.
TestComplete — надо выбросить. На уровне протокола не поддерживает. Concurrent VUs не создает. И вообще это functional test automation tool.
В бесплатные добавить QEngine.
В платные добавить NeoLoad.
Последний по юзабилити заткнет за пояс все остальные, вместе взятые, и стоит в 10 раз дешевле LoadRunner.
И таки да.
Senior Automaion Developer получает процентов на 20 больше тестера (Senior QA Analyst). Однако, и ручной тестинг не является его основной обязанностью.
Sr. Load/Performance Testing Engineer получает процентов на 10 больше чем Sr. Automation Developer. Потому как развелось немеряно «Record/Playback» automation developers.
По крайней мере, у нас в Канаде.
Спасибо.
Круто.
Уточнил в записи.
You’re welcome.
Еще одна хорошая статья:
http://ericgoldsmith.com/__oneclick_uploads/2009/02/web_page_response_time_101.pdf
Я в следующем году тоже открою подраздел лоад тестинга в своем блоге
automationbeyond.wordpress.com
Hello all! I like this forum, i found multifarious gripping people on this forum.!!!
Pronounced Community, consideration all!
Hello, man!!!
This is not a forum!!!!
This is a blog, ponial?!!
Из текста….
«………..
В тысячный раз увеличивается нагрузка на сервер до тех пор, пока все “узкие места” не объявлены “выявленными и ликвидированными”. Или “выявленными, но признанными недопустимыми”.
Вопрос —
имеется ввиду : “выявленными, но признанными допустимыми”. ?
Хм, наверное…
Уведомление: Perfomance testing — Программирование, мотивация и продуктивность
привет,
прекрасная статья. и дабы ее еще улучшить:
«Время отклика» — вот это описание встречается в п.1 и п.4