pytestconfig的 作用跟request.config是一样的,都是获取配置对象
pytestconfig 源码分析
pytestconfig 是一个内置fixture, 用于获取配置对象
pytestconfig 有两个常用的方法
-
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
使用示例
def test_foo(pytestconfig): if pytestconfig.getoption("verbose") > 0: ...
getoption()获取命令行参数
获取命令行参数的使用方法,是应用最广泛的
import pytest def pytest_addoption(parser): parser.addoption( "--cmdopt", action="store", default="type1", help="my option: type1 or type2" ) @pytest.fixture def cmdopt(request): return request.config.getoption("--cmdopt")
测试用例
import pytest def test_answer_1(request): pra = request.config.getoption("--cmdopt") print("获取命令行参数:{}".format(pra)) def test_answer_2(cmdopt): print("获取命令行参数:{}".format(cmdopt))
命令行运行用例的时候,可以用--cmdopt参数
D:pythonProjectfixture_request>pytest -s test_02.py --cmdopt type2 ============================================================================================== test session starts ============================================================================================== platform win32 -- Python 3.7.0, pytest-3.9.3, py-1.7.0, pluggy-0.12.0 rootdir: D:pythonProjectfixture_request, inifile: plugins: allure-pytest-2.7.0, forked-0.2, html-1.21.1, metadata-1.8.0, ordering-0.6, repeat-0.8.0, rerunfailures-5.0, xdist-1.24.1 collected 2 items test_02.py 获取命令行参数:type2 .获取命令行参数:type2 . =========================================================================================== 2 passed in 0.03 seconds ============================================================================================
getini()从pytest.ini配置文件获取参数
在项目的根目录一般会放一个 pytest.ini 写一些配置参数
[pytest] log_cli = 1 addopts = -v -x
我们想读取 pytest.ini里面的配置信息 ,可以用pytestconfig.getini()来获取,使用示例
@pytest.fixture(autouse=True) def get_ini(pytestconfig): """读取ini配置信息""" # 读取log_cli配置 log_cli = pytestconfig.getini('log_cli') print("获取到的markers:{}".format(log_cli)) addopts = pytestconfig.getini('addopts') print("获取到的addopts配置:{}".format(addopts))
在命令行运行后,可以看到打印内容
test_cmdopt.py::test_answer_1 获取到markers :True 获取到db的配置:['-v', '-x'] 获取到命令行参数:type1 PASSED
addopts 参数可以更改默认命令行选项,这个当我们在cmd输入一堆指令去执行用例的时候,就可以用该参数代替了,省去重复性的敲命令工作
比如上面的配置,命令行输入pytest运行的时候,会默认带上的参数,如"pytest -v -x"
log_cli 是控制台实时输出日志,可以设置True 和 False, 也可以设置1 和 0
log_cli
log_cli 是控制台实时输出日志,可以设置True 和 Fales, 也可以设置1 和 0, 默认是关闭状态(False)
当log_cli = 0 或默认的False 状态 时,命令行输入 pytest 运行用例时,在控制台输出是按每个模块显示运行结果
============================= test session starts ============================= platform win32 -- Python 3.7.0, pytest-3.9.3, py-1.7.0, pluggy-0.12.0 rootdir: D:pythonProjectfixture_request, inifile: pytest.ini plugins: allure-pytest-2.7.0, forked-0.2, html-1.21.1, metadata-1.8.0, ordering-0.6, repeat-0.8.0, rerunfailures-5.0, xdist-1.24.1 collected 5 items test_01.py .. [ 40%] test_02.py .. [ 80%] test_anothersmtp.py . [100%] ========================== 5 passed in 1.30 seconds ===========================
当log_cli = 1 后, 运行pytest命令
============================= test session starts ============================= platform win32 -- Python 3.7.0, pytest-3.9.3, py-1.7.0, pluggy-0.12.0 -- c:users93724appdatalocalprogramspythonpython37python.exe cachedir: .pytest_cache metadata: {'Python': '3.7.0', 'Platform': 'Windows-10-10.0.18362-SP0', 'Packages': {'pytest': '3.9.3', 'py': '1.7.0', 'pluggy': '0.12.0'}, 'Plugins': {'allure-pytest': '2.7.0', 'forked': '0.2', 'html': '1.21.1' , 'metadata': '1.8.0', 'ordering': '0.6', 'repeat': '0.8.0', 'rerunfailures': '5.0', 'xdist': '1.24.1'}, 'JAVA_HOME': 'C:\Program Files\Java\jdk1.8.0_131'} rootdir: D:pythonProjectfixture_request, inifile: pytest.ini plugins: allure-pytest-2.7.0, forked-0.2, html-1.21.1, metadata-1.8.0, ordering-0.6, repeat-0.8.0, rerunfailures-5.0, xdist-1.24.1 collected 5 items test_01.py::test_register[user1] PASSED [ 20%] test_01.py::test_register[user2] PASSED [ 40%] test_02.py::test_answer_1 PASSED [ 60%] test_02.py::test_answer_2 PASSED [ 80%] test_anothersmtp.py::test_showhelo PASSED [100%] ========================== 5 passed in 1.57 seconds ===========================
这时候报告会按每条用例显示结果