Python 如何在conftest.py中设置会话详细信息以获得收益,以及在pytest中设置fixture?
我的目标是在conftest.py文件中创建一个预测试和后测试,它将在测试套件中的每个测试用例之后运行。i、 我试图在所有测试之前运行方法(login_page()和login()),在所有测试之后运行方法(logout()) 我试过使用下面的代码片段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() 我
@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()