• 内置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: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 ===========================
    这时候报告会按每条用例显示结果
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    获取aspx页面执行时间完全解决方案
    WebForm中DataGrid的20篇经典文章
    不走寻常路 设计ASP.NET应用程序的七大绝招
    动态绑定dropdownlist 开始拣.NET
    Notes中几个处理多值域的通用函数
    Lotus开发之Lotus Notes中域的验证
    Undokumentierte @Formeln/LotusScript im Lotus Notes Client/Server
    domino server端的Notes.ini详解
    Lotus开发基本性能优化
    以Ajax方式显示Lotus Notes视图的javasript类库NotesView2
  • 原文地址:https://www.cnblogs.com/HandsUp/p/14171557.html
Copyright © 2020-2023  润新知