在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修饰的函数,实现新增命令行参数的传递
总结
- 1、hook函数名字是固定的;
- 2、hook函数会被自动执行;
- 3、执行是有先后顺序的;
- 4、pytest定义了很多hook函数,可以在不同阶段实现不同的功能