Код-ревью Middle pytest и фикстуры обновлено
Ревью: фикстуры pytest
Вопрос
Найдите проблемы в conftest и тестах.
import pytest, requests
@pytest.fixture(scope="session")
def user():
r = requests.post(URL + "/users", json={"name": "test"})
return r.json()
@pytest.fixture
def order(user):
o = requests.post(URL + "/orders", json={"user": user["id"]}).json()
return o
def test_rename_user(user):
requests.patch(URL + f"/users/{user['id']}", json={"name": "new"})
user["name"] = "new"
def test_order_owner(order, user):
assert order["user"] == user["id"]
assert user["name"] == "test"
Коротко
Исправление: пользователь function-скоупа (или фабрика) с yield и удалением, проверка r.raiseforstatus() или явный assert статуса в фикстуре, в тесте переименования проверка через GET, никакой правки общего словаря.
Что должен найти ревьюер
- Ошибкастрока 3Изменяемый пользователь на всю сессию: тесты меняют его и влияют друг на друга
- Ошибкастрока 6return вместо yield: созданный пользователь никогда не удаляется
- Ошибкастрока 5Нет проверки статуса ответа при создании: при ошибке тест упадёт позже с непонятным KeyError
- Стильстрока 11Заказ не удаляется после теста
- Ошибкастрока 13В тесте нет ни одной проверки
- Ошибкастрока 19Результат зависит от порядка: после test_rename_user имя уже new
Разбор
Исправление: пользователь function-скоупа (или фабрика) с yield и удалением, проверка r.raise_for_status() или явный assert статуса в фикстуре, в тесте переименования проверка через GET, никакой правки общего словаря.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.