pytest编写插件2 ------为第三方插件添加命令行参数

在hookspec.py文件中找到pytest_addoption函数(此时函数只有定义,没有实现方法,hook函数的名字是固定的,不能自己声明函数名称)

在conftest.py文件中重写pytest_addoption函数

def pytest_addoption(parser):    
    mygroup = parser.getgroup("hogwarts")     #为命令行添加一个组parser,group 将下面所有的 option都展示在这个group下。
    mygroup.addoption("--env",    #注册一个命令行选项
        default='test',      # 参数的默认值
        dest='env',            #  存储的变量,为属性命令,可以使用Option对象访问到这个值,暂用不到
        help='set your run env'    # 帮助提示 参数的描述信息
        )
    mygroup.addoption("--env1",
                      default="test1",
                      dest='env1',
                      help='set your run env1'
                      )

通过定义fixture拿到定义好的参数,并针对传入的不同参数完成不同的逻辑处理(例如测试环境和开发环境)

@pytest.fixture(scope='session')
def cmdoption(request):
    global datapath
    myenv = request.config.getoption("--env", default='test')
    if myenv == 'test':
        datapath = "datas/test/data.yaml"
    elif myenv == 'dev':
        datapath = "datas/dev/data.yaml"

    with open(datapath) as f:
        datas = yaml.safe_load(f)
    return myenv, datas

通过在测试用例中获取fixture修饰的函数,实现新增命令行参数的传递

image

总结

  • 1、hook函数名字是固定的;
  • 2、hook函数会被自动执行;
  • 3、执行是有先后顺序的;
  • 4、pytest定义了很多hook函数,可以在不同阶段实现不同的功能