Pytest使用pytest.ini实现多域名切换

最近遇到一个问题,在写接口测试脚本时,现在的项目需要调用两个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']

项目中使用截图:

Pytest使用pytest.ini实现多域名切换

 

 

 

本文为转载学习使用,原文地址:https://www.cnblogs.com/superhin/p/14975057.html

 

上一篇:内网IP映射成外可访问的域名


下一篇:Linux将未挂载的磁盘挂载到目录