Как я могу установить детали сеанса в conftest.py для выхода вместе с фиксатором в pytest? - PullRequest
0 голосов
/ 13 января 2020

Моя цель - создать предварительный и последующий тест в файле conftest.py , который будет запускаться после каждого теста в моем наборе тестов. то есть я пытался запустить методы (login_page () и login ()) до всех тестов и методы (logout ()) после всех тестов.

Я попытался использовать приведенный ниже фрагмент кода

@pytest.fixture(scope="session", autouse=True)
def pretest():
    login_page()
    login()
    yield driver
    logout()

Я заметил, что, хотя мои предварительные тесты (login_page () и login ()) работают отлично, перед всеми тестовыми примерами, после тестов (выход из системы) ()) не работают должным образом и после выполнения всех выбранных мной тестов были выполнены только .

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

@pytest.fixture(scope="session", autouse=True)
def pretest():
    login_page()
    login()
@pytest.yield_fixture(scope="session", autouse=True)
def posttest():
    logout()

Приведенный выше метод просто выдавал некоторые ошибки и не запускал тест как таковой.

Я также попробовал приведенный ниже фрагмент кода в conftest.py файл

@pytest.yield_fixture(scope="session", autouse=True)
def pretest():
    login_page()
    login()
    yield driver
    logout()

1 Ответ

1 голос
/ 14 января 2020

Я думаю, что вы действительно близки, и ваша проблема связана с использованием области действия "session", которая является более высокой возможной областью (см. Больше в Область действия приспособления Pytest ).

Использование "session" означает, что ваше устройство выполняется один раз для всех тестовых прогонов. Если вы используете yield в этом приборе, то, что предшествует yield, будет выполнено до всех тестов (не перед каждым тестом!), А что будет после, будет выполнено после того, как все тесты будут запущены.

Переключение на "function" вместо этого заставит прибор работать до / после каждого теста вместо этого, что вам и нужно:

@pytest.fixture(scope="function", autouse=True)
def login_context():  # Renamed for clarity
    login_page()
    login()
    yield driver  # Not sure what this is?
    logout()

Обратите внимание на переименование здесь: pretest вводит в заблуждение, потому что часть Крепеж будет фактически выполнен после теста.

...