我有一个用于硒测试的pytest环境。我在中使用参数化设备conftest.py这使我可以测试所有不同的浏览器,而不必重写测试。我想把一个命令行参数传递给我的脚本,这样我就可以让它只运行一个特定的浏览器,而不是所有的浏览器。为此,我需要修改传递到fixture中的变量。到目前为止,我还不知道该怎么做。下面的示例不起作用,可能是因为pytest解析conftest.py与我的启动脚本描述的变量分开。在
#conftest.py
browsers = { "ff" : webdriver.Firefox, "ie" : webdriver.Ie }
@pytest.yield_fixture(params=browsers.keys())
def browser(request):
driver = browsers[request.param]()
yield driver
driver.quit()
#test_simple.py
def test_simple(browser):
browser.get("http://stackoverflow.com")
#main.py
browsers = {}
if __name__ == "__main__":
if len(sys.argv) > 1:
for arg in sys.argv[1:]:
if arg == "-ff":
browsers = { "ff" : webdriver.Firefox }
elif arg == "-ie":
browsers = { "ie" : webdriver.Ie }
elif arg == "-all":
browsers = { "ff" : webdriver.Firefox, "ie" : webdriver.Ie }
pytest.main()
如何将值传递给conftest.py?
以上线路将有选择地运行匹配测试
请参见:Pass different values to a test function, depending on command line options。在
实际上,无法使用命令行选项更改参数化,因为参数化定义发生在导入过程中,但如果用户在命令行中指定了其他浏览器,则可以轻松跳过其他浏览器的测试:
这样,当用户运行
^{pr2}$pytest
而不向browser
传递任何值时,所有测试都会照常运行:但是,如果用户通过了
browser=ie
,那么firefox测试就会被跳过:只需使用环境变量:
并运行测试,如:
BROWSER_TO_RUN=ff run_tests.py
相关问题 更多 >
编程相关推荐