Как разработать и запустить нагрузочные тесты с помощью 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 группа потоков.
Number of Threads (users)
Ramp-Up period (in seconds)
. Как долго работать с максимальным количеством пользователей?- Сколько раз и как долго проводить тест
Шаг 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
- Каков тип метода, т. Е.
GET
илиPOST
и т. Д. - Что такое путь 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 до yLoop 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.