zoukankan      html  css  js  c++  java
  • pytest文档63-内置fixture之pytestconfig

    前言

    前面讲 request 是pytest的一个内置 fixture ,作用是获取测试的上下文,可以通过request.config 获取配置对象。
    pytestconfig 的作用跟 request.config 是一样的,都是获取配置对象

    pytestconfig 源码分析

    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

    使用示例

    def test_foo(pytestconfig):
        if pytestconfig.getoption("verbose") > 0:
            ...
    

    getoption() 获取命令行参数

    获取命令行参数的案例,在前面讲过很多次了,这个也是用的最广泛的

    # content of conftest.py
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    import pytest
    
    
    def pytest_addoption(parser):
        parser.addoption(
            "--cmdopt", action="store", default="type1", help="my option: type1 or type2"
        )
    
    @pytest.fixture
    def cmdopt(pytestconfig):
        return pytestconfig.getoption("--cmdopt")
    

    测试用例

    # test_cmdopt.py
    import pytest
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    def test_answer_1(pytestconfig):
        type = pytestconfig.getoption("--cmdopt")
        print("获取到命令行参数:%s" % type)
    
    
    def test_answer_2(cmdopt):
        print("获取到命令行参数:%s" % cmdopt)
    

    命令行运行用例的时候,可以用 --cmdopt 参数

    >pytest -s test_cmdopt.py --cmdopt type2
    ================== test session starts =======
    platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.9.0, pluggy-0.13.1
    rootdir: D:wangyiyunwebcasesmodule2
    rerunfailures-9.1, xdist-2.1.0
    collected 2 items
    
    test_cmdopt.py 获取到命令行参数:type2
    .获取到命令行参数:type2
    .
    
    ================== 2 passed in 0.06 seconds ==========
    

    getini() 从 pytest.ini 配置文件获取参数

    在项目的根目录一般会放一个 pytest.ini 写一些配置参数

    [pytest]
    
    log_cli = 1
    
    addopts = -v -x
    

    我们想读取 pytest.ini 里面的配置信息,可以用 pytestconfig.getini() 来获取,使用示例

    # conftest.py
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    @pytest.fixture(autouse=True)
    def get_ini(pytestconfig):
        '''读取ini配置信息'''
        # 读取 log_cli配置
        log_cli = pytestconfig.getini('log_cli')
        print("获取到markers :%s" % log_cli)
        addopts = pytestconfig.getini('addopts')
        print("获取到addopts的配置:%s " % 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 和 False,也可以设置1 和 0,默认是关闭状态(False)

    当 log_cli = 0 或默认的 False 状态时,命令行输入 pytest 运行用例,在控制台输出是按每个模块显示运行结果

    collected 6 items
    
    test_1.py ..                                                                    [ 33%]
    test_anothersmtp.py .                                                           [ 50%]
    test_cmdopt.py ..                                                               [ 83%]
    test_y.py .                                                                     [100%]
    
    ============================== 6 passed in 1.80 seconds ==============================
    

    当log_cli = 1后 运行 pytest 命令

    collected 6 items
    
    test_1.py::test_answer_1 PASSED                                                 [ 16%]
    test_1.py::test_answer_2 PASSED                                                 [ 33%]
    test_anothersmtp.py::test_showhelo PASSED                                       [ 50%]
    test_cmdopt.py::test_answer_1 PASSED                                            [ 66%]
    test_cmdopt.py::test_answer_2 PASSED                                            [ 83%]
    test_y.py::test_i PASSED                                                        [100%]
    
    ============================== 6 passed in 0.84 seconds ==============================
    

    这时候报告会按每条用例显示结果

  • 相关阅读:
    Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)D. Frequency of String
    edu30F. Forbidden Indices
    QQ登录模拟GUI综合
    Thread与Runnable线程继承与实现
    windowsProgram系统强制隐藏解除代码
    最长公共上升子序列(LCIS问题)
    分层图学习笔记 & [JLOI2011]飞行路线题解
    Luogu P1441 砝码称重
    NOIP 2020 复习计划
    浅析BST二叉搜索树
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14042224.html
Copyright © 2011-2022 走看看