Как мы создали платформу для НТ и интегрировали ее с Test IT
Инженер по нагрузочному тестированию в Test IT Антон Бородин во время работы в компании разработал платформу для НТ на базе инструмента Apache AirFlow. О том, какие подходы и решения были для этого использованы, Антон подробно рассказал в статье на Хабре. Публикуем ее краткое изложение.
Шаг 1. Возрождение нагрузочного тестирования
Направление нагрузочного тестирования в компании требовало модернизации: скрипты на JMeter потеряли актуальность, не было автоматизации, требовался глубокий рефакторинг.
Восстановление процесса началась с отбора и создания приоритетных скриптов для JMeter, которые параметризировались для использования в различных тестах. Затем эти тесты были интегрированы в автоматическую систему с помощью PyTest, что позволило запускать их сериями, легко изменять параметры, объединять разные тесты, а также автоматически анализировать результаты.
Старт нагрузочного теста осуществлялся вызовом подпроцесса, завершение которого ожидал фреймворк.
Шаг 2. Создание отчетов и интеграция с Test IT
Использование Python и его библиотек (pandas, NumPy, Matplotlib) позволило проводить статистический анализ результатов нагрузочных тестов. Данные собирались через PromQL-запросы к Prometheus, результаты интегрировались в HTML. Отчеты генерировались автоматически в контейнере при запуске нагрузочных тестов.
Интеграцию с Test IT удалось настроить с помощью использования фреймворка PyTest и стандартного адаптера нашей платформы. О том, как подключать адаптеры, мы рассказывали в материале по ссылке. В результате нагрузочные прогоны стали появляться в системе управления тестированием, а отчеты — в виде вложений.
Впоследствии для лучшей визуализации отчетов пробовали разные инструменты, и в конце-концов остановились на Jupyter Book.
Шаг 3. Создание хранилища на базе Apache CouchDB и S3 Minio
Чтобы проводить аналитику между прогонами, разделенными во времени, появилась идея создать базу данных с результатами. После рассмотрения разных вариантов для ее создания выбрали такие инструменты, как база данных CouchDB, сервис S3 MinIO и микросервис на базе FastAPI. Для работы с этой подсистемой нагрузочные тесты обросли соответствующим интеграционным кодом.
Шаг 4. Рефакторинг и создание платформы для НТ
С течением времени нагрузочные тесты становились более сложными и монолитными. Ошибки в одном компоненте могли приводить к сбою всей системы, а добавление новых функций требовало значительных усилий.
Рефакторинг начался с выделения трех основных компонентов: модуля генерации нагрузки, модуля анализа результатов и модуля хранения и генерации отчетов. Для улучшения модуля анализа сначала использовался фреймворк Celery, который помог разделить его на множество независимых задач.
Проблему интеграции разных инструментов генерации нагрузки решили через использование контейнеров. А для управления всем процессом выбрали Apache Airflow — это система, которая позволяет автоматизировать выполнение задач в виде ориентированного ациклического графа (DAG). Для хранения результатов решили использовать базу данных TimeScale. Так появилась платформа для нагрузочного тестирования.
Шаг 5. Интеграция платформы для НТ с Test IT
После появления платформы для НТ мы настроили интеграцию с Test IT, чтобы нагрузочные тесты можно было запускать прямо из интерфейса TMS.
Для настройки интеграции:
-
Создали в Test IT отдельный проект для нагрузочных тестов.
-
Загрузили в него автотесты, содержащие метаданные нагрузочных тестов. Это то, что ожидает DAG на входе. Метаданные хранятся внутри шагов автотеста.
-
Настроили вебхук на запуск автотестов. Вебхук вызывает адаптер и передает стандартный контекст. Подробнее о настройке вебхуков — по ссылке.
-
Создали специальный REST адаптер на базе Rocket языка Rust. Он принимает на вход стандартный контекст, извлекает данные о нагрузочных тестах и проводит запуск DAG в Airflow.
Для запуска нагрузочных тестов из Test IT:
-
Выбрать нагрузочные тесты, составляющие прогон
-
Нажать кнопку «Запустить автотесты»
-
Выбрать окружение при помощи конфигурации
-
Нажать кнопку «Сохранить»
Помимо данной интеграции была создана и обратная — со стороны платформы для НТ. Это позволило отображать результаты нагрузочных тестов в Test IT.
Итоги
Так выглядит итоговая схема подключения основных компонентов платформы:
Результатом работы стала расширяемая платформа на базе Airflow, которая позволяет запускать произвольный инструмент НТ в виде контейнера с автоматическим анализом и хранением результатов в TimeScale. При этом вся система интегрирована с Test IT, что позволяет запускать нагрузочные тесты прямо из TMS и там же, в системе, отслеживать результаты.