🏠 Домашнее задание: Allure Framework
ℹ️ Это не LMS-ДЗ — для урока 15 в LMS отдельного домашнего задания нет. Данный раздел содержит закрепляющую самопроверку: практическое задание для самостоятельного выполнения, которое поможет проверить усвоение материала урока.
⚡ Задание: добавить Allure к проекту API-тестов
- Взять проект из урока 13 (CompanyApi + EmployeeApi + pytest-тесты)
- Добавить
@allure.epic/feature/story/title/severityк тестам - Добавить
@allure.stepна методы API-класса (с параметрами в строке) - В одном тесте добавить вложение (JSON-ответ или SQL-запрос)
- Запустить
pytest --alluredir=allure-results→allure serve allure-results
Задание: добавить Allure-отчётность к проекту API-тестов
Что нужно сделать
Возьмите проект с API-тестами, созданный в уроке 13 (или напишите новый), и добавьте к нему полноценную Allure-отчётность.
Требования к выполнению
-
Разметка тестов: добавить к каждому тесту декораторы:
@allure.epic— на уровне класса (напр. «API X-Clients»)@allure.severity— на уровне класса@allure.feature+@allure.story+@allure.title— на уровне метода
-
@allure.step на API-методах: декорировать все методы класса
CompanyApi(иEmployeeApiесли есть) декоратором@allure.stepс динамическими параметрами. - Вложения: в хотя бы одном тесте добавить вложение с содержимым ответа API (например, JSON-тело ответа).
- Вложенные шаги: тест на создание сущности (CRUD) разбить на вложенные шаги: ДО → Создать (с подшагами) → Проверить → ПОСЛЕ → Удалить.
Подготовка окружения
Создание и активация виртуального окружения
# PowerShell, Windows
cd путь\к\проекту
# Создать виртуальное окружение
python -m venv venv
# Активировать
.\venv\Scripts\Activate.ps1
# Установить зависимости
pip install pytest allure-pytest requests
Установка Allure CLI
# Windows (Scoop)
scoop install allure
# Проверить установку
allure --version
Структура проекта
api-tests-allure/
├── venv/
├── api/
│ ├── __init__.py
│ └── company_api.py # CompanyApi с @allure.step
├── tests/
│ ├── __init__.py
│ └── test_companies.py # Тесты с разметкой Allure
├── allure-results/ # Создаётся автоматически
├── allure-report/ # Создаётся при generate
├── run.ps1 # Скрипт автозапуска
└── requirements.txt
requirements.txt
# requirements.txt
pytest
allure-pytest
requests
Пошаговое решение
Шаг 1 — Добавить @allure.step на методы API-клиента
# api/company_api.py
import allure
import requests
class CompanyApi:
def __init__(self, url):
self.url = url
@allure.step("api. Получить список компаний")
def get_company_list(self, params_to_add=None):
response = requests.get(self.url + "/company", params=params_to_add)
return response.json()
@allure.step("api. Получить компанию по id '{id}'")
def get_company(self, id):
response = requests.get(self.url + "/company/" + str(id))
return response.json()
@allure.step("api. Создать компанию '{name}'")
def create_company(self, name, description=""):
token = self._get_token()
headers = {"x-client-token": token}
body = {"name": name, "description": description}
response = requests.post(self.url + "/company",
headers=headers, json=body)
return response.json()
@allure.step("api. Удалить компанию '{id}'")
def delete_company(self, id):
token = self._get_token()
headers = {"x-client-token": token}
response = requests.delete(self.url + "/company/" + str(id),
headers=headers)
return response.json()
def _get_token(self):
creds = {"user": "raphael", "password": "cool-but-crude"}
response = requests.post(self.url + "/auth/login", json=creds)
return response.json()["userToken"]
Шаг 2 — Добавить разметку к тестам
# tests/test_companies.py
import allure
import json
from api.company_api import CompanyApi
@allure.epic("API X-Clients")
@allure.severity("blocker")
class TestCompanies:
BASE_URL = "https://x-clients-be.onrender.com"
api = CompanyApi(BASE_URL)
@allure.story("Получение компаний")
@allure.feature("READ")
@allure.title("Получение полного списка компаний")
def test_get_companies(self):
result = self.api.get_company_list()
# Вложение: JSON-ответ
allure.attach(
json.dumps(result, ensure_ascii=False, indent=2),
name="JSON-ответ API",
attachment_type=allure.attachment_type.JSON
)
assert isinstance(result, list)
assert len(result) > 0
@allure.story("Получение компаний")
@allure.feature("READ")
@allure.title("Получение только активных компаний")
def test_get_active_companies(self):
result = self.api.get_company_list(params_to_add={"active": True})
assert all(c.get("isActive") for c in result)
@allure.story("Создание компании")
@allure.feature("CREATE")
@allure.title("Создание новой компании и проверка данных")
def test_create_company(self):
with allure.step("Получить количество компаний ДО"):
before = self.api.get_company_list()
count_before = len(before)
with allure.step("Создать компанию"):
with allure.step("Сгенерировать данные"):
name = "AllureTest Company"
descr = "Created by Allure test"
with allure.step("Вызвать API-метод создания"):
result = self.api.create_company(name, descr)
new_id = result["id"]
with allure.step("Проверить поля созданной компании"):
company = self.api.get_company(new_id)
assert company["name"] == name
assert company["description"] == descr
with allure.step("Получить количество компаний ПОСЛЕ"):
after = self.api.get_company_list()
count_after = len(after)
with allure.step("Проверить, что количество увеличилось на 1"):
assert count_after - count_before == 1
with allure.step("Удалить тестовую компанию"):
self.api.delete_company(new_id)
Шаг 3 — Запустить тесты
# PowerShell
cd путь\к\проекту
.\venv\Scripts\Activate.ps1
pytest tests\ --alluredir=allure-results -v
Шаг 4 — Открыть отчёт
allure serve allure-results
Должен открыться браузер с интерактивным отчётом. Проверьте наличие:
- Иерархии Epic → Feature → Story → Test
- Шагов в разделе «Test body»
- Вложения с JSON-ответом в тесте
test_get_companies - Вложенных шагов в тесте
test_create_company
Проверка в VS Code
Запуск через терминал
# Открыть терминал в VS Code: Ctrl+` (backtick)
.\venv\Scripts\Activate.ps1
pytest tests\ --alluredir=allure-results -v
allure serve allure-results
Настройка launch.json (F5)
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "pytest tests with Allure",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"args": [
"tests/",
"--alluredir=allure-results",
"-v"
],
"console": "integratedTerminal",
"justMyCode": true
}
]
}
Точки останова
Установите точку останова в методе create_company (F9 на нужной строке). При запуске через F5 выполнение остановится — можно проверить значения переменных в панели Variables.
Связь с теорией и примерами
- Теория: шаги allure.step — объяснение принципов работы
- Примеры — полный код CompanyApi с @allure.step
- Справочник — все декораторы и команды CLI