Код-ревью Middle Пирамида и стратегия обновлено
Ревью: тесты связаны цепочкой
Вопрос
Найдите проблемы в наборе API-тестов заказа.
import requests
BASE = "https://stage.shop.local/api"
order_id = None
def test_create_order():
global order_id
r = requests.post(f"{BASE}/orders", json={"user_id": 42, "sku": "A1"})
order_id = r.json()["id"]
def test_pay_order():
r = requests.post(f"{BASE}/orders/{order_id}/pay")
assert r.status_code == 200
def test_cancel_paid_order():
r = requests.post(f"{BASE}/orders/{order_id}/cancel")
assert r.status_code == 200
Коротко
Главная беда: цепочка тестов через глобальную переменную. Правильно: фикстура, которая создаёт заказ через API для каждого теста (или билдер), и в тесте отмены своя оплата внутри подготовки.
Что должен найти ревьюер
- Ошибкастрока 4Глобальное состояние между тестами: тесты зависят от порядка, не запускаются по одному и параллельно
- Ошибкастрока 8Жёстко зашитый user_id=42 на общем стенде: пользователя могут удалить или изменить
- Ошибкастрока 9Нет проверки статуса и тела ответа при создании: тест «создания» ничего не проверяет
- Ошибкастрока 12Если создание упало, оплата падает с непонятной ошибкой (order_id = None)
- Стильстрока 3Адрес стенда захардкожен, лучше брать из конфигурации или переменной окружения
- Ошибкастрока 17Проверяется только код 200, а не то, что заказ реально отменён (статус в теле или повторный GET)
Разбор
Главная беда: цепочка тестов через глобальную переменную. Правильно: фикстура, которая создаёт заказ через API для каждого теста (или билдер), и в тесте отмены своя оплата внутри подготовки. Проверки должны касаться результата, а не только кода ответа. Адрес стенда и данные пользователя берутся из конфигурации и создаются тестом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Форма тестового набора по числу тестов
Следующий вопрос
Когда автоматизация не окупается