最近遇到一个问题,在写接口测试脚本时,现在的项目需要调用两个url,原来一直使用pytest_base_url来控制,切换base_url配置。现在项目有两个url抓瞎了。现找到一个方法,以做记录。
这里考虑借用pytest.ini来完成配置,由于pytest.ini实际只使用了一个[pytest]段,我们可以增加其他段的配置,比如
- 增加全局变量[global]段
- 增加不同环境的[dev]、[prod]段
# pytest.ini [pytest] env = prod [global] url1 = http://xxx:8888 url2 = http://xxx:7010 [prod] url3 = http://xxxx:8888 url4 = http://xxxx:7010 [dev] url5 = http://xxxx:8888 url6 = http://xxx:7010
这里我们需要增加一个命令行选项--env和配置项env来选择使用的环境,并根据环境加载对应环境的变量,全局变量则默认加载
# conftest.py def pytest_addoption(parser): parser.addoption("--env", action="store", help="choose env: dev,prod") parser.addini('env', help="choose env: dev,prod") @pytest.fixture(scope='session') def env_vars(request): config = request.config cur_env = config.getoption('--env') or config.getini('env') inifile = config.inifile conf = ConfigParser() conf.read(inifile) variables = {} if conf.has_section('global'): variables.update(conf.items('global')) if conf.has_section(cur_env): variables.update(conf.items(cur_env)) return variables
这里编写了一个名为env的fixture方法来拿到指定环境配置的变量,以及全局变量的内容,用例使用方法如下:
# test_demo.py def test_demo(env_vars): print(env_vars) # 结果如下: {'url1': 'http://xxxx:8888', 'url2': 'http://xxxx:7010', 'url3': 'http://xxxx:8888', 'url4': 'http://xxxx:7010'} #可以通过Key取值,取出需要的环境url,如:env_vars['url1']
项目中使用截图:
本文为转载学习使用,原文地址:https://www.cnblogs.com/superhin/p/14975057.html