Бизнес-событие в Москве для топов и тимлидов из IT: Yoonion Big Meetup

Как мы создали платформу для НТ и интегрировали ее с Test IT

131
НТ с Airflow и 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. 

Для настройки интеграции: 

  1. Создали в Test IT отдельный проект для нагрузочных тестов.

  2. Загрузили в него автотесты, содержащие метаданные нагрузочных тестов. Это то, что ожидает DAG на входе. Метаданные хранятся внутри шагов автотеста. 

  3. Настроили вебхук на запуск автотестов. Вебхук вызывает адаптер и передает стандартный контекст. Подробнее о настройке вебхуков — по ссылке

  4. Создали специальный REST адаптер на базе Rocket языка Rust. Он принимает на вход стандартный контекст, извлекает данные о нагрузочных тестах и проводит запуск DAG в Airflow. 


Для запуска нагрузочных тестов из Test IT:

  1. Выбрать нагрузочные тесты, составляющие прогон

  2. Нажать кнопку «Запустить автотесты»

  3. Выбрать окружение при помощи конфигурации

  4. Нажать кнопку «Сохранить»

Помимо данной интеграции была создана и обратная — со стороны платформы для НТ.  Это позволило отображать результаты нагрузочных тестов в Test IT.

Итоги

Так выглядит итоговая схема подключения основных компонентов платформы: 

Результатом работы стала расширяемая платформа на базе Airflow, которая позволяет запускать произвольный инструмент НТ в виде контейнера с автоматическим анализом и хранением результатов в TimeScale. При этом вся система интегрирована с Test IT, что позволяет запускать нагрузочные тесты прямо из TMS и там же, в системе, отслеживать результаты. 

Была ли статья полезной?