Python中pytest之参数化数据驱动三

179 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

在Pytest中实现数据驱动有3中方式,前边两节已经讲解了数据驱动的两种方式,今天讲解最后一种方式。

使用钩子方法生成多条用例

Pytest自带的钩子方法pytest_generate_tests,可以用来生成多条用例,在用例同级或者上级conftest.py中添加两个钩子方法,一个用例自定义,一个命令行参数,一个用例根据参数格式参数化生成用例。

在conftest.py文件中编写脚本,设置一个命令行参数,通过命令行来执行运行测试用例的浏览器,默认为chrome浏览器

# 添加一个命令行参数--browser,支持传入多次,默认只运行 chrome 浏览器
def pytest_addoption(parser):
    parser.addoption("--browser", action="append", default=['chrome'], help="Browsers For Run Selenium")

def pytest_generate_tests(metafunc):
    if "browser" in metafunc.fixturenames: # 当用例中使用了 browser 这个 Fixture 时
    # 根据 browser 参数列表,对 browser 这个 Fixture 函数进行参数化
    metafunc.parametrize("browser", metafunc.config.getoption("browser"))

在测试脚本(test_demo.py)的测试用例的内容,测试脚本通过字典值,获取不同浏览器对应的driver ,从而启动不同的浏览器

from selenium import webdriver
# 根据参数映射不同浏览器的 WebDriver 类
BROWSER_MAP = {  'chrome': webdriver.Chrome,
                 'firefox': webdriver.Firefox,
                 'ie': webdriver.Ie, 'Edge': webdriver.Edge, }
def test_baidu(browser):
    print(f'使用浏览器 {browser}执行测试')
    # 根据 browser 参数获取对应的 WebDriver 类(获取不到时使用 Chrome),并实例化
    driver = BROWSER_MAP.get(browser.lower(), webdriver.Chrome)()
    driver.get('https://www.baidu.com')
    assert '百度' in driver.title
    driver.quit()

在命令行,执行脚本(切换到用例所在的目录下执行):命令行来执行浏览器,

pytest test_demo10.py -qs --browser=chrome --browser=firefox

这种方式可以实现启动不同的浏览器来分别执行测试用例。

通过命令行来指定启动的浏览器,在通过脚本中不同浏览器启动不同的driver来执行浏览器,从而实现启动不同浏览器来执行测试用例的功能。