内置fixture之pytestconfig

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:\pythonProject\fixture_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:\pythonProject\fixture_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:\pythonProject\fixture_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:\users\93724\appdata\local\programs\python\python37\python.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:\pythonProject\fixture_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 ===========================
这时候报告会按每条用例显示结果
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-12-22 10:08  Janus_Blog  阅读(123)  评论(0编辑  收藏  举报