Начинающему тестировщику — Нагрузочное тестирование

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

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

Данный вид тестирования проводится чтобы оценить насколько устойчив код продукта и его платформа. Обычно это проверяется наличием большого количества данных и пользователей. В отличии от функционального тестирования, нагрузочное редко дает однозначные ответы, а лишь указывает в каком направлении улучшать продукт. Поскольку нагрузку можно увеличивать до бесконечности, никакой код и сервер не сможет устоять под таким натиском, но вам важно узнать под каким давлением он способен полноценно работать.

Если посмотреть на квадранты тестирования , то видно что данный вид тестирования относится к клиенто-ориентированным тестам. Это означает, что обычно нагрузочные тесты проводятся на готовом продукте и в prod, либо prod-like окружении, не погружаясь в сам код. Чаще всего в моей практике, при помощи нагрузочных тестов мне нужно было определить насколько требователен написанный код  к производительности сервера.

Jmeter

Как и с автоматизированным тестированием, нагрузочное пришлось изучать прямо на практике. Единственной подсказкой был Jmeter, как в последствии оказалось это один из самых известных инструментов для нагрузочных тестов. Большие плюсы Jmeter это большое коммьюнити, он опенсорсный и с достаточно частой периодичностью обновляется. Еще у программы вполне удобный GUI и возможность запуска через консоль.

Поиск: jmeter, нагрузочное тестирование с jmeter

На хабре есть несколько отличных туториалов по созданию нагрузочных тестов, именно ими я и руководствовался во время изучения этого инструмента.

До сих пор мне не удалось полностью освоить все «фишки» Jmeter, поскольку он обладает Очень большим функционалом. Но основные задачи по созданию тестовых сценариев для нагрузки я освоил. Во время работы с jmeter, у людей, не знакомых с нагрузочным тестированием, появится достаточно много вопросов по новым терминам. Этому также способствует англоязычный интерфейс, записывайте непонятные названия и обязательно изучайте их по ходу. Например для меня это были thread и swap.

Поиск: thread, swap

Вариант интересной задачи для нагрузочного тестирования. Нужно проверить что web-приложение справится с 200 сотнями онлайн пользователей, которые будут заниматься перепиской во встроенном чате. Возможна масса вариантов таких заданий, которые можно решить написать самому. Поставьте себе задачу на каком-нибудь собственном проекте(чтобы не уронить чужой) и начинайте ее решать с помощью jmeter.

После изучения стандартных возможностей Jmeter я один раз сильно обжегся. Я совсем неправильно оценил собранные метрики и получил нагоняй от старшего коллеги. Из этого я сделал вывод — для тестирования нагрузки не достаточно знания только инструмента. Очень важно правильно оценивать собранные метрики после нагрузочных тестов и на их основании сделать правильный вывод.

Повторюсь, Jmeter это очень мощный и популярный инструмент для нагрузки. Я бы сделал на него большой упор при изучении данного вида тестирования.

Есть еще пара инструментов с которыми я недавно столкнулся для написания нагрузочных тестов, и которые показались мне интересными.

Yandex Tank

Не возьмусь с уверенностью утверждать, но вроде как это довольно известный инструмент для тестирования нагрузки. Пользовался им пару раз для эмуляции большого наплыва пользователей и с этой задачей Yandex Tank отлично справился. Возможно для кого-то он будет альтернативой Jmeter, поскольку он проще в использовании.

Поиск: нагрузочные тесты yandex tank

Locust

Классный подход для нагрузочных тестов. Вместо того чтобы сохранять сценарии из логов, ты создаешь их сам в Python коде. Встроенный веб-интерфейс позволяет быстро сконфигурировать нагрузку и начать мониторинг. Очень интересное решение, к тому же его можно хорошо масштабировать благодаря Python.

Поиск: locust, нагрузочное тестирование locust

UPD. Есть несколько интересных онлайн сервисов для нагрузочного тестирования. Например loadimpact.com . Конечно масштабное нагрузочное тестирование там платное, но во всяком случае можно попробовать триальный режим.

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

Performance тестирование

performance тестирование

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

Зачастую performance тесты проводят тогда, когда проблема производительности уже показала себя. Так было и в моем случае.

Часто повторяющиеся ситуации

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

Чтобы найти такие проблемы нужно иметь доступ к коду, базам данных, консоли сервера и отчетливо понимать что именно происходит. Здесь очень уместен Линукс для тестировщика и вообще умение работать с командной строкой.

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

Поиск: профайлеры кода

Еще здесь очень полезны системы мониторинга. К примеру Zabbix, Ansible и другие. С их помощью можно отслеживать потребляемые ресурсы тех или иных скриптов и строить долгосрочные отчеты. Эти системы используются в основном dev-ops командами, но также сильно помогут в тестировании.

На этом все. Надеюсь я показал в какую сторону копать и что практиковать. Буду рад вашим вопросам в комментариях.

По той же теме:

2 Комментарии

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

    • Андрей Ким

      29.08.2016 в 08:40

      Здесь одним комментом не обойдешься =). Я постараюсь выделить это в отдельную статью.

Добавить комментарий