Инфраструктура Selenium-тестов: как создать связную систему Allure-отчётов без Allure-сервера

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Как часто вы формируете Allure-отчёты во время проведения автотестов? Наверняка, чтобы  отслеживать изменения от отчёта к отчёту, вы также используете Allure-server. А что делать, если нет возможности содержать отдельный сервер для отчетов или он не отвечает всем вашим запросам? Я SDET-специалист SimbirSoft Дмитрий, и в этой статье расскажу о плагине, который мы придумали в качестве альтернативы Allure-server. Он обладает необходимыми возможностями для обработки отчётов и позволит сэкономить бизнесу на стоимости использования сервера.

Возможности Allure

Allure Framework – популярный инструмент формирования отчетности по результатам работы автотестов, упрощающий их анализ. Это гибкий и легкий инструмент, который позволяет всем участникам производственного процесса не только получить сведения о ходе выполнения тестов, но и предоставляет максимум полезной информации из повседневного выполнения автоматизированных тестов.

Но web-отчет, который генерирует Allure, содержит подробную информацию только о последнем прогоне тестов.

В этом случае приходится сохранять все отчеты отдельно. С этим отлично справляется Allure-server — он даже связывает новый отчёт со старыми, добавляя ссылки на графики запусков и в историю тестов.

Мы уже писали статью про Allure-server — это отдельный сервер, который позволяет хранить и генерировать Allure-отчёты.

Бывают ситуации, когда держать отдельный сервер для отчётов нет возможности, но есть необходимость хранить полную историю отчётов и иметь возможность связывать их, как это делают Allure-server и jenkins plugin. Такая возможность есть, но она плохо задокументирована.

Анализ существующих решений

Анализируя файлы связанных отчётов Allure-server, мы заметили, что ссылка на предыдущий отчёт сохраняется в файлах .json (в отчётах присутствует множество графиков, в каждом из них есть этот параметр) в свойстве reportUrl, например:

Изучая исходные файлы плагина Allure jenkins, мы выяснили, что можно добавлять ссылку на предыдущий отчёт в executor.json к файлам прогона перед генерацией нового отчёта. Тогда в новом отчёте будет возможность перейти к предыдущему.

Решение

На одном из наших проектов была задача хранить подробную историю отчётов и раздавать её через nginx.

Для выполнения этой задачи мы изучили и перепробовали несколько уже существующих плагинов, но ни один нам не подошёл. В результаты мы приняли решение написать свой плагин для Maven, который связывает отчёты, генерируемые плагином Allure Maven.

Расширенную документацию и исходный код проекта можно найти в нашем GitHub.

Как настроить

  1. Скачайте папку allure-utils-plugin из репозитория.

  2. Добавьте его в зависимости вашего проекта:

<build>
    <plugins>
        <plugin>
            <groupId>com.simbirsoft</groupId>
            <artifactId>allure-utils-plugin</artifactId>
            <version>1.0</version>
        </plugin>
    </plugins>
</build>

3. Измените путь отчета allure-maven-plugin:

<reporting>
     <excludeDefaults>true</excludeDefaults>
     <plugins>
         <plugin>
             <groupId>io.qameta.allure</groupId>
             <artifactId>allure-maven</artifactId>
             <version>2.10.0</version>
             <configuration>
                 <reportDirectory>${project.reporting.outputDirectory}/results/last</reportDirectory>
             </configuration>
         </plugin>
     </plugins>
 </reporting>

4. Установите его перед использованием: 

mvn -f .\allure-utils-plugin clean install

5. Запустите свои тесты:

mvn test

6. Подготовьте историю:

mvn allure-utils:prepare-history

7. Создайте отчет:

mvn site

8. Удалите старые отчеты:

mvn allure-utils:remove-old

Как публиковать отчёты

  1. По результатам тестирования создаётся папка allure-results, в которой хранятся .json файлы, необходимые для создания отчётов.

  2. Запускаем таску (prepare-history) нашего плагина, которая:
    a) перемещает папку с последним отчётом в новую папку со случайным названием (/results/last) -> (/results/aaa13438-8f79-4367-a8d1-e08b9cc7c11d);
    b) изменяет в /results/aaa13438-8f79-4367-a8d1-e08b9cc7c11d/history) файлы, указанные ниже, добавляя к ним информацию, что текущий отчёт теперь доступен по адресу (../aaa13438-8f79-4367-a8d1- e08b9cc7c11d) - history-trend.json - history.json - categories-trend.json - duration-trend.json - retry-trend.json;
    с) копирует (/results/aaa13438-8f79-4367-a8d1-e08b9cc7c11d/history) в allure-results.

  3. Запускаем генерацию нового отчёта Allure Maven плагином в папку /results/last.

  4. Запускаем другую таску (remove-old) нашего плагина, которая удаляет старые отчёты, оставляя только последние 20 (это число можно настраивать).

Таким образом, последний отчёт всегда будет доступен в nginx по адресу: <адрес сервера>/last. Этот плагин очень удобен даже при локальных запусках тестов:

  1. Запускаем тесты.

  2. Запускаем плагином подготовку истории.

  3. Генерируем отчёт.

  4. Раздаём содержимое папки results, где хранятся отчёты, при помощи любого веб-сервера, для этого удобно использовать Allure cli:

allure open .

или Python:

python -m http.server

Повторять эти шаги можно сколько угодно раз, главное не забывать очищать папку allure-results перед запуском прогона тестов.

Итоги

Мы создали удобный инструмент, который позволяет публиковать отчёты Allure, сохраняя историю предыдущих запусков и связывая отчёты между собой. Этот плагин удобно использовать как для локальных запусков тестов, так и для публикации отчётов в CI при помощи nginx.

Спасибо за внимание! Полезные материалы о frontend-разработке мы также публикуем в наших соцсетях – ВКонтакте и Telegram.

Источник: https://habr.com/ru/companies/simbirsoft/articles/733486/


Интересные статьи

Интересные статьи

По мере роста бизнес приходит к пониманию того, что оптимизация работы предприятия невозможна без соответствующей ERP-системы. Однако процесс имплементации нового программного продукта не всегда бывае...
В данной статье речь пойдет о том, как производственной компании или импортеру, минуя розничную сеть или полки магазинов, создать новый высокомаржинальный канал продаж н...
Вновь обращаемся к экспертизе, собранной в нашем «Мире Hi-Fi». Ранее мы посмотрели, где производят аудиотехнику, рассказали о теории и практике DIY-акустики и настройке д...
Безопасность на реальных примерах всегда более интересна. Один раз пришел клиент с запросом на тестирование на проникновение. У него было достаточно много причин для беспокойства, среди прочих...
В этой статье разберёмся, как реализовать поддержку страничной памяти в нашем ядре. Сначала изучим различные методы, чтобы фреймы физической таблицы страниц стали доступны ядру, и обсудим их преи...