在平时的接口自动化运行当中会遇到多套环境的兼容,就可以通过Pytest,HOOK函数,通过自定义命令行参数的方法来实现隔离多套环境用例的运行
首先需要导入pytest模块,并在主项目路径下创建conftest.py文件
import pytest
#添加自定义命令行参数,例如:添加环境变量参数env-test,pro,release
def pytest_addoption(parser):
mygroup = parser.getgroup("demaxiya")
mygroup.addoption("--env",
dest='env',
action='store',
choices=['test', 'pro', 'release'],
default='test', # 默认值
help='将自己定义的命令行参数添加到pytest配置中
#读取自定义环境参数--env
@pytest.fixture(scope="session")
def env(request):
# 读取环境变量配置
maven = request.config.getoption('--env')
#这里请看上节Pytest添加自定义环境变量方法
add_envoriment('env', maven)
print("添加env成功")
if maven == 'test':
datapath = DATASPATH + f'{maven}.yaml'
elif maven == 'pro':
datapath = DATASPATH + f'{maven}.yaml'
elif maven == 'release':
datapath = DATASPATH + f'{maven}.yaml'
else:
return f"环境变量--env={maven}取值错误"
with open(datapath, encoding='utf-8') as f:
datas = yaml.safe_load(f)[f'{maven}']
return [maven, datas]
#通过这样的命令之后当前处于什么环境 就可以通过read_envoriment("env")知道了,从而做判断
例如在编写接口自动化:
if read_envoriment("env") == "test":
'''这里就是test环境下的逻辑处理了'''
#这里首先需要创建主函数:main.py 在命令行参数中 添加 --env=test即可就说明运行的是test环境的逻辑
pytest.main(['-s', '-v',
'--env=test', #设置自定义Pytest参数变量
'--reruns=1', '--reruns-delay=2', # 对失败用例重跑一次,重跑前间隔2s
'--alluredir', f'{BASE_PATH}/report/xml/' + new_dir_name]) # 生成xml
command_word = f'allure generate {BASE_PATH}/report/xml/{new_dir_name} -o {BASE_PATH}/report/html/{new_dir_name} --clean'
os.system(command_word) # 执行cmd命令,生成html