Как в pytest лучше всего проверять uuid?
Подскажите, пожалуйста, как лучше всего передавать значения переменных в pytest?
В коде, представленном ниже, мне потребовалось загнать значения uuid в переменные MENU_ID и SUBMENU_ID для дальнейшего использования.
Для этого я использовал global, но это считается плохой практикой.
Какие лучшие практики для этого существуют в pytest?
# conftest.py
import pytest
from fastapi.testclient import TestClient
from src.main import app
from src.session import Base, engine
@pytest.fixture(scope="module", autouse=True)
def test_db():
Base.metadata.create_all(engine)
yield
Base.metadata.drop_all(engine)
@pytest.fixture(scope="module")
def client():
yield TestClient(app)
#test.py
import uuid
import pytest
class TestSubmenus:
@pytest.fixture(scope='class', autouse=True)
def make_menu(self, client):
response = client.post(
"/api/v1/menus",
json={"title": "My menu 1",
"description": "My menu description 1"}
)
global MENU_ID
MENU_ID = response.json()["id"]
def test_create_submenu(self, client):
response = client.post(
f"/api/v1/menus/{MENU_ID}/submenus",
json={
"title": "My submenu 1",
"description": "My submenu description 1"
}
)
global SUBMENU_ID
SUBMENU_ID = response.json()["id"]
assert response.status_code == 201
assert response.json() == {
"id": SUBMENU_ID,
"title": "My submenu 1",
"description": "My submenu description 1",
"dishes_count": 0
}
Ответы (1 шт):
Автор решения: Dmitriy Begishev
→ Ссылка
В решении проблемы очень помог @insolor
Решением было вынести создание меню и подменю в фикстуры и возвращать значения id через yield.
# conftest.py
import pytest
from fastapi.testclient import TestClient
from src.main import app
from src.session import Base, engine
@pytest.fixture(scope="module", autouse=True)
def test_db():
Base.metadata.create_all(engine)
yield
Base.metadata.drop_all(engine)
@pytest.fixture(scope="module")
def client():
yield TestClient(app)
@pytest.fixture(scope='class')
def make_menu(client):
response = client.post(
"/api/v1/menus",
json={"title": "My menu 1",
"description": "My menu description 1"}
)
menu_id = response.json()["id"]
yield menu_id
@pytest.fixture(scope='class')
def make_submenu(client, make_menu):
menu_id = make_menu
response = client.post(
f"/api/v1/menus/{menu_id}/submenus",
json={"title": "My submenu 1",
"description": "My submenu description 1"}
)
submenu_id = response.json()["id"]
yield submenu_id
# test.py
class TestSubmenus:
def test_create_submenu(self, client,
make_menu, make_submenu):
menu_id = make_menu
submeu_id = make_submenu
response = client.post(
f"/api/v1/menus/{menu_id}/submenus",
json={
"title": "My submenu 1",
"description": "My submenu description 1"
}
)
assert response.status_code == 201
assert response.json() == {
"id": submeu_id,
"title": "My submenu 1",
"description": "My submenu description 1",
"dishes_count": 0
}