Python 如何在conftest.py中设置会话详细信息以获得收益,以及在pytest中设置fixture?

Python 如何在conftest.py中设置会话详细信息以获得收益,以及在pytest中设置fixture?,python,testing,pytest,yield,fixtures,Python,Testing,Pytest,Yield,Fixtures,我的目标是在conftest.py文件中创建一个预测试和后测试,它将在测试套件中的每个测试用例之后运行。i、 我试图在所有测试之前运行方法(login_page()和login()),在所有测试之后运行方法(logout()) 我试过使用下面的代码片段 @pytest.fixture(scope="session", autouse=True) def pretest(): login_page() login() yield driver logout() 我

我的目标是在conftest.py文件中创建一个预测试和后测试,它将在测试套件中的每个测试用例之后运行。i、 我试图在所有测试之前运行方法(login_page()和login()),在所有测试之后运行方法(logout())

我试过使用下面的代码片段

@pytest.fixture(scope="session", autouse=True)
def pretest():
    login_page()
    login()
    yield driver
    logout()
我已经注意到,虽然我的预测试(login_page()&login())运行得很好,但在所有测试用例之前,后测试(logout())并没有按预期工作,并且仅在我选择的所有测试用例执行之后才运行

为了尝试另一种方法,我还尝试在conftest.py中使用下面的代码片段

上述方法只是抛出了一些错误,并没有启动测试

我还在conftest.py文件中尝试了下面的代码片段


我认为您真的很接近,您的问题来自于使用
“session”
范围,这是可能的更高范围(请参阅中的更多内容)

使用
“session”
意味着您的夹具在所有测试运行中执行一次。如果您在该夹具中执行
yield
,则
yield
之前的内容将在所有测试之前执行(而不是在每个测试之前!),之后的内容将在所有测试运行之后运行

将其切换为
“函数”
将使夹具在每次测试之前/之后运行,这正是您想要的:

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

请注意此处的重命名:
预测试
是错误的,因为部分夹具实际上将在测试后执行。

我认为您真的很接近,您的问题来自于使用
“会话”
范围,这是更高的可能范围(请参阅中的更多内容)

使用
“session”
意味着您的夹具在所有测试运行中执行一次。如果您在该夹具中执行
yield
,则
yield
之前的内容将在所有测试之前执行(而不是在每个测试之前!),之后的内容将在所有测试运行之后运行

将其切换为
“函数”
将使夹具在每次测试之前/之后运行,这正是您想要的:

@pytest.fixture(scope="function", autouse=True)
def login_context():  # Renamed for clarity
    login_page()
    login()
    yield driver  # Not sure what this is?
    logout()
注意这里的重命名:
pretest
是错误的,因为夹具的一部分实际上将在测试后执行

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