12. Телеграм бот. Отправляем уведомления о результатах прохождения тестов - qa-guru/knowledge-base GitHub Wiki
Что понадобится
- Библиотека, позволяющая реализовать отправку уведомленийссылка(https://github.com/qa-guru/allure-notifications);
- Бот в Telegram;
Как создать бота
Для создания бота надо обратиться к другому боту, найти которого можно в поиске Telegram по никнейму @BotFather. Важно быть внимательным, много фейковых ботов которые полностью копируют аватарку и описание бота, но во время создания бота просят сказать ему какие-то персональные данные или прислать уникальный токен. Запомните, что у официального бота есть верификационная галочка. Также никому не сообщайте никому уникальные токен, с ним любой человек может получить доступ к вашему боту.
Так выглядит официальный профиль @BotFather в Telegram
Теперь надо открыть чат с BotFather и написать ему команду /newbot или выбрать из меню. После этого система попросит задать имя бота, которое будет отображаться в чате. Это имя может быть любым. Далее надо будет прислать никнейм бота. В этом случае никнейм обязательно должен заканчиваться словом bot. Вместо пробелов можно использовать нижние подчеркивания. После BotFather пришлет в чат сообщение о том, что бот создан. Вместе с этим придет уникальные токен, который следует сохранить, и ссылка на работу с Bot API.
Через BotFather можно задать аватарку бота, настроить его описание, подключить платежи и изменить имя пользователя.
Как узнать Chat ID
Бот должен присылать сообщения в определенный чат. В Telegram у каждого чата есть уникальный идентификатор, с помощью которого можно настроить оправку сообщений. Для того чтобы узнать Chat ID, надо добавить бота в целевой чат сделать его администратором, перейти по ссылке вида https://api.telegram.org/botТокенВашегоЧата/getUpdates
. Внести изменения в ссылку, заменив ТокенВашегоЧата
на реальный токен вашего бота.
Если всё было указано верно вы увидите JSON-ответ, в котором будет содержаться информация о чате. В случае, если в чате не было сообщений, то ответ будет выглядеть так:
{
"ok": true,
"result": [ ]
}
Написать в чат и обновить страницу. В результате мы увидим само сообщение, всю информацию о сообщении, ID отправителя и ID чата, который нам нужен. В стандартном виде страница будет рендериться без форматирования и нужные данные будет сложно найти. Ситуацию можно исправить, установив расширение JSONView.
Если необходимо, можно отправить сообщений с помощью терминала или Postman. Для этого нам понадобится следующий набор команд:
curl -X POST \
-H 'Content-Type: application/json' \
-d '{"chat_id": "6243249731", "text": "This is a test from curl", "disable_notification": true}' \
https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage
Необходимо:
- Заменить содержимое
chat_id
на актуальный идентификатор чата; - Указать в
text
текст желаемого сообщения; disable_notification
отвечает за отправку сообщения с уведомлением или без;- Заменить
$TELEGRAM_BOT_TOKEN
на актуальный токен.
После заполнения команда можно нажать на Enter
и если все было сделано правильно, то бот отправит сообщение в чат.
Как отправлять уведомления из проекта
Важно: к проекту уже должен быть подключен Allure. Все взаимодействие идет с ним.
Как установить allure можно узнать из этой статьи
Первым делом необходимо по ссылке скачать последнюю версию библиотеки и добавить jar-файл в проект. Далее создадим в проекте отдельную папку notifications
и в ней файл конфигурации telegram.json
. После в созданный файл вставим и заполним следующую конструкцию:
{
"base": {
"project": "some project",
"environment": "some env",
"comment": "some comment",
"reportLink": "",
"language": "en",
"allureFolder": "allure-report",
"enableChart": true
},
"telegram": {
"token": "asdhsdgfjsdfgFgjhg4831)@",
"chat": "-1",
"replyTo": ""
}
}
Важно! Все названия ключей, что указаны в блоке base обязательны, и при не указании одного из них, отчет не будет отправлен.
Все поля интуитивно понятны из названия. Главное указать токен бота в поле token
и идентификатор чата в chat
. Также стоит убедиться, что путь в поле allureFolder
ведет к папке с данными работы Allure.
Если необходимо отправлять уведомления не только в Telegram, но и в другие мессенджеры, то в файле config.json
добавляем соответствующие блоки.
Пример файла конфигурации представлен по этой ссылке в документации проекта Allure Notifications
Далее необходимо сгенерировать отчет Allure в виде summary.json. Для этого в терминале надо выполнить команду:
allure generate allure-results
После выполнения данной команды создаться папка allure-report
с файлом summary.json
.
После заполнения json-файла надо перейти в терминал и выполнить следующую команду:
java \
"-DconfigFile=${PATH_TO_FILE}" \
-jar allure-notifications-${version}.jar
${PATH_TO_FILE}
надо заменить на путь к созданному json-файлу.
${version}
надо заменить на актуальную версию библиотеки.
Пример команды:
java "-DconfigFile=notifications/telegram.json" -jar notifications/allure-notifications-4.6.1.jar
После выполнения команды бот пришлет в чат сообщения с результатами тестов.
Как подключить все к Jenkins
Есть 2 способа для отправки уведомлений из Jenkins:
Первый способ
Важно! В github не загружаем в проект папку notifications.
В настройке сборки Jenkins необходимо выбрать в блоке Build Steps
кликаем на Add build step
и в выпадающем списке кликаем на Create/Update Text File
.
В File Path
указываем путь к json-файлу(по умолчанию это notifications/config.json), в Text File Content
вставляем содержимое файла. Ставим галочки на Create at Workspace
и Overwrite file
.
Перед этим в json-файл надо добавить внутренние переменные Jenkins. Итоговый обновленный файл будет выглядеть так:
{
"base": {
"project": "${JOB_BASE_NAME}",
"environment": "some env",
"comment": "some comment",
"reportLink": "${BUILD_URL}",
"language": "en",
"allureFolder": "allure-report",
"enableChart": true
},
"telegram": {
"token": "asdhsdgfjsdfgFgjhg4831)@",
"chat": "-1",
"replyTo": ""
}
}
Важно! Блок с
notifications
всегда должен быть выше блока сExecute shell
.
Далее переходим к блоку Post-build Actions
, выбираем и кликаем на Add post-build action
и в выпадающем списке кликаем на Post build task
.
В поле Script
указываем команду для скачивания jar-файла с библиотекой если она не имеется в проекте.
cd ..
FILE=allure-notifications-4.6.1.jar
if [ ! -f "$FILE" ]; then
wget https://github.com/qa-guru/allure-notifications/releases/download/4.6.1/allure-notifications-4.6.1.jar
fi
Вместо allure-notifications-4.6.1.jar
надо указать актуальную версию библиотеки.
Далее необходимо добавить Add another task
.
В поле Script
указываем команду для считывания файла и отправки уведомления.
java "-DconfigFile=notifications/telegram.json" -jar notifications/allure-notifications-4.6.1.jar
или
java "-DconfigFile=notifications/config.json" -jar ../allure-notifications-4.6.1.jar
Сохраняем изменения. Теперь после каждого запуска тестов Jenkins будет отправлять уведомления в Telegram.
Второй способ
Важно! В github загружаем в проект папку notifications.
В настройке сборки Jenkins необходимо выбрать в блоке Build Steps
кликаем на Add build step
и в выпадающем списке кликаем на Create/Update Text File
.
В File Path
указываем путь к json-файлу(по умолчанию это notifications/config.json), в Text File Content
вставляем содержимое файла. Ставим галочки на Create at Workspace
и Overwrite file
.
Перед этим в json-файл надо добавить внутренние переменные Jenkins. Итоговый обновленный файл будет выглядеть так:
{
"base": {
"project": "${JOB_NAME}",
"environment": "some env",
"comment": "some comment",
"reportLink": "${BUILD_URL}",
"language": "en",
"allureFolder": "allure-report",
"enableChart": true
},
"telegram": {
"token": "asdhsdgfjsdfgFgjhg4831)@",
"chat": "-1",
"replyTo": ""
}
}
Важно! Блок с
notifications
всегда должен быть выше блока сExecute shell
.
Далее переходим к блоку Post-build Actions
, выбираем и кликаем на Add post-build action
и в выпадающем списке кликаем на Post build task
.
В поле Script
указываем команду для отправки сообщения и сохраняем.
java "-DconfigFile=notifications/telegram.json" -jar notifications/allure-notifications-4.6.1.jar
Вместо allure-notifications-4.6.1.jar
надо указать актуальную версию библиотеки.
Сохраняем изменения. Теперь после каждого запуска тестов Jenkins будет отправлять уведомления в Telegram.
Как отправлять уведомления только если тесты упали
В блоке Add another task
в поле Log text
указываем текст Build step 'Execute shell' marked build as failure
.
После этого сохраняем изменения. Теперь Jenkins будет отправлять уведомления только в случае, если тесты упали.