Тюнингуем Allure для экономии времени QA-инженера

Привет, Хабр! Меня зовут Шкердин Данила, я QA Automation-инженер в МТС Digital. В этой статье хочу рассказать о личном опыте прикручивания механики уведомлений к Allure в Telegram и не только.

Allure — популярный инструмент для генерации отчетов о тестировании. Но каким бы приятным не был интерфейс Allure, наблюдать его в течении получаса, пока идет launch, никому не нравится. Задач у QA-инженера всегда много, поэтому было бы удобно прикрутить к нашему любимому инструменту механизм уведомлений, чтобы вернуться к нему, когда придет время. Такая мысль посетила меня уже давно, и вот пришло время это сделать.

3404fddcf1b56c5bc51e009c97fd3da6.jpg

Для получения мгновенных уведомлений о статусе тестов, существует проект Allure-notifications. Этот плагин позволяет автоматически отправлять уведомления о запуске тестов в выбранный вами канал Telegram/Slack/Skype/Email. Как я понял из общения с коллегами QA, о этом инструменте мало кто слышал, а те, кто слышал — не пробовали его. Давайте это исправим.

Как это выглядит?

Так выглядит сообщение в ТелеграмВзято с https://github.com/qa-guru/allure-notifications

Что нам нужно?

  • получать краткую выжимку по каждому прогону тестов;

  • не ждать окончания рана;

  • в удобном мессенджере — чтобы можно было переслать команде;

  • с привычной диаграммой — чтобы глянул и всё понятно;

  • со ссылкой для детального ознакомления;

  • чтобы из CI работало.

Как у нас?

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

  • Телеграмм бот (отдельный для каждого проекта);

  • отчеты приходят как регулярные, так и по триггерам в репозитории;

  • если тесты упали — идем в Allure разбираться, если нет — радуемся и отдыхаем идем заниматься другими делами.

Как этим пользоваться?

Для тех кто любит читать инструкции:

https://github.com/qa-guru/allure-notifications

Все происходит в 3 этапа:

1. Выполнение тестов;

2. Генерация отчета (должен содержать summary.json);

3. Непосредственно формирование контента уведомления и его отправка

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

Первый этап — выполнение тестов

(Очевидно) выполнение тестов

pytest --alluredir=allure-results

Мы используем Python3 + pytest. Как у вас на проекте — не имеет значения, так как тут главное вот что — на выходе должны получиться артефакты вроде этих:

Для этого мы используем плагин allure-pytest. В команде выше аргумент --alluredir указывает на папку, куда все эти файлики сложить.

Второй этап — генерация отчета

Следующий шаг — необходимо сгенерировать отчет. Тут вам понадобится Allure Command Line Tool.

allure generate allure-results -o allure-report

Что в переводе означает «возьми артефакты из allure-results и сгенерируй из них отчет в allure-report».

На этом шаге нам важно получить summary.json, так как на его основе будет происходить генерация диаграммы и текста уведомления

Структура отчета в папке allure-report и интересующий нас summary.js

Структура отчета в папке allure-report и интересующий нас summary.json

Так выглядит сам файл:

{
"reportName" : "Allure Report",
"testRuns" : [ много чего ],
"statistic" : {
        	"failed" : 182,
        	"broken" : 70,
        	"skipped" : 118,
        	"passed" : 439,
        	"unknown" : 42,
        	"total" : 851
        	},
 "time»: что-то
}

Третий этап — генерация отчета и отправка уведомления.

wget https://github.com/qa-guru/allure-notifications/releases/download/4.2.1/allure-notifications-4.2.1.jar
java "-DconfigFile=config.json" -jar allure-notifications-4.2.1.jar

Тут все просто — скачали и выполнили .jar, получили уведомление.

Вот как-то так. В результате получим уведомление в Телеграмм как на примере выше.

Хочу! Как настроить?

Все просто — нужен бот, который будет отправлять нам сообщение в TG, и немного поколдовать над конфигом. Поехали:

Первым делом создадим бота с помощью BotFather и получим его токен. Если знаете как это делать — смело пропускайте, нет — разворачивайте спойлер.

Как сделать бота

  1. Написать https://telegram.me/BotFather

  2. Он спросит у вас имя и ник для бота

  3. По окончании пришлет токен вида:

    123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

  4. Готово

Итак, у нас есть бот и мы знаем его токен. Для того, чтобы получить от него отчет с помощью allure-notifications просто вставим токен в конфиг. Вот пример config.json

{
  "base": {
	"project": "Your project",
	"environment": "stage",
	"comment": "some comment",
	"reportLink": "your.alure.host.ru/project/id вашего проекта/launches",
	"language": "en",
	"allureFolder": "allure-report",
	"enableChart": true
  },
  "telegram": {
	"token": "ТУТ_ТОКЕН_БОТА",
	"chat": "ТУТ_ID_ЧАТА",
	"replyTo": ""
  }
}

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

Внутри allure-notifications используется api.telegram.org — API Телеграмма. Согласно API нам нужен chat_id, чтобы отправить туда сообщение от имени бота. Узнать его очень просто — после добавления бота сформируйте ссылку и перейдите по ней:

https://api.telegram.org/botСЮДА_ПОДСТАВЬТЕ ТОКЕН/getUpdates

Обратите внимание, что перед токеном должно быть слово bot. Затем напишите в чат с ботом любое сообщение и обновите страницу. Вы увидите ответ в формате json. Оттуда нам нужно взять только значение поля result > message > chat > id.

Пример:

{
  "ok": true,
  "result": [
	{
  	"update_id": ********,
  	"message": {
    	"message_id": 310,
    	"from": {
      	"id": *******,
      	"is_bot": false,
      	"first_name": "Данила",
      	"last_name": "Шкердин",
      	"username": "dashkerdin",
      	"language_code": "ru"
  	},
  	"chat": {
    	"id": -8*9*63*0*,
    	"title": "ALLURE MONITOR",
    	"type": "group",
        "all_members_are_administrators": true
  	},
  	"date": *************,
      "text": "1"
  	}
	}
  ]
}

Для проверки можно дернуть запрос через cURL:

curl -X POST \
 	-H 'Content-Type: application/json' \
 	-d '{"chat_id": "ТУТ_ВАШ_ЧАТ_АЙДИ", "text": "Тестовое сообщение", "disable_notification": true}' \
 	https://api.telegram.org/botСЮДА_ПОДСТАВЬТЕ ТОКЕН/sendMessage

Пару слов о прокси

В config.json можно добавить конфигурацию прокси. Лично мне это было важно, так как отправка сообщений происходит из корпоративной сети на внешнее API. Для этого нужно, открыть доступ на прокси для api.telegram.org.

Теперь подставим id чата в наш конфиг и можно тестировать:

pytest --alluredir=allure-results
 
allure generate allure-results -o allure-report
 
wget https://github.com/qa-guru/allure-notifications/releases/download/4.2.1/allure-notifications-4.2.1.jar
java "-DconfigFile=config.json" -jar allure-notifications-4.2.1.jar

Ура, все получилось!

Выводы

Итак, я рассказал вам, как настроить уведомления о выполнении автотестов с помощью allure-notifications в привычный Telegram. Аналогично происходит настройка уведомлений на email/slack/skype — посмотреть подробнее можно в оригинальном репозитории.

P.S.

Спасибо за уделенное статье время, надеюсь мой опыт вам пригодится. Если у вас есть вопросы замечания или же вы хотите поделится своими историями о тюнинге Allure — пишите комментарии!

© Habrahabr.ru