pytest: параметризовать классовые тесты с приборами (pytest- django) - PullRequest
2 голосов
/ 31 января 2020

Я пытаюсь параметризовать свои классовые тесты следующим образом:

@pytest.mark.parametrize('current_user', ["test_profile_premium", "test_profile_free"], indirect=True)
class TestFeedItemsType:

    @pytest.fixture(autouse=True)
    def setup(self, current_user, logged_in_client, dummy_object):
        self.client = logged_in_client
        self.test_profile = current_user
        self.object = dummy_object

Однако я получаю сообщение об ошибке:

Светильник 'current_user' не найден

test_profile_premium и test_profile_free оба являются действующими приборами в conftest.py. Мне нужно, чтобы все функции (тесты) в этом наборе классов основывались на test_profile_premium и test_profile_free.

1 Ответ

3 голосов
/ 02 февраля 2020

Вы не можете передавать приборы в качестве аргументов параметризации, см. открытый выпуск # 349 для деталей. В качестве обходного пути в вашем примере вы можете ввести прибор current_user, который выполняет выбор прибора на основе имени прибора:

import pytest


@pytest.fixture
def current_user(request):
    return request.getfixturevalue(request.param)


@pytest.fixture
def test_profile_premium():
    return "premiumfizz"


@pytest.fixture
def test_profile_free():
    return "freefizz"


@pytest.mark.parametrize('current_user', ["test_profile_premium", "test_profile_free"], indirect=True)
class TestFeedItemsType:

    @pytest.fixture(autouse=True)
    def setup(self, current_user):
        self.test_profile = current_user

    def test_spam(self):
        assert self.test_profile in ("premiumfizz", "freefizz")

    def test_eggs(self):
        assert self.test_profile in ("premiumfizz", "freefizz")

Выполнение этого примера даст четыре теста:

test_spam.py::TestFeedItemsType::test_spam[test_profile_premium] PASSED
test_spam.py::TestFeedItemsType::test_spam[test_profile_free] PASSED
test_spam.py::TestFeedItemsType::test_eggs[test_profile_premium] PASSED
test_spam.py::TestFeedItemsType::test_eggs[test_profile_free] PASSED
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...