【pytest】内置fixture之pytestconfig
- 前言:前面讲 request 是pytest的一个内置 fixture ,作用是获取测试的上下文,可以通过request.config 获取配置对象。pytestconfig 的作用跟 request.config 是一样的,都是获取配置对象。
- pytestconfig 是一个内置fixture,用于获取配置对象 pytestconfig 源码
- pytestconfig 有2个常用的方法
- .getoption() 获取命令行参数
- .getini() 获取ini配置文件的参数
@fixture(scope="session")
def pytestconfig(request: FixtureRequest) -> Config:
"""Session-scoped fixture that returns the :class:`_pytest.config.Config` object.
Example::
def test_foo(pytestconfig):
if pytestconfig.getoption("verbose") > 0:
...
"""
return request.config
-
从上面的源码看出,实际返回的就是 request.config
-
1、getoption() 获取命令行参数
#conftest.py
import pytest
# 注册命令行参数
def pytest_addoption(parser):
parser.addoption(
"--url",
action = "store",
default="http://127.0.0.1:8000",
help = 'test base url'
)
# 获取命令行参数
@pytest.fixture()
def get_url(pytestconfig):
return pytestconfig.getoption("--url")
#test_getoption.py
import pytest
def test_getoption(get_url):
url = get_url
print("get_url",url)
-
执行时传 --url:
-
执行时,不传命令行参数
-
2、getini() 从 pytest.ini 配置文件获取参数
- 在项目的根目录一般会放一个 pytest.ini 写一些配置参数
[pytest]
base_url = http://49.235.92.12:7005
- 我们想读取 pytest.ini 里面的配置信息,可以用 pytestconfig.getini() 来获取,使用示例
#conftest.py
#获取配置文件参数
@pytest.fixture()
def get_ini_markers(pytestconfig):
url = pytestconfig.getini("base_url")
return url
#test_get_ini.py
def test_ini(get_ini_markers):
print("url",get_ini_markers)
-
3、pytest.ini配置参数
- type参数的几种类型
- 默认None,可以设置:None, "pathlist", "args", "linelist", "bool"
- type=None 默认读的是字符串
- type="pathlist" 可以设置多个路径,会自动拼接ini文件这一层目录
- type="args" 多个参数
- type="linelist" 可以是多个命令行参数
- type="bool" bool值,设置1或0
- 默认None,可以设置:None, "pathlist", "args", "linelist", "bool"
- 使用示例
- type参数的几种类型
#conftest.py
import pytest
# 注册命令行参数
def pytest_addoption(parser):
parser.addoption(
"--url",
action = "store",
default="http://127.0.0.1:8000",
help = 'test base url'
)
#添加参数到pytest.ini
parser.addini(
'url',
type=None,
default = "http://127.0.0.1:8080",
help = '添加URL访问地址'
)
# 获取命令行参数
@pytest.fixture()
def get_url(pytestconfig):
return pytestconfig.getoption("--url")
#获取配置文件参数
@pytest.fixture()
def get_ini_url(pytestconfig):
url = pytestconfig.getini("url")
return url
#test_get_ini.py
def test_ini(get_ini_url):
print("url",get_ini_url)