1.在项目中,通常需要对不同游览器进行兼容性测试,故在对代码进行解耦,使其可以根据命令行指定执行游览器

一.添加自定义参数

1.因为pytest中无browser参数,故需要添加自定义参数

2.pytest框架要添加自定义参数需要在 conftest.py 模块中(也只能在此模块中)实现钩子函数pytest_addoption
3.修改test_cases文件夹下conftest.py文件,新增内容
def pytest_addoption(parser):
    # 定义pytest的参数
    parser.addoption("--browser",default='chrome')   # 坑 参数都是--小写
4.官方网址:https://docs.pytest.org/en/latest/reference/reference.html#pytest.hookspec.pytest_addoption

二.设置游览器驱动路径

1.在根目录下新建drivers文件夹,用来存放游览器驱动(建议附上驱动对应版本信息)

在这里插入图片描述

2.在配置文件setting.py中添加游览器驱动位置
# 浏览器驱动
BROWSER_DRIVERS = {
    'chrome': os.path.join(BASE_DIR, 'drivers', 'chromedriver_90.exe'),
    'edge': os.path.join(BASE_DIR, 'drivers', 'msedgedriver_90.exe')
}

三.在夹具中接收参数

1.pytest框架在执行用例前会把所有的参数封装到一个对象中,使用内置夹具 pytestconfig 可以获取对应的参数

2.所以,自定义夹具只需要使用 pytestconfig 即可
3.通过自定义 --browser 参数来指定运行测试的浏览器,定义打开浏览器的夹具,重写driver方法,在test_cases文件夹下conftest.py文件新增内容,
@pytest.fixture(scope='class')
def driver(pytestconfig):
    if pytestconfig.getoption('--browser')=='edge':
        with webdriver.Edge(executable_path=settings.BROWSER_DRIVERS['edge']) as wd:
            wd.maximize_window()
            yield wd
    elif pytestconfig.getoption('--browser')=='chrome':
        with webdriver.Edge(executable_path=settings.BROWSER_DRIVERS['chrome']) as wd:
            wd.maximize_window()
            yield wd

四.修改main.py函数

1.修改main.py代码可接受命令行--browser参数,修改后代码
import pytest
import settings
from common.tools import get_opts
 
if __name__ == '__main__':
    # pytest.main(['-s','-v','-m success','--alluredir=./reports', settings.TEST_CASE_DIR])
    # 定义传入的参数信息
    args=['-s','-v','--alluredir=./reports', settings.TEST_CASE_DIR]
    # 获取命令行-m参数的值
    arg=get_opts('-m')
    # 若-m参数不为空,则将参数和参数值传入参数信息中
    if arg:
        args.insert(0,'-m {}'.format(arg))
    arg = get_opts('--browser')
    if arg:
        args.insert(0,'--browser=={}'.format(arg))   # 坑:这里只能写key=value的形式,不要用空格
    # 运行代码并生成测试报告
    pytest.main(args)

五.运行

1.在命令行中指定标记和游览器运行
python main.py -m "success and login" --browser edge

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐