request.cls.driver 在具有类范围的 pytest 固定装置中起什么作用?

vid*_*huv 6 python pytest

请查看下面的装置并帮助我了解 request 和 request.cls.driver=driver 到底在做什么?据我了解,它与夹具的范围有关,如果我使用不同的范围会发生什么?

@pytest.fixture(scope="class")
def driver_init(request):
    from selenium import webdriver
    web_driver = webdriver.Chrome("C:/chromedriver.exe")
    request.cls.driver = web_driver
    yield
    web_driver.close()
Run Code Online (Sandbox Code Playgroud)

小智 1

pytest 的官方 API 文档指出,“请求固定装置是一种特殊的固定装置,提供请求测试函数的信息。”。链接 - https://docs.pytest.org/en/stable/reference.html#request

因此,“diver_init”装置中的“request”具有请求测试函数的信息(这将是打开浏览器的方法)。从“request.cls.driver = web_driver”行中可以清楚地看出,我们正在为调用测试函数分配驱动程序值。因此,在打开 URL 之前,我们需要一个作为驱动程序的浏览器,并且使用具有类级别范围的固定装置对其进行分配。

当我们执行脚本时 - 对于该特定实例,driver_init 将 request.cls.driver 值声明为“webdriver.Chrome("C:/chromedriver.exe")”。因此,它使用固定参数 request.cls.driver 将驱动程序设置为 chrome 以进行测试执行。

如果没有此分配,request.cls.driver 就没有值,并且您的脚本将因驱动程序分配失败而失败。

如果固定装置的范围发生变化,例如从类到方法驱动程序值将按顺序分配给下一个方法的 None,并且序列将失败。相反,如果它从类更改为模块,则不会有任何 driver.quit 或 close 方法。因此,您可以在现有会话上运行脚本。