Как разработать и запустить нагрузочные тесты с помощью Apache JMeter & Taurus

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

Весь код виновен, пока его невиновность не доказана. - анонимный

Задача

Цель этой статьи - помочь вам разработать и запустить нагрузочный тест 👍

Зачем учиться?

Как разработчики, у нас уже есть базовые знания, и, приложив немного усилий, мы можем расширить свой набор навыков.

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

Почему нагрузочное тестирование?

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

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

Начало работы с Apache JMeter

В этом разделе мы разработаем и запустим нагрузочные тесты Apache JMeter.

Настройка среды

Что касается среды, либо найдите подходящий онлайн-ресурс (не рекомендуется), придумайте свой собственный простой сервис (узел, python, что угодно) или просто используйте веб-сервис, представленный в этой статье.

Мы будем использовать простую веб-службу весенней загрузки на основе Java, которая предоставляет четыре (4) конечных точки. Требуются Java 1.8 и Apache Maven.

git clone https://github.com/rhamedy/tinyservice4loadtest.git
cd tinyservice4loadtest
mvn spring-boot:run

Apache JMeter

Пожалуйста, установите Apache JMeter с сайта загрузки, распакуйте и выполните следующую команду

apache-jmeter/bin/jmeter.sh       // Linux & MacOS
apache-jmeter/bin/jmeter.bat      // Windows

Разработайте план тестирования для Apache JMeter

Давайте проверим следующие API

http://localhost:8080/students/list  - [GET] List students
http://localhost:8080/students/id    - [GET] Get student by id
http://localhost:8080/students       - [POST] Create student
http://localhost:8080/students/id    - [DELETE] Delete student by id

Все образцы тестов для вышеуказанных конечных точек доступны в репозитории GitHub.

Шаг 1 - Щелкните правой кнопкой мыши план тестирования и выберите Add > Threads (Users) > Thread Group. В плане тестирования должна быть как минимум 1 группа потоков.

  1. Number of Threads (users)
  2. Ramp-Up period (in seconds). Как долго работать с максимальным количеством пользователей?
  3. Сколько раз и как долго проводить тест

Шаг 2. Уточняем, что тестировать. Щелкните правой кнопкой мыши на ThreadGroup и выберите вариант Add > Config Elements > HTTP Request Defaults.

Элементы конфигурации полезны, если вы хотите использовать конфигурацию для одного или нескольких запросов, например, адрес сервера, номер порта, токен и т. д.

Давайте заполним элемент конфигурации HTTP-запроса по умолчанию.

Также давайте добавим HTTP Header Manager через Add > Config Elements > HTTP Header Manager для заголовка Content-Type

Шаг 3. Настроим HTTP-запросы. Щелкните правой кнопкой мыши на ThreadGroup и выберите Add > Sampler > HTTP Request

  1. Каков тип метода, т. Е. GET или POST и т. Д.
  2. Что такое путь api, т.е. /students/list или /students и т. Д.

Щелкните правой кнопкой мыши duplicate запрос и обновите его.

Шаг 4 - Listeners используются для сбора результатов. Щелкните правой кнопкой мыши ThreadGroup и выберите вариант Add > Listener > Summary Report.

В планах тестирования на словах мы создаем с Apache JMeter Test Plan по Load Test два API с 50 Users с наращиванием на 30 seconds.

Если у вас запущен tinyservice4loadtest (или ваш собственный), то давайте нажмем кнопку воспроизведения и посмотрим результаты в Summary Report

Запустите тест Apache JMeter с помощью интерфейса командной строки

GUI не рекомендуется для выполнения сложных тестов. Откроем сложный образец теста отсюда.

В приведенном выше плане тестирования больше элементов

  • Random Variable генерирует значение от x до y
  • Loop Controller выполняет содержимое цикла x раз

Для генерации содержательного отчета нам нужен user.properties (Источник) в каталоге, где находится .jmx test.

jmeter.reportgenerator.report_title=Apache JMeter Dashboard
jmeter.reportgenerator.overall_granularity=60000
jmeter.reportgenerator.graph.responseTimeDistribution.property.set_granularity=100
jmeter.reportgenerator.apdex_satisfied_threshold=1500
jmeter.reportgenerator.apdex_tolerated_threshold=3000
jmeter.reportgenerator.exporter.html.property.output_dir=/tmp/test-jmeter.reportgenerator.exporter.html.filters_only_sample_series=true

Запустите тестовый скрипт с помощью команды (выходной каталог должен быть пустым)

jmeter.sh -n -t loadtest.jmx -l log.jtl -e -o output-directory

В приведенной выше команде -n означает no gui, -t указывает сценарии loadtest.jmx, -l - для log.jtl, где -e и -o - для отчетности.

output-directory будет содержать набор файлов, включая index.html, который открывает графические результаты теста, как показано ниже.

На этом графике левая сторона - это APDEX, а правая часть - это Request сводка. Красный цвет указывает на все наши 404 ошибки, а зеленый - 200 успешных запроса.

Некоторые числа, относящиеся к Number of samples, Response time, Throughput

Самое главное Response Time и Throughput

Наконец, стоит упомянуть, что Apache JMeter можно настроить на прослушивание активности браузера и захват сетевых запросов. Подробнее см. Здесь.

Начало работы с Тельцом

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

Taurus - это слой абстракции (или оболочка) поверх Apache JMeter, а это означает, что вы можете запускать Apache JMeter скрипт с помощью Taurus. Так что продолжайте и устанавливайте Taurus, используя простую инструкцию по установке.

Сценарии Taurus могут быть написаны на YAML или JSON с использованием следующих блоков.

Scenarios - это в основном один или несколько запросов. Для каждого scenario определяется execution с такими реквизитами, как no of users, duration, ramp-up period и так далее. modules позволяет нам настраивать executor, которые могут быть Apache JMeter, Selenium и так далее. Точно так же reporting позволяет настроить способ создания отчета, то есть csv, отчеты в реальном времени в консоли или отправить результат на веб-сайт blazemeter.

scenarios: 
 StudentList: 
  requests: 
   - url: http://localhost:8080/students/list
     label: Student List
execution: 
 - scenario: StudentList 
   concurrency: 15
   ramp-up: 2s
   hold-for: 10s
reporting:
 - module: console 
 - module: final-stats 
   summary: true 
   percentiles: true
   test-duration: true 
   dump-csv: single_scenario_single_req.csv

Нагрузочный тест /students/list api, охватывающий 15 пользователей в 2s (наращивание мощности) в течение 10s и отображение live result в консоли, а также csv файл.

Чтобы запустить тест Тельца (образец предоставлен здесь), просто выполните команду bzt test.yaml

В Taurus тесте вы также можете настроить scenario, чтобы он указывал на Apache JMeter скрипт и отменял выполнение и другие параметры.

scenarios: 
 JMeterExample: 
  script: student_crud_jmeter.jmx

Taurus кажется очень интересным фреймворком, и его стоит проверить. Это очень хорошо задокументировано здесь.

Заключение

Я настоятельно рекомендую ознакомиться с документацией Apache JMeter и Taurus, если вы хотите узнать больше о методах и приемах.

Ранее я написал следующую статью, в которой объяснял некоторые ключевые привычки и вещи, которые я хотел бы знать в начале своей карьеры разработчика.



Я также написал статью о том, как настроить инструмент покрытия кода JaCoCo с помощью Maven и Gradle для проектов на основе Java.



и если вам интересно внести свой вклад в разработку open-source, вам может быть полезна следующая статья.



Вы можете подписаться на меня в Medium, чтобы увидеть больше статей, связаться со мной в LinkedIn и Twitter.