Не так давно я начала писать тесты для нагрузочного тестирования с помощью инструмента artillery. Раньше писала тесты для K6, поэтому расскажу о преимуществах artillery по сравнению с К6, а также напишу пошаговый сценарий для настройки проекта с нуля.
Шаг 1. Установка
npm install g artillery@latest
Так как нам нужно не только отследить метрики, но и убедиться, что сервер присылает правильный ответ, также ставим плагин для сравнения ожидаемого результата с полученным:
npm i artillery-plugin-expect
Шаг 2. Создаем config
Target url, environment
Файл конфигурации нагрузочного тестирования это все, что нам нужно сделать для запуска тестов:
config: target: "https://yourapp.com/api"
Если вам нужно использовать разные environment в ваших тестах, они прописываются сразу после target url:
config: target: "https://bestapp.com/api" environments: dev: target: "https://bestapp.dev.com/api" qa: target: "https://bestapp.qa.com/api"
Фазы тестирования
Инструмент artillery позволяет использовать несколько вариантов последовательных нагрузок на ваше приложение. Фаза тестирования состоит из: duration время одной фазы; arrivalRate количество пользователей, добавляемых каждую секунду; ramptTo до какого количества пользователей в секунду будет нарастать нагрузка; name - имя для обозначения ваших фаз.
phases: - duration: 30 arrivalRate: 1 rampTo: 20 name: test1
Если у вас только один target url, то фазы нагрузочного тестирования размещаются сразу после него, если несколько environment, то добавляйте фазы в каждую переменную окружения.
Плагины
Добавляем плагин для ожидаемого результата:
plugins: expect: {}
Авторизация
Инструмент поддерживает базовую авторизацию с помощью username и password:
- get: url: "/auth" auth: user: username pass: password
Также можно вставить свой авторизационный header:
- post: url: "/auth" headers: Authorization: Basic secretKey
Шаг 3. Первый тест
Все тесты пишутся в разделе scenarios. Каждый сценарий имеет название, метод (GET, POST, PUT, DELETE и др.), url для каждого endpoint, body в формате json, а также необходимые проверки.
Пример простого теста:
scenarios: - name: "My first test" flow: - post: url: "/endpoint1" json: id: value expect: - statusCode: 200 - contentType: json - equals: - respMessage: "OK"
В equals добавляются все проверки, основанные на ответе вашего бэкэнда.
Шаг 4. Запуск тестов
Запуск нагрузочных тестов очень простой:
artillery run yourConfig.yml
Эту строку можно добавить в раздел scripts в package.json для быстрого запуска тестов.
-e <env> - запускает тесты для различных environment,
--quiet убирает все полученные результаты из консоли,
-o result.json добавляет результаты тестирования в файл отчета.
Создание html отчета
Отчет создается буквально в одну строку:
artillery report result.json
Сравнение с K6
Главное преимущество artillery это очень легкая настройка первого запуска тестов. Не надо переписывать тесты в формате, определяемом для K6, не надо писать bat-файл для того, чтобы запускать несколько тестов и сохранять результаты в отдельную папку. Достаточно сконфигурировать один файл.
Artillery работает с node.js, поэтому скрипт для запуска можно вставить в package.json.
Можно импортировать переменные из cvs-файла, брать переменные из полученного результата.
Отчет с графиками и диаграммами добавляется в одну команду и входит в бесплатную версию artillery.