⚖️ Старый vs Новый подход

← К оглавлению урока

⚡ Три главных улучшения

  • Тест без шагов → тест с with allure.step() — видно где упало
  • Методы класса без разметки → @allure.step на методах — не надо дублировать шаги в тестах
  • Ручной запуск тестов → скрипт run.sh/run.ps1 — один шаг для всего

1. Тесты без Allure vs с Allure-шагами

Из лекции: без шагов сложно понять, на каком этапе упал тест.

Из лекции (старое) — без шагов:
# test_companies.py — без Allure-шагов
def test_add_new(self):
    body = self.api.get_company_list()
    len_before = len(body)
    name = "Autotest"
    result = self.api.create_company(name, "Descr")
    new_id = result["id"]
    body = self.api.get_company_list()
    for company in body:
        if company["id"] == new_id:
            assert company["name"] == name
    body = self.api.get_company_list()
    len_after = len(body)
    assert len_after - len_before == 1
    self.db.delete(new_id)
Современный подход — с Allure-шагами:
# test_companies.py — с Allure-шагами
@allure.title("Создание организации")
def test_add_new(self):
    with allure.step("Получить количество организаций ДО"):
        len_before = len(self.api.get_company_list())

    with allure.step("Создать организацию"):
        with allure.step("Сгенерировать название"):
            name, descr = "Autotest", "Descr"
        with allure.step("Вызвать API-метод"):
            result = self.api.create_company(name, descr)
            new_id = result["id"]

    with allure.step("Проверить поля новой организации"):
        companies = self.api.get_company_list()
        match = next((c for c in companies if c["id"] == new_id), None)
        assert match and match["name"] == name

    with allure.step("Проверить счётчик (ДО + 1 = ПОСЛЕ)"):
        len_after = len(self.api.get_company_list())
        assert len_after - len_before == 1

    with allure.step("Удалить из БД"):
        self.db.delete(new_id)

2. Методы класса без @allure.step vs с @allure.step

Из лекции: без декоратора на методе — приходится оборачивать каждый вызов в with allure.step() в каждом тесте. С декоратором — вызов метода автоматически становится шагом в отчёте.

Старый подход — шаги только в тестах:
# Каждый тест вынужден дублировать шаги
def test_get_companies(self):
    with allure.step("Получить список через API"):
        api_result = self.api.get_company_list()   # метод без @allure.step
    with allure.step("Получить список из БД"):
        db_result = self.db.get_companies()         # метод без @allure.step
    with allure.step("Сравнить"):
        assert len(api_result) == len(db_result)

def test_add_new(self):
    with allure.step("Получить список через API"):
        result = self.api.get_company_list()        # снова дублируем шаг
    ...
Современный подход — @allure.step на методах класса:
# company_api.py
class CompanyApi:
    @allure.step("api. Получить список компаний")
    def get_company_list(self):
        ...

    @allure.step("api. Создать компанию '{name}'")
    def create_company(self, name, description=""):
        ...

# test_companies.py — тесты без дублирования шагов
def test_get_companies(self):
    api_result = self.api.get_company_list()   # автоматически шаг в отчёте
    db_result = self.db.get_companies()         # автоматически шаг в отчёте
    assert len(api_result) == len(db_result)

3. Ручной запуск vs скрипт автоматизации

Из лекции: ручной запуск требует помнить три команды и правильный порядок.

Ручной (из лекции — старое):
# Нужно помнить порядок и вводить 3 команды вручную
pytest --alluredir=allure-results
allure generate allure-results -o allure-report --clean
allure open allure-report
Современный — один скрипт run.ps1 (Windows):
# run.ps1 — запустить: .\run.ps1
$results = "allure-results"
$report  = "allure-report"

Remove-Item -Recurse -Force $results -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force $report  -ErrorAction SilentlyContinue

pytest --alluredir=$results
allure generate $results -o $report --clean
allure open $report

4. allure generate без --clean vs с --clean

Проблема без --clean:
# Старые результаты смешиваются с новыми
allure generate allure-results -o allure-report
# В отчёте будут и старые, и новые тесты — неверная статистика
Правильно — с --clean:
# --clean очищает папку перед генерацией
allure generate allure-results -o allure-report --clean
# Отчёт содержит только текущий прогон

5. @allure.step без параметров vs с параметрами

Из лекции: без параметров в названии шага непонятно, с какими данными работал метод.

Без параметров — непонятно:
# Шаг в отчёте: "БД. Удалить организацию"
@allure.step("БД. Удалить организацию")
def delete(self, id):
    ...
С параметрами — id видно в отчёте:
# Шаг в отчёте: "БД. Удалить организацию по 42"
@allure.step("БД. Удалить организацию по {id}")
def delete(self, id):
    ...
# {id} подставится автоматически из аргумента метода