Привет, друзья! Кто из вас не мечтал о боте, который будет запускать тесты, собирать результаты и отправлять их в Telegram, Slack или даже на email? Если вы все-таки не мечтали, то поверьте — это именно то, что вам нужно для автоматизации вашего рабочего процесса. А если же вы, как и я, обожаете автотесты и Python, то вперед — создадим такого бота!
Сегодня мы научимся создавать бота, который будет запускать тесты с помощью библиотеки pytest, собирать их результаты, а потом отправлять их в Telegram, Slack или на email. Все, что нам нужно — это немного кода, пара библиотек и желания автоматизировать свою жизнь!
Итак, начнем!
Шаг 1: Установка необходимых библиотек
Для начала нам нужно установить несколько библиотек, которые помогут нам:
- Запускать тесты с помощью pytest.
- Отправлять уведомления в Telegram, Slack или на email.
Запустите эту команду, чтобы установить все нужные зависимости:
pip install pytest requests smtplib slack-sdk
Здесь:
- pytest — для запуска автотестов.
- requests — для отправки уведомлений в Telegram и Slack.
- smtplib — для отправки уведомлений на email.
- slack-sdk — для интеграции с Slack.
Теперь, когда у нас есть все нужные библиотеки, давайте перейдем к созданию нашего бота!
Шаг 2: Создание структуры проекта
Для простоты создадим структуру проекта, которая будет выглядеть так:
project/
│
├── tests/
│ ├── test_example.py
├── bot.py
└── config.py
- В tests/test_example.py будут храниться наши тесты.
- bot.py — это главный файл, где мы будем реализовывать бота.
- config.py — в нем будут храниться настройки для Telegram, Slack и email.
Пример простого теста
В файле tests/test_example.py создадим пару простых тестов с использованием pytest.
# tests/test_example.py
def test_addition():
assert 2 + 2 == 4
def test_subtraction():
assert 5 - 3 == 2
Эти тесты просто проверяют операции сложения и вычитания. В реальных проектах тесты могут быть гораздо сложнее, но для начала этих достаточно.
Шаг 3: Написание бота
Теперь переходим к основной части — написанию бота. Мы создадим бота, который будет запускать тесты, собирать результаты и отправлять их в выбранный канал (Telegram, Slack или на email).
3.1. Файл config.py
В файле config.py храните все конфиденциальные данные, такие как токены для Telegram и Slack, а также настройки для email.
# config.py
# Настройки Telegram
TELEGRAM_TOKEN = 'your_telegram_bot_token'
TELEGRAM_CHAT_ID = 'your_chat_id'
# Настройки Slack
SLACK_TOKEN = 'your_slack_token'
SLACK_CHANNEL = '#your-channel'
# Настройки Email
EMAIL_USER = 'your_email@example.com'
EMAIL_PASSWORD = 'your_email_password'
TO_EMAIL = 'recipient@example.com'
3.2. Функция для отправки уведомлений в Telegram
Теперь напишем функцию для отправки уведомлений в Telegram. Мы будем использовать библиотеку requests для отправки сообщений через API Telegram.
import requests
from config import TELEGRAM_TOKEN, TELEGRAM_CHAT_ID
def send_telegram_message(message):
url = f'https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage'
payload = {
'chat_id': TELEGRAM_CHAT_ID,
'text': message
}
response = requests.post(url, data=payload)
if response.status_code == 200:
print("Сообщение отправлено в Telegram!")
else:
print("Ошибка при отправке сообщения в Telegram!")
Здесь мы передаем токен бота и ID чата, в который будет отправляться сообщение. Через requests мы делаем POST-запрос к API Telegram и отправляем тестовое сообщение.
3.3. Функция для отправки уведомлений в Slack
Для Slack используется аналогичная функция. Для этого мы будем использовать библиотеку slack-sdk.
from slack_sdk import WebClient
from config import SLACK_TOKEN, SLACK_CHANNEL
def send_slack_message(message):
client = WebClient(token=SLACK_TOKEN)
response = client.chat_postMessage(
channel=SLACK_CHANNEL,
text=message
)
if response['ok']:
print("Сообщение отправлено в Slack!")
else:
print("Ошибка при отправке сообщения в Slack!")
Здесь мы используем WebClient из slack-sdk для отправки сообщений в выбранный канал Slack.
3.4. Функция для отправки уведомлений на email
Чтобы отправить результат на email, используем smtplib. Это стандартная библиотека Python, которая позволяет работать с email-рассылками.
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from config import EMAIL_USER, EMAIL_PASSWORD, TO_EMAIL
def send_email(subject, body):
msg = MIMEMultipart()
msg['From'] = EMAIL_USER
msg['To'] = TO_EMAIL
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(EMAIL_USER, EMAIL_PASSWORD)
server.sendmail(EMAIL_USER, TO_EMAIL, msg.as_string())
server.quit()
print("Письмо отправлено на email!")
except Exception as e:
print(f"Ошибка при отправке email: {e}")
В этой функции мы создаем MIME-сообщение и отправляем его через SMTP-сервер Gmail.
3.5. Функция для запуска тестов и сбора результатов
Теперь добавим функцию, которая будет запускать тесты и собирать результаты.
import pytest
def run_tests():
result = pytest.main(["tests"])
if result == 0:
return "Тесты прошли успешно!"
else:
return "Тесты не прошли. Проверьте лог."
Здесь мы используем pytest.main для запуска тестов. Возвращаем сообщение о том, прошли ли тесты или нет.
3.6. Главная функция бота
Теперь все соберем в одну функцию, которая будет запускать тесты и отправлять результаты.
def main():
result_message = run_tests()
# Отправляем результат в Telegram
send_telegram_message(result_message)
# Отправляем результат в Slack
send_slack_message(result_message)
# Отправляем результат на email
send_email("Результат тестирования", result_message)
if __name__ == "__main__":
main()
Разбор кода
- run_tests() — запускает тесты с помощью pytest и возвращает результат (успех или неудача).
- send_telegram_message() — отправляет результат в Telegram.
- send_slack_message() — отправляет результат в Slack.
- send_email() — отправляет результат на email.
Шаг 4: Запуск бота
Теперь можно просто запустить bot.py:
python bot.py
Этот бот автоматически выполнит все тесты, соберет результаты и отправит их в Telegram, Slack и на email!
Заключение
Вот и все! Мы создали бота, который запускает автоматические тесты, собирает результаты и отправляет их в Telegram, Slack или на email. Это отличный способ отслеживать результаты тестирования в реальном времени и быстро реагировать на возможные проблемы.
Теперь вы можете не переживать о том, чтобы вручную проверять результаты тестов — ваш бот сделает это за вас. А вы можете заниматься чем-то более важным, например, пить кофе. 😄☕