Автотесты и TMS: как мы реализовали интеграцию АФТ с Test IT

от автора

В предыдущих материалах мы уже рассказывали про подход к автоматизации функционального тестирования в ДОМ.РФ и использование Test IT в качестве Системы управления тестированием (далее — TMS). После этого возникла задача интегрировать с ней наши автотесты (АТ). 

Зачем вообще нужна интеграция АФТ с TMS

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

  • Выгрузка автотестов в TMS;

  • Публикация результатов запусков автотестов в TMS;

  • Связь ручных тест-кейсов с соответствующими им автотестами в единой тестовой модели;

  • Проставление в тест-планах ручного тестирования результатов выполнения тестов;

  • Проставление результатов выполнения автотестов, связанных с ручными тест-кейсами в тест-планах ручного тестирования;

  • Возможность разбора результатов выполнения автотестов в TMS;

  • Сбор статистики по результатам выполнения автотестов, числа и регулярности запусков, стабильности прохождения отдельных автотестов / по части функционала / по системе;

  • Запуск автотестов из TMS любым участником команды тестирования “по клику”. 

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

  • ручные тестировщики получают возможность анализировать запуски автотестов или даже запускать их самостоятельно, участвовать в разборе результатов;

  • автоматизаторы получают удобный инструмент для хранения статистики запусков и для разбора результатов, могут привлекать для этих задач других участников команд и подключаться только к разбору нетривиальных падений автотестов;

  • тест-менеджеры получают единый инструмент для планирования, мониторинга и сбора результатов и формирования отчётности о ручном и автоматизированном тестировании.

Что предлагал Test IT в качестве TMS для наших задач

Ранее используемое ДОМ.РФ вендорское решение предоставляло следующий функционал: 

  • были реализованы модули ручного тестирования с широкими возможностями управления ручной тестовой моделью, создание тест-планов, прохождение тест-кейсов в их рамках и формирование отчета;

  • отдельным модулем были автотесты. Модуль хранил сами сущности автотестов, историю их выполнения, а также имел возможность связывать автотесты с ручными тест-кейсами;

  • присутствовали отчеты и дашборды по всему проекту. (На 2020 год для наших задач имелись два таких модуля – про ручное тестирование и автотестирование).

Весь модуль автотестов управлялся только через API: нет возможности вручную ни создать автотест, ни удалить, ни привязать к нему ручной тест-кейс. Это отличительная особенность данной TMS, которая сохраняется и по сей день. 

Готового коробочного решения для интеграции автотестов с TMS по  API на тот момент не было. Сроки предоставления не назывались. А если бы решение и было, вероятно, оно все равно бы потребовало кастомизации под наш фреймворк с нашей стороны. С этого и началась история нашего плагина для интеграции AFTCore с Test IT.

Наши первые шаги к интеграции автотестов с TMS

Со стороны Test IT была предоставлена документация их API, а также swagger. У нас в ДОМ.РФ используется фреймворк автотестирования AFTCore, имеющий с одной стороны стандартный стек (Java, Maven, JUnit, Cucumber). И в то же время фреймворк сильно кастомизирован (работа с профилями, параметрами и переменными через самописный обработчик данных, механизм импорта одних сценариев в другие и проче). Поэтому на первом этапе была задача создать инструмент для выгрузки хотя бы одного автотеста в проект в Test IT, а далее — поэтапно расширять его функционал.

Для изучения возможностей API TMS использовался Postman. После первых успешных попыток собранных коллекций действий был создан отдельный maven проект на Java, REST Assured и Jackson, способный повторить эти действия. 

Когда дебаг был завершён, выбор итогового решения был сделан в пользу следующей архитектуры: реализация Cucumber-плагина с listener-ом, подключаемым к Cucumber-runner-у в проекте наших автотестов. 

Можно также отметить, что ДОМ.РФ был одним из первопроходцев интеграции автотестов большого развитого проекта автотестирования с Test IT, поэтому по пути мы встретили некоторое количество багов, подводных камней и нестыковок в документации. К счастью, коллеги из Test IT довольно охотно шли с нами на контакт и оперативно вносили исправления, помогая нам на этом нелёгком пути.

В результате нам удалось реализовать Cucumber-plugin для нашего фреймворка, способный реализовать CRUD-процедуры в секции автотестов проекта в Test IT. Мы смогли выгружать все автотесты нашего проекта в одну кучу и именовать их по названия сценария. 

Усложняем задачу: раскладываем сценарии по папкам

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

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

Следующий уровень: механизм управления выгрузкой

Далее нам потребовалось реализовать механизм управления выгрузкой: выгружать только необходимые сценарии, а не все существующие или не все запущенные. А если ранее выгруженный автотест становится ненужным — уметь удалять его из TMS. При этом в web-интерфейсе возможности управлять моделью автотестов не планируется, поэтому делать всё это необходимо в коде проекта автотестов.

В Cucumber аналогичная задача прекрасно решается с помощью тегов. Нам это показалось подходящим решением, т.к. работа с тегами уже хорошо знакома автотестерам, а в перспективе такой механизм имел большие возможности к расширению функционала. Плюс мы видели, что использование тегов будет удобным для решения будущих задач.

Так появились первые аннотации, управляющие выгрузкой автотестов: 

  • @TestIT — для автотестов, подлежащие выгрузке,

  • @TestIT_delete — для удаления неактуальных сценариев из TMS, 

  • сценарии без этих двух тегов не отслеживаются плагином.

Таким образом, мы стали выгружать только те автотесты, по которым необходимо вести статистику. 

Связываем автотесты с ручными тест-кейсами

Автотесты возникают не сами по себе. Как правило, в основе каждого автотеста лежит ручной тест-кейс, написанный функциональным тестировщиком и пройденный и переписанный уже не один десяток раз, прежде чем попасть в очередь на автоматизацию. И тут же снова вспомним про неотделимость ручной тестовой модели от автоматизированной. 

Так вот, в Test IT уже был реализован механизм связей ручных тест-кейсов с автотестами, причём по схеме “многие ко многим” (https://en.wikipedia.org/wiki/Many-to-many_(data_model)). С нашей стороны мы реализовали это так же через Cucumber-тег: теперь те автотесты, которые должны иметь связанность с какими-либо ручными тест-кейсами, имели не просто (или не только) тег @TestIT, а ещё и ID ручного тест-кейса в скобках, например, @TestIT[241/5321], где 241 и 5321 — id ручных тест-кейсов. 

Такие тесты теперь в интерфейсе TMS отображаются с иконкой “Ракета”, а не “Рука”, и попадают в статистику автоматизированных ручных кейсов. А в карточке такого кейса можно просмотреть список всех связанных с ним автотестов и перейти к ним по сслыке.

Взлёты (Passed) и падения (Failed): выгружаем результаты выполнения автотестов 

Следующим важным шагом было научить плагин выгружать результаты выполнения автотестов. Для этого мы подключили наш плагин к кукумбер-раннеру нашего фреймворка. Во время выполнения автотестов он логирует каждый шаг. После завершения всех автотестов результаты собирались плагином и с помощью API в Test IT создавался тест-ран, в который загружалась информация о ходе выполнения и статусе запущенных автотестов. 

В более ранних версиях в интерфейсе Test IT не было отдельной вкладки о запусках автотестов – информацию о запуске можно было посмотреть только в карточке конкретного автотеста. Тем не менее, мы получили возможность выгружать следующую информацию о выполнении автотеста:

  • дату и время начала и завершения сценария,

  • результат и время выполнения каждого шага,

  • результат с указанием места падения и прикреплением сообщения об ошибке,

  • информацию о запуске: система, конфигурация, ссылка на gitlab-job и allure-отчёт.

А позднее с обновлениями в интерфейсе Test IT появился раздел “Запуск автотестов”. В TMS появилась возможность увидеть подробную информацию о прогонах, производить разбор результатов с проставлением причин падения, возможностью персонального комментирования автотестером и прикрепления ссылок на баг-трекер. И если ранее Test IT был главным орудием ручного тестировщика или тест-менеджера, то теперь он стал еще и удобным инструментом для автоматизатора. 

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

В 2021 году один из проектов преподнес нам нетривиальную задачу. Автотесты выполнялись в изолированной среде без доступа к TMS. Стандартный механизм плагина подразумевал выгрузку сразу после выполнения последнего теста и не сохранял служебные данные. 

Нам пришлось расширить его возможности и сохранять результаты выполнения в служебный “Exchange”-файл. Заодно мы добавили некоторую параметризацию выгрузки, например, передачу api-token-а, отличного от того, под которым запускались автотесты. Плюс на этом этапе мы сделали нашу подключаемую библиотеку/плагин исполняемой в версии “fat”.

Это позволило выполнять автотесты на одной машине в изолированном контуре средствами Gitlab, сохранять артефакты в сборке (в том числе и тот самый Exchange нашего плагина), а на следующем этапе публиковать результаты, выполняя выгрузку из этого файла уже в обычной среде с доступом в TMS. 

Полезным бонусом стало использование этого файлика в качестве инструмента аналитики и дебага в случае каких-либо проблем с выгрузкой на любом из проектов. 

Задачка со звёздочкой: единый тест-план

В начале 2021 года со стороны одного из проектов ДОМ.РФ поступила идея по улучшению Test IT: реализовать выгрузку результатов автотестов в созданный руками тест-план, включающий и ручные тест-кейсы. К концу года данную доработку реализовали коллеги из Test IT, а в начале 2022 года мы доработали наш плагин, и сейчас многие команды уже активно используют этот функционал.

Как это работает? Тест-менеджер составляет тест-план ручного тестирования. Если в его состав входят ручные тест-кейсы, связанные с автотестами, то из интерфейса Test IT можно инициировать создание тест-рана для таких автотестов. Там же в интерфейсе Test IT можно скопировать идентификатор этого рана и использовать его в качестве параметра при запуске наших автотестов. В этом случае после их выполнения плагин не будет создавать новый тест-ран, а выгрузит результаты в уже существующий. И эти результаты будут отображаться в Test IT не только в запусках автотестов, но и в данном конкретном тест-плане. 

Идеальный алгоритм выглядит так: 

  • тест-менеджер определяет состав тест-плана,

  • автотестеры делают запуск через Test IT и контролируют запуск автотестов,

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

  • после завершения ручного тестирования все результаты ручных и автотестов отображаются в одном тест-плане и отчёте.

Вернее, так выглядит почти идеальный алгоритм… 

Нет предела совершенству: планы на развитие

До идеала не хватает совсем немного – чтобы автотесты полноценно запускались из TMS по клику. Это избавит от необходимости привлекать к работам с тест-планом и регрессу автотестеров, позволит не отвлекать их от основной работы и даст возможность запускать автотесты прямо из интерфейса Test IT любому, кто имеет туда доступ.

Отчасти это возможно уже сейчас: в Test IT реализован механизм hook-ов, содержащих тело и параметры для вызова по API инструментов CI. К сожалению, в данный момент отсутствует возможность кастомизации тела и параметров запроса. В случае с нашим фреймворков с использованием Cucumber-а запрос hook-а всегда включает все шаги сценария и получается весьма объемным. А в качестве CI мы используем Gitlab, который имеет ограничения по объему тела запроса. 

Мы уже передали этот запрос на улучшение разработчикам Test IT и надеемся, что в ближайших релизах получим возможность кастомизировать тело hook-ов, передать собственные параметры, и сможем реализовать запуск автотестов по клику из веб-интерфейса Test IT. 

Подводя итоги

Двухлетний опыт работы позволяет нам в ДОМ.РФ оценивать Test IT как удобный и качественный инструмент для управления тестированием с точки зрения как ручного тестировщика, так и тест-менеджера. Выбор в пользу самописного плагина для интеграции автотестов с TMS позволил сделать его таким же удобным и для автотестеров. 

Сейчас наш плагин бесшовно встроен в основные проекты автотестирования, может интегрировать в TMS только те автотесты, которые автоматизаторы посчитают нужными, сохраняя иерархию в проекте, удобную читаемость в автотестовой модели и связанность с ручными тест-кейсами. Test IT для автоматизатора — это удобное средство разбора запусков со всеми необходимыми артефактами и ссылками, хранилищем истории и статистики работы автотестов, а для ручных тестировщиков и тест-менеджеров наш плагин сделал работу с автотестами удобнее и понятнее. 


ссылка на оригинал статьи https://habr.com/ru/company/domrf/blog/720598/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *