Вызов пользовательской функции из прибора Pytest - PullRequest
1 голос
/ 30 января 2020

Я хотел бы написать прибор Pytest в conftest.py, который внутри себя вызывает функцию, которая по умолчанию ничего не делает, но может быть переопределена в тестовых модулях.

#conftest.py

def within_foo():
    pass

@pytest.fixture
def foo():
    if some_condition():
        within_foo()
    something_else()


# test_foo.py

def within_foo():
    print('this should be printed when running test_foo')

def test_foo(foo):
    pass

Есть ли чистый способ реализовать это?

1 Ответ

2 голосов
/ 30 января 2020

Вы можете сделать это sh с наследованием. Создайте базовый класс для всех тестов, после чего вы сможете решить, какие тесты вы хотите переопределить within_foo()

class BaseTest:

    @pytest.fixture
    def foo(self):
        self.within_foo()

    def within_foo(self):
        pass

@pytest.mark.testing
class TestSomething(BaseTest):

    def within_foo(self):
        print('this should be printed when running test_foo')

    def test_foo(self, foo):
        pass

@pytest.mark.testing
class TestSomethingElse(BaseTest):

    def test_foo_again(self, foo):
        print('test_foo_again')

Outout

========================== 2 passed in 0.08 seconds ===========================
this should be printed when running test_foo
.test_foo

.test_foo_again
...