Е2Е-тестирование: как за 2 года вырасти от внепроектной идеи до проекта и увеличить покрытие автотестами в 4 раза. e2e-тесты.. e2e-тесты. автоматизация тестирования.. e2e-тесты. автоматизация тестирования. Блог компании MOEX.. e2e-тесты. автоматизация тестирования. Блог компании MOEX. Тестирование IT-систем.

Всем привет! Меня зовут Ренат Дасаев, и я продолжаю рассказ о развитии E2E‑тестирования в Московской Бирже. За два года после публикации первой статьи многое изменилось: мы переупаковали процессы, расширили команду и существенно обновили технический стек. Хотите узнать, как нам удалось масштабироваться и какие инструменты сегодня ускоряют работу? Тогда – эта статья для вас!

Изменения в команде

Наше направление изначально существовало вне проекта, что серьезно ограничивало бюджет и возможности. В 2024 году мы запустили полноценный проект, показав высокий ROI автоматизации. После сбора потребностей мы пересмотрели сотни бизнес‑процессов (БП) и выделили 215 приоритетных. План проекта рассчитан на 2,5 года, в команде – 18 человек. Найм занял десять месяцев, и сейчас коллектив работает на полную мощность.

Вот как изменилась команда количественно и качественно (табл. 1).

Роль

Обязанности

Число сотрудников

Что изменилось за последние 2 года?

1

Разработчик автотестов

Разработка E2E – тестов по согласованным тестовым сценариям.

Поддержка E2E – тестов.

Участие в оптимизации тестового фреймворка.

9

Команда выросла с 2 до 9 человек.

2

Разработчик инструментов тестирования

Разработка инструментов/сервисов/фреймворков/утилит для тестирования.

2

Такой роли не было. Подобные запросы решались разработчиками автотестов, доступными на тот момент.

3

Тест – аналитик

Анализ функциональных и технических заданий,полученных от бизнеса.

Разработка и согласование E2E – сценариев с бизнесом.

Прохождение разработанных сценариев на тестовых контурах для подтверждения их проходимости и готовности стенда к автоматизации тестирования.

2

Такой роли не было.

Руководитель направления и начальник отдела тестирования сами занимались аналитикой и согласованием тестовых сценариев с бизнесом.

4

DevOps – инженер

Управление и администрирование тестовым полигоном.

Развертывание новых сервисов на тестовом контуре.

Техническая поддержка всей команды E2E.

 

 

 

2

Такой роли не было.

Руководитель направления и старший разработчик сами занимались деплоем и поддержкой тестового полигона.

5

Руководитель направления

Планирование технических задач на направлении.

Делегирование задач сотрудникам.

Обеспечение выполнения поставленных задач и контроль.

Оптимизация рабочих процессов.

Разработка автотестов и их поддержка на одном из направлении внутри E2E.

Участие в финальном релизном тестировании в промышленном контуре.

1

Меньше стал заниматься DevOps – активностями и разработкой автотестов, фокус на менеджмент.

6

E2E-лидер

Анализ потребностей бизнес – заказчика.

Административный контроль за показателями в команде.

Трансляция метрик выполненной работы вышестоящему руководству.

Оптимизация рабочих процессов.

1

Без изменений.

7

Менеджер проекта

Управление бюджетом проекта.

Открытие новых этапов проекта.

1

Такой роли не было.

8

Управляющий комитет

Утверждение бюджета и списка задач в проекте.

1

Такой роли не было.

Таблица №1. Изменения в составе команды за два года

Связь между ролями в нашем проекте в виде схемы:

Рисунок №1. Взаимосвязь ролей в нашем проекте

Рисунок №1. Взаимосвязь ролей в нашем проекте

Оптимизация внутри команды

Число разработчиков автотестов выросло в 4,5 раза, поэтому мы разделили их на три доменные группы:

  • Кросс‑рыночные операции – процессы, работающие на нескольких рынках

  • Отчетные системы – генерация и отправка отчетов

  • Листинг – постановка инструментов на торги и сопутствующие процессы

В каждой группе назначен ответственный, который:

●       Отслеживает прогресс задач

●       Решает внутренние технические вопросы

●       Участвует в планировании

Изменения в процессах

1.     Дежурство

Каждый день один разработчик автотестов из каждой подгруппы и DevOps‑инженер проверяют инциденты и падения ночного регресса. Статусы публикуются в общем треде корпоративного мессенджера – это ускоряет реакцию на проблемы.

2.     Ежедневные митинги

Голосовые стендапы заменены текстовыми в мессенджере: до 09:30 каждый участник отправляет:

●       Отчет о выполнении задач за вчера

●       План на день

●       Текущие блокеры

Плюсы:

●       История задач всегда под рукой

●       Руководителям проще анализировать статус

●       Подготовка отчета занимает менее 5 минут

●       Унификация: вся информация за день собирается в одном треде

3.     Участие в финальном релизном тестировании

С прошлого года мы участвуем в финальном релизном тестировании на PROD‑контуре. Перед запуском E2E ‑ тестов:

  • Согласовываем список тестов и тестовых сущностей (участники торгов, организации, инструменты)

  • Определяем тайминги и порядок обновления сервисов

  • Выполняем откат тестовых сущностей

По итогам прогона готовим подробный отчет о тестировании и заводим артефакты в Jira – с ошибками и предложениями.

Технические изменения

За прошедшие 2 года изменения произошли не только в процессах, но и в техническом плане.

1.     Тестовый полигон

На полигоне появились:

●       Торгово ‑ клиринговая система срочного рынка (ТКС СР)

●       Личные кабинеты участника и эмитента (ЛКУ и ЛКЭ)

●       Компоненты Единой регистрации клиентов (ЕРК) и рынка депозитно-кредитных операций (ДКО):

o   торговые базы

o   базы ЭДО

●       ИТАС (IT Automated Service – система обслуживания потребителей технических услуг)

●       Zabbix – мониторинг QA ‑ ресурсов с уведомлениями в мессенджер

●       Apache Guacamole – песочница для разработчиков автотестов

●       Nginx ‑ кластер – SSL для тестовых сервисов

●       pg_ctlcluster – управление кластерами PostgreSQL

Активно переводим тестовые ресурсы на Red OS в рамках импортозамещения.

2.     Инструменты

Интерпретатор Python

Мы перешли с Python 3.8 на 3.11. Что мы получили в итоге?

●       Безопасность

o   Жизненный цикл Python 3.8 закончился 7 октября 2024. Python 3.11 планируется поддерживать до октября 2027.

●       Расширенная типизация (Type Hints)

●       Улучшения в collections

●       Улучшенная поддержка match/case (структурное сопоставление)

●       Быстродействие

o   Судя по бенчмаркам улучшение в быстродействии может достигать до 20%. У нас длинные E2E-тесты, где много различных ожиданий, поэтому тут и не ждали чудес. Главное, что медленнее не стало.

Линтер и автоформатер

До этого использовали связку flake8 + isort + yapf.

К недостаткам можно отнести:

–        Обновляется один компонент, скорее всего требуется обновить всю связку.

–        Каждый компонент настраивается отдельно со своим конфигом.

Этих недостатков лишен ruff.

●       Если какого-то функционала в нём нет, его можно расширить через плагины.

●       Единый конфиг ruff.toml или pyproject.toml.

●       При небольших изменениях разница заметна лишь при внимательном сравнении. Для больших MR’ов скорость обработки важна меньше, так как мы избегаем их создания. В конвейере GitLabCI шаг линтера и форматера составляет доли процента времени работы CI/CD-сервера.

●       Ruff изначально выводит отчет в формате JSON (по состоянию на январь 2025). Разработали скрипт, генерирующий HTML – отчет, который прикрепляется к pipeline

●       Инструмент активно развивается: регулярные релизы, широкое комьюнити.

Healthcheck сервисов перед запуском автотестов

Каждый наш E2E-автотест промаркирован списком микросервисов, задействованных в его выполнении. На основании этого списка перед запуском теста проверялось, что все pod’ы с соответствующими микросервисами в кластере Kubernetes находятся в статусе Running. Если проверка проходила успешно – тест запускался. В противном случае он помечался как skipped с указанием причины.

Однако на практике такой проверки часто было недостаточно. Проблемы возникали в следующих кейсах:

●       Отсутствие livenessProbe. Не все pod’ы имеют livenessProbe, поэтому при сбоях контейнер не перезапускается, хотя сервис недоступен. При этом pod визуально продолжает числиться в статусе Running.

●       Долгая инициализация контейнера. Контейнер может долго проходить все пробы, в результате чего Kubernetes принимает решение перезапустить pod. Это может повторяться циклически, пока инженер вручную не разберется с проблемой.

●       Сервис поднят в Kubernetes, но недоступен через ingress.

Чтобы повысить точность проверки готовности микросервисов перед запуском автотестов, мы решили доработать наш механизм пробирования.

Цель – перед запуском любого автотеста выполнять HTTP-запросы ко всем микросервисам, задействованным в этом тесте, и на основе ответа убедиться, что сервис действительно готов принимать и обрабатывать входящие запросы.

При этом мы стремились, чтобы эти запросы были:

●       Стандартизированными (меняется только имя сервиса)

●       Минимально нагружающими сеть

●       Легко обрабатываемыми самим сервисом

●       Осуществлялись через ingress

В большинстве микросервисов уже существовал метод /health (его название могло варьироваться в зависимости от внутренних практик), возвращающий статус “UP” при готовности и “DOWN” в противном случае.

Были выполнены следующие шаги:

●       Проверили наличие health-эндпоинтов у всех микросервисов, задействованных в E2E-тестах

●       Для отсутствующих – создали задачи в Jira на доработку

●       Обновили модели и адаптеры более чем в 250 модулях

●       Обновили генератор модулей: теперь в новых микросервисах метод /health создается автоматически

Результаты внедрения:

●       Анализ ночных прогонов упростился: если сервис не готов, тест пропускается, а не падает с ошибкой

●       Получение полного отчета о тестировании происходит быстрее

●       В течение первого месяца эксплуатации были зарегистрированы артефакты в Jira по недоступным сервисам — и оперативно устранены

Эмуляция почтового сервера во время автотестирования

Для снижения нагрузки на основной почтовый сервер мы развернули мок-версию SMTP-сервера MailHog внутри тестового кластера Kubernetes. Теперь все приложения, запущенные в тестовом окружении, отправляют почтовые уведомления через MailHog.

Инструмент обладает удобным веб-интерфейсом для просмотра содержимого почтового ящика и предоставляет API для работы с письмами (получение списка, удаление, получение содержимого по ID).

Как обычно, был разработан Python-модуль для работы с API MailHog – это позволяет удобно использовать его в автотестах, проверяя нужные атрибуты писем: заголовок, тело и прочее.

Ограничения инструмента

MailHog не поддерживает SMTP-авторизацию и TLS/SSL – шифрование. Однако в нашем случае это не является проблемой, поскольку сервер развернут внутри тестового кластера и доступен только изнутри.

Мокирование сервисов

Зачем нужны моки в E2E-тестах?
В тестовом контуре не всегда возможно оперативно развернуть новую систему или ее компоненты: настройка CI/CD может занять значительное время. Если тест – аналитику нужно начать работу с системой, которая еще отсутствует на стенде, мы действуем по следующему сценарию:

1.     Создаем задачу в Jira для DevOps

2.     Параллельно разворачиваем мок – систему, настраиваем маппинг ответов

  • Проверяем сценарии на UAT – полигоне, где работают реальные интеграции

  • Переносим настройки на тестовый полигон и готовим окружение к автоматизации

Почему был выбран Wiremock?

●       Open Source и бесплатен

●       Поддерживает управление через UI и REST API

●       Легко запускается: достаточно передать аргументы в jar-файл

Что было реализовано:

●       Helm-чарт для деплоя WireMock в Kubernetes

●       Библиотека для работы с API WireMock, позволяющая:

○       Получать/удалять запросы

○       Создавать/обновлять/удалять маппинги

○       Получать список всех маппингов

○       Полностью очищать мок-сервер от данных

Разработка веб-приложения для тестирования новых инструментов фондового рынка

В предыдущей статье были описаны веб-сервисы, разработанные для автотестирования. Эти наработки и технические решения легли в основу проекта для Операционного департамента фондового рынка (ОД ФР).

Задача
Автоматизировать тестирование новых инструментов фондового рынка (ценные бумаги – акции, облигации), готовящихся к торгам на следующий день.

Текущий процесс (до автоматизации)

  • Подготовка тестового контура (за нее отвечает команда сопровождения ФР)

  • Ручное тестирование, выполняемое маклерами ОД ФР:

○       Анализ параметров бумаг в таблице

○       Подача заявок и заключение сделок через торговый терминал

○       Проверка позитивных и негативных сценариев

○       В случае выявления ошибок – корректировка описания и повторное тестирование

Решение

Команда E2E-автотестирования разработала веб-сервис FondTest, автоматизирующий второй этап – тестирование инструментов.

Преимущества решения

●       Сокращение времени тестирования с ~20 минут до 7 – 10 минут на бумагу

●       Снижение операционного риска, связанного с ручным вводом

Алгоритм работы FondTest:

  • Копия базы выкладывается на тестовый сервер

  • Торговая система запускается в режиме “следующий торговый день”

  • Маклер проходит аутентификацию в сервисе FondTest

  • Выбирает необходимые инструменты для тестирования (см. Рисунок 3. “Список инструментов, готовых к описанию ‘на завтра’”).

  • При необходимости редактирует шаблон по режиму, если изменились данные (см. Рисунок 4. “Список шаблонов” и Рисунок 5. “Форма шаблона”), а также может:

○       создавать новый шаблон с помощью формы-генератора

○       изменять/удалять шаблоны

○       импортировать/экспортировать шаблоны

  • Запускает автотесты по выбранному списку инструментов (см. Рисунок 6. “Список тест-кейсов” и Рисунок 7. “Запуск автотестов из сервиса”)

  • Получает результаты прямо в интерфейсе сервиса (см. Рисунок 8. “Отчет о тестировании”)

  • Принимает решение об утверждении описания для боевой базы

Технологическая реализация

Frontend:

●       Bootstrap UI (фреймворк с готовыми компонентами на JavaScript и CSS)

Backend:

●       Python 3.11

●       Flask (веб-фреймворк)

●       Blueprint (организация API-маршрутов)

●       Gunicorn (WSGI-сервер)

●       MongoDB (для хранения шаблонов)

●       PostgreSQL (для хранения данных пользователей)

●       Alembic (система миграций для PostgreSQL)

●       Memcached (система кеширования)

●       Биржевой модуль на Python для взаимодействия с торговой системой

Схема работы

Рисунок №2. Схема процесса тестирования Fondtest

Рисунок №2. Схема процесса тестирования Fondtest

Результаты
Разработка FondTest завершена. Решение используется ОД ФР уже несколько месяцев.

Преимущества для маклеров
●       Прогон всех тестов по заранее заданным режимам занимает до 10 минут (экономия ~100 минут в день на 10 инструментах)

●       Удобство: достаточно нажать кнопку и переключиться на другие задачи

●       Надежность: сервис устойчив к нагрузкам и показывает эффективность

Рисунок №3. Список инструментов, готовых к описанию “на завтра”

Рисунок №3. Список инструментов, готовых к описанию “на завтра”
Рисунок №4. Список шаблонов

Рисунок №4. Список шаблонов
Рисунок №5. Форма шаблона

Рисунок №5. Форма шаблона
Рисунок №6. Список тестовых кейсов

Рисунок №6. Список тестовых кейсов
Рисунок №7. Запуск автотестов из сервиса

Рисунок №7. Запуск автотестов из сервиса
Рисунок №8. Отчет о тестировании

Рисунок №8. Отчет о тестировании

Помимо сервиса FondTest наша команда помогает автоматизировать не только тестирование сложных бизнес-процессов, но и подготовительные работы в настройке стенда для дальнейшего тестирования – это то, что отнимает у пользователей очень много ресурсов. И чем дальше, тем бОльший объем таких работ будет на нашем проекте. 

Итоги

За два года мы выросли с внепроектной инициативы до полноценного проекта с командой из 18 человек. Немного цифр:

Параметр

Сентябрь 2023

Июль 2025

Прирост

Число покрытых E2E-тестами БП

42

207

+391%

Число артефактов в jira по результатам E2E-автотестов

278

722

+160%

Руководство позитивно оценивает наше направление и результаты.

Что хотим улучшить:

●       Привлечь искусственный интеллект (ИИ) для разбора ночных прогонов

●       Использовать ИИ в проверке merge request’ов

●       Расширить покрытие тестов в PROD

●       Принимать активное участие в разработке сервисов/скриптов автоматизации для тестирования

Спасибо за внимание! Если остались вопросы или идеи для продолжения – пишите в комментариях.

 

Автор: ren_qa

Источник

Rambler's Top100