如何在pytest会话结束时清理资源?

2024-04-26 04:41:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一套端到端的测试。我实例化了一个webdriver.ChromeDriver实例,作为fixture传递给套件中的每个测试。你知道吗

'''python3
@pytest.fixture(scope="session")
def driver(request):
    return d(request)
'''

在最后一次测试运行之后,我想用driver.quit()关闭webdriver实例。你知道吗

我可以用固定装置来完成

@pytest.hookimpl(trylast=True)
def close_after_test_suite(driver, requests):
    if requests:
        driver.quit()

但是,只有在套件中测试没有失败时才会运行。如果每个测试都通过,浏览器将关闭。如果单个测试失败,那么浏览器将保持打开状态。你知道吗

无论测试是否失败,如何在测试套件结束时使用pytest关闭浏览器?你知道吗


Tags: 实例套件pytestrequestsessiondefdriver浏览器
1条回答
网友
1楼 · 发布于 2024-04-26 04:41:18

如果要在拆卸时运行某些代码,请使用yield而不是return,例如:

@pytest.fixture(scope="session")
def driver(request):
    driver = d(request)
    yield driver
    driver.quit()

但是,selenium.webdriver.WebDriver类实现了上下文管理器魔术方法,因此您还可以使用with语句:

@pytest.fixture(scope="session")
def driver(request):
    with d(request) as driver:
        yield driver

另一个(虽然很旧,但仍然有效)选项是使用^{}选项:

@pytest.fixture(scope="session")
def driver(request):
    driver = d(request)

    def f():
        driver.quit()

    request.addfinalizer(f)
    return driver

相关问题 更多 >