pytest--pytest.ini文件中如何添加其他参数
pytest.ini配置文件依赖pytest-base-url插件,插件实现的逻辑实际上就是通过addini注册一个参数,再去读取pytest.ini文件中写入的参数,如果pytest.ini中没有对应的参数,那么就使用默认的地址,再写成一个fixture,将读取到的内容return到对应fixture下。从而实现和base_url一样的功能
插件地址:https://pypi.org/project/pytest-base-url/
部分源码如下:
import os import pytest @pytest.fixture(scope="session") def base_url(request): """Return a base URL""" config = request.config base_url = config.getoption("base_url") if base_url is not None: return base_url def pytest_addoption(parser): parser.addini("base_url", help="base url for the application under test.") parser.addoption( "--base-url", metavar="url", default=os.getenv("PYTEST_BASE_URL", None), help="base url for the application under test.", ) parser.addoption( "--verify-base-url", action="store_true", default=not os.getenv("VERIFY_BASE_URL", "false").lower() == "false", help="verify the base url.", )
未注册pytest.ini文件参数前调用配置文件中除了base_url外的其他参数
pytest.ini配置文件内容:
毫无疑问fixture xxx not found
---测试注册pytest.ini配置文件的参数后,再在用例中调用,default默认的地址是https://baidu.com
import pytest def pytest_addoption(parser): # 注册配置文件中参数 parser.addini( "web", type=None, default='https://baidu.com/', help='pytest.ini配置文件中注册参数' ) @pytest.fixture(scope="function") def web(request): web = request.config.getini('web') print("打印获取到pytest.ini配置文件中web参数的值:{}".format({request.config.getini("web")})) return web
执行case后的结果:
可以看到用例在执行中是读到了pytest.ini配置文件中的web属性
当配置文件中没有web这个参数的时候,默认就使用https://baidu.com
此时pytest.ini配置文件的配置:
用例中运行后的结果: