pytest下如何编写支持多WebDriver执行的通用Selenium测试
pytest + Selenium 跨浏览器测试去冗余方案
使用pytest原生的参数化Fixture能力可以完全消除重复样板代码,不需要为每个测试单独编写多浏览器适配逻辑,所有浏览器初始化、销毁逻辑只需要实现一次,所有测试用例自动在所有配置的浏览器环境下执行。
具体实现
- 把WebDriver的初始化、通用配置、资源回收逻辑统一抽为公共fixture,通过fixture的参数化能力声明需要兼容的浏览器列表:
import pytest from selenium import webdriver @pytest.fixture(params=["chrome", "firefox"]) def driver(request): # 按传入参数初始化对应浏览器驱动 if request.param == "chrome": browser = webdriver.Chrome() elif request.param == "firefox": browser = webdriver.Firefox() # 统一配置全局通用规则 browser.implicitly_wait(10) # 用例执行完成后自动关闭浏览器,释放资源 yield browser browser.quit()
- 编写测试用例时,直接将
driver作为参数传入即可,不需要编写任何浏览器相关的初始化逻辑。pytest会自动为每个配置的浏览器生成独立的测试执行实例,分别运行用例:
def test_page_function(driver): driver.get('http://localhost:3333') # 直接编写核心测试逻辑即可,无需感知当前运行的浏览器类型 # 后续新增的所有测试只要传入driver参数,就会自动在Chrome、Firefox下各执行一次
方案优势
- 无冗余代码:浏览器初始化、配置逻辑全局只写一次,新增测试不需要额外编写适配代码
- 结果清晰可追溯:运行
pytest filename.py时,测试结果中会单独展示每个浏览器环境下的用例执行状态,哪个环境失败一目了然 - 扩展成本极低:后续如果需要新增Edge、Safari等浏览器支持,只需要在fixture的
params列表中新增对应浏览器标识,补全对应的初始化代码即可,所有存量测试用例不需要做任何修改 - 支持灵活配置:可以额外添加pytest命令行参数,实现运行时指定要执行的浏览器,比如执行
pytest --browser chrome时只运行Chrome环境的用例,不传参时默认运行全量浏览器环境的用例。
内容的提问来源于stack exchange,提问作者Kamil Bęben
相关产品推荐
相关产品推荐

