Как получить список маркеров для сессии py.test? - PullRequest
0 голосов
/ 17 января 2020

Я бегу py.test 4.3.1 с python 3.7.6 на Ма c (Мохаве), и я хочу получить список маркеров для «сеанса», один раз в начале цикла ,

В conftest.py Я попытался использовать следующую функцию:

@pytest.fixture(scope="session", autouse=True)
def collab_setup(request):
    print([marker.name for marker in request.function.pytestmark])

, что, однако, приводит к ошибке

E       AttributeError: function not available in session-scoped context

при вызове фиктивного теста как

 py.test -s -m "mark1 and mark2" tests/tests_dummy.py

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

Этого можно достичь?

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Если collab_setup является частью области видимости класса, т.е.

class TestExampleTest:

    @pytest.fixture(scope="session", autouse=True)
    def collab_setup(self, request):
        pass

Вы можете использовать pytestmark в self для получения маркеров

def collab_setup(self, request):
    marks = [mark.name for mark in self.pytestmark]
0 голосов
/ 17 января 2020

Приспособление request является осветительным прибором 'function', который содержит информацию только об уровне текущего теста, который должен быть выполнен. Это не то, что мы хотим.

Нам нужен прибор pytestconfig . Это фиксированное значение 'session', которое содержит аргументы, используемые при вызове py.test. И здесь вы можете использовать метод с именем getoption для получения маркеров:

@pytest.fixture(scope="session", autouse=True)
def collab_setup(pytestconfig):
    print(pytestconfig.getoption("-m"))
...