Как разрабатывать и запускать нагрузочные тесты с использованием Apache JMeter и Taurus
Весь код виновен, пока не будет доказана его невиновность. — Анонимный
Цель этой статьи – помочь вам разработать и запустить нагрузочный тест 👍
Как разработчики, мы уже обладаем базовыми знаниями, и, приложив немного усилий, мы могли бы расширить ваш набор навыков.
- Ваша компания не может позволить себе нанять инженеров по производительности
- Недостаточно тестировщиков по сравнению с разработчиками
- Навыки и знания могут помочь вам написать лучший и масштабируемый код
- Меньше зависеть от чужого опыта
В то время как модульные и интеграционные тесты гарантируют функциональную корректность кода, нагрузочное тестирование измеряет его производительность, что не менее важно. Только нагрузочный тест может пролить свет на проблемы параллелизма, эффективно ли запросы к базе данных используют индексы вместо полного сканирования таблицы, где находятся узкие места, эффективно ли масштабируется приложение, каково время отклика и пропускная способность приложения и так далее.
В этом разделе мы разработаем и запустим нагрузочные тесты Apache JMeter .
Настройка среды
Что касается среды, либо найдите подходящий онлайн-ресурс (не рекомендуется), создайте свой собственный простой сервис (node, python, что угодно), либо просто используйте веб-сервис , предоставленный в этой статье.
Мы будем использовать простой веб-сервис spring boot на основе 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
Щелкните правой кнопкой мыши на плане тестирования и выберите Добавить > Потоки (пользователи) > Группа потоков
. План тестирования должен содержать по крайней мере 1 группу потоков.
- /| Количество потоков (пользователей)
Период нарастания |/(в секундах)
- . Сколько времени потребуется, чтобы охватить максимальное количество пользователей?
Сколько раз или в течение какого времени запускать тест
Шаг 2
Давайте уточним, что тестировать. Щелкните правой кнопкой мыши на Группа потоков
и выберите Добавить > Элементы конфигурации > HTTP-запрос по умолчанию
параметр.
Элементы конфигурации полезны, если вы хотите поделиться конфигурацией между одним или несколькими запросами, например, например, адрес сервера, номер порта, токен и т.д.
Давайте заполним элемент конфигурации HTTP-запроса по умолчанию
Также давайте добавим HTTP Header Manager
через Добавить > Элементы конфигурации > Диспетчер HTTP-заголовков
для Типа содержимого
заголовок
Шаг 3
Давайте настроим http-запросы, Щелкните правой кнопкой мыши на Группе потоков
и выберите Добавить > Сэмплер > HTTP-запрос
- Каков тип метода, т.е.
ПОЛУЧИТЬ
илиОПУБЛИКОВАТЬ
и т.д. - Каков путь к api, т.е.
/students/list
или/студенты
и т.д.
Щелкните правой кнопкой мыши на дублировать
запрос и обновить его.
Шаг 4
Слушатели
используются для сбора результатов. Щелкните правой кнопкой мыши на Группе потоков
и выберите Добавить > Прослушиватель > Сводный отчет
вариант.
Планы тестирования на словах, мы создаем План тестирования Apache JMeter
для нагрузочного тестирования
двух API с 50 пользователями
с увеличением продолжительности 30 секунд
.
Если у вас запущен нагрузочный тест tiny service 4
(или ваш собственный), то давайте нажмем кнопку воспроизведения и посмотрим результаты в Сводном отчете
Запустите Тест Apache JMeter С помощью CLI
Графический интерфейс не рекомендуется использовать для выполнения сложных тестов. Давайте откроем сложный образец теста из здесь .
Приведенный выше план тестирования содержит больше элементов
-
Случайная переменная
генерирует значение между x и y - Контроллер
цикла
выполняет содержимое цикла x раз
Чтобы сгенерировать содержательный отчет, нам нужен user.properties
( Источник ) в каталоге, где .jmx
тест есть.
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 нагрузочный тест.jmx -l log.jtl -e -o выходной каталог
В приведенной выше команде -n
означает нет графического интерфейса
символ -t
указывает на сценарии нагрузочный тест.jmx
в -l
означает log.jtl
где -e
и -o
предназначены для отчетности.
output-directory
будет содержать кучу файлов, включая/| index.html который открывает графические результаты теста, как показано ниже.
На этом графике левая сторона – ВЕРШИНА, а правая – сводка запроса. Красный цвет указывает на все наши 404 ошибки, а зеленый – на 200 успешных запросов.
Некоторые цифры, относящиеся к Количеству выборок, времени отклика, пропускной способности
Самое главное, что Время отклика
и Пропускная способность
Наконец, стоит упомянуть, что Apache JMeter
может быть настроен для прослушивания активности браузера и захвата сетевого запроса. Подробности смотрите здесь .
Теперь, когда мы знаем, как использовать Apache JMeter
для выполнения базового нагрузочного теста, давайте рассмотрим open-source framework Телец . Короче говоря, одна из причин рождения Taurus заключалась в том, что Apache JMeter
имеет крутую кривую обучения, а Taurus
делает вещи намного проще.
Taurus – это уровень абстракции (или оболочка) поверх Apache JMeter, и это означает, что вы можете запустить скрипт Apache JMeter с помощью Taurus. Так что идите вперед и установите Taurus, используя простой в инструкция по установке
Скрипты Taurus
могут быть написаны на YAML
или JSON
с использованием последующих блоков
Сценарии
– это в основном то, где определяется один или несколько запросов. Для каждого сценария
определяется выполнение
с такими реквизитами, как количество пользователей
, продолжительность
, период нарастания
и так далее. Модули
позволяют нам настроить исполнителя
, которым может быть Apache JMeter
, Селен
и так далее. Аналогично, 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
Нагрузочный тест /студенты/список
api, достигающий 15
пользователей в течение 2 секунд
(увеличение) в течение 10 секунд
и отображение реального результата
в консоли, а также в файле csv
.
Для запуска теста Taurus (образец предоставлен здесь ) , , просто запустите команду bzt test.yaml
В тесте Taurus
вы также можете настроить сценарий так, чтобы он указывал на сценарий Apache JMeter
и переопределял выполнение и другие параметры.
scenarios: JMeterExample: script: student_crud_jmeter.jmx
Taurus
кажется очень интересным фреймворком, и его стоит проверить. Это очень хорошо задокументировано здесь .
Я настоятельно рекомендую проверить Apache JMeter и Taurus документация, если вы хотите узнать больше техник и приемов.
Прочтите некоторые из моих других статей на Medium
Примечание : Я подумываю о том, чтобы отойти от Medium из-за их платной сети. Я вижу огромную разницу в статистике моих историй до и после введения платного доступа. Я предпочитаю, чтобы мои статьи были доступны бесплатно.
Не стесняйтесь подключаться и подписываться на меня в ваших любимых социальных сетях для будущих статей.
Оригинал: “https://dev.to/rhamedy/how-to-load-test-a-developer-s-guide-to-performance-testing-4e8m”