Добавить в корзинуПозвонить
Найти в Дзене
Анастасия Софт

Создание бота для автоматических тестов с использованием pytest и Python

Привет, друзья! Кто из вас не мечтал о боте, который будет запускать тесты, собирать результаты и отправлять их в Telegram, Slack или даже на email? Если вы все-таки не мечтали, то поверьте — это именно то, что вам нужно для автоматизации вашего рабочего процесса. А если же вы, как и я, обожаете автотесты и Python, то вперед — создадим такого бота! Сегодня мы научимся создавать бота, который будет запускать тесты с помощью библиотеки pytest, собирать их результаты, а потом отправлять их в Telegram, Slack или на email. Все, что нам нужно — это немного кода, пара библиотек и желания автоматизировать свою жизнь! Итак, начнем! Для начала нам нужно установить несколько библиотек, которые помогут нам: Запустите эту команду, чтобы установить все нужные зависимости: pip install pytest requests smtplib slack-sdk Здесь: Теперь, когда у нас есть все нужные библиотеки, давайте перейдем к созданию нашего бота! Для простоты создадим структуру проекта, которая будет выглядеть так: project/
├── test
Оглавление
Создание бота для автоматических тестов с использованием pytest и Python
Создание бота для автоматических тестов с использованием pytest и Python

Привет, друзья! Кто из вас не мечтал о боте, который будет запускать тесты, собирать результаты и отправлять их в Telegram, Slack или даже на email? Если вы все-таки не мечтали, то поверьте — это именно то, что вам нужно для автоматизации вашего рабочего процесса. А если же вы, как и я, обожаете автотесты и Python, то вперед — создадим такого бота!

Сегодня мы научимся создавать бота, который будет запускать тесты с помощью библиотеки pytest, собирать их результаты, а потом отправлять их в Telegram, Slack или на email. Все, что нам нужно — это немного кода, пара библиотек и желания автоматизировать свою жизнь!

Итак, начнем!

Шаг 1: Установка необходимых библиотек

Для начала нам нужно установить несколько библиотек, которые помогут нам:

  1. Запускать тесты с помощью pytest.
  2. Отправлять уведомления в 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()

Разбор кода

  1. run_tests() — запускает тесты с помощью pytest и возвращает результат (успех или неудача).
  2. send_telegram_message() — отправляет результат в Telegram.
  3. send_slack_message() — отправляет результат в Slack.
  4. send_email() — отправляет результат на email.

Шаг 4: Запуск бота

Теперь можно просто запустить bot.py:

python bot.py

Этот бот автоматически выполнит все тесты, соберет результаты и отправит их в Telegram, Slack и на email!

Заключение

Вот и все! Мы создали бота, который запускает автоматические тесты, собирает результаты и отправляет их в Telegram, Slack или на email. Это отличный способ отслеживать результаты тестирования в реальном времени и быстро реагировать на возможные проблемы.

Теперь вы можете не переживать о том, чтобы вручную проверять результаты тестов — ваш бот сделает это за вас. А вы можете заниматься чем-то более важным, например, пить кофе. 😄☕