12. Телеграм бот. Отправляем уведомления о результатах прохождения тестов - qa-guru/knowledge-base GitHub Wiki

Что понадобится

Как создать бота

Для создания бота надо обратиться к другому боту, найти которого можно в поиске 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 будет отправлять уведомления только в случае, если тесты упали.