Я пытаюсь сделать установку и демонтаж модулей с помощью pytest-BDD. Я знаю, что вы можете сделать файл environment.py с модулями before_all и after_all. Как мне это сделать в pytest-bdd

Я заглянул в плагин "classic xunit-style setup", и он не работал, когда я его пробовал. (Я знаю, что это больше относится к py-test, а не к py-test bdd).

3
theQuestionMan 21 Дек 2015 в 07:50

3 ответа

Лучший ответ

Вы можете просто объявить pytest.fixture с autouse=true и любой областью, которую вы хотите. Затем вы можете использовать прибор request, чтобы указать демонтаж. Например.:

@pytest.fixture(autouse=True, scope='module')
def setup(request):

    # Setup code

    def fin():
        # Teardown code

    request.addfinalizer(fin)
2
Turn 21 Дек 2015 в 05:02

«pytest поддерживает выполнение кода финализации конкретного прибора, когда прибор выходит из области видимости. Используя оператор yield вместо return, весь код после оператора yield служит кодом разрыва:»

См. https://docs.pytest.org/en/latest/fixture.html

Например.

    @pytest.fixture(scope="module")
def smtp_connection():
    smtp_connection = smtplib.SMTP("smtp.gmail.com", 587, timeout=5)
    yield smtp_connection  # provide the fixture value
    print("teardown smtp")
    smtp_connection.close()
0
CygnusAlpha 21 Фев 2019 в 22:53

Простым подходом для меня является использование тривиального приспособления.

# This declaration can go in the project's confest.py:
@pytest.fixture
def context():
    class Context(object):
        pass

    return Context()

@given('some given step')
def some_when_step(context):
    context.uut = ...

@when('some when step')
def some_when_step(context):
    context.result = context.uut...

Примечание: confest.py позволяет вам обмениваться данными между кодами, а помещение всего файла в один конец дает мне предупреждение о статическом анализе.

1
jtpereyda 25 Янв 2016 в 18:31