zoukankan      html  css  js  c++  java
  • pytest内置fixture之pytestconfig

      pytestconfig是pytest的一个内置fixture,可以获取上下文,它的作用跟request.config是一样的,可以获取配置对象。

    pytestconfig的源代码:

    @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,所以说pytestconfig的作用与request.config的作用是一样的。

    源码中还提供了使用示例:

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

    pytestconfig中有2个比较常用的方法:

    • getoption:获取命令行中的参数;
    • getini:获取pytest.ini配置文件中的参数;

    getoption获取命令行参数:

      前面我们已经写过获取命令行参数的例子了:

    # file_name: configtest.py
    
    
    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")

    测试用例:

    # file_name: test_option.py
    
    
    import pytest
    
    
    def test_cmd_1(cmdopt):    # 通过conftest中定义的fixture来获取参数值
        print("test_cmd_1当前获取的参数为:{}".format(cmdopt))
    
    
    def test_cmd_2(pytestconfig):    # 直接通过pytestconfig获取参数值
        cmdopt = pytestconfig.getoption("cmdopt")
        print("test_cmd_2当前获取的参数为:{}".format(cmdopt))
    
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_option.py'])

    命令行中执行指令:pytest test_option.py -s --cmdopt=type2,运行结果为:

      从结果中可以看到,两种方式都可以获取到命令行参数cmdopt的值。

    pytestconfig动态添加pytest.ini配置参数(addini):

      我们之前在conftest.py文件中通过在钩子函数pytest_addoption中使用addoption方法来添加命令行参数,现在我们在钩子函数pytest_addoption中使用addini来添加配置参数:

        def addini(self, name, help, type=None, default=None):
            """ register an ini-file option.
    
            :name: name of the ini-variable
            :type: type of the variable, can be ``pathlist``, ``args``, ``linelist``
                   or ``bool``.
            :default: default value if no ini-file option exists but is queried.
    
            The value of ini-variables can be retrieved via a call to
            :py:func:`config.getini(name) <_pytest.config.Config.getini>`.
            """
            assert type in (None, "pathlist", "args", "linelist", "bool")
            self._inidict[name] = (help, type, default)
            self._ininames.append(name)

    上面是addini的源码,从源码中可以看到addini方法有4个参数:name,help,type,default

    • name:是参数的名称;
    • help:是帮助说明,方便查阅;
    • type:是参数类型,默认None,可以设置:None, "pathlist", "args", "linelist", "bool";
    • default:参数默认值;

    举例:

    # file_name: configtest.py
    
    def pytest_addoption(parser):
        # 添加命令行参数
        parser.addoption(
            "--cmdopt", action="store", default="type1", help="my option: type1 or type2"
        )
        # 添加配置参数
        parser.addini(
            "base_url", type=None, default="http://www.lwjnicole.com", help="添加base_url配置参数"
        )
    
    
    @pytest.fixture()
    def base_url(pytestconfig):
        return pytestconfig.getini("base_url")

    测试用例:

    # file_name: test_option.py
    
    
    
    import pytest
    
    
    def test_base_url(base_url):
        print("当前获取到的base_url = {}".format(base_url))
    
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_option.py'])

    命令行输入指令:pytest test_option.py -s ,运行结果:

      从结果中可以看到我们获取到了通过addini()添加的配置参数base_url。

    pytestconfig获取配置文件中的配置参数(getini):

      现在有配置文件pytest.ini的内容如下:

    # file_name: pytest.ini
    
    
    [pytest]
    markers =
        slow: run slow mark case
        fast: run fast mark case
    
    xfail_strict = True
    
    addopts = -v --reruns=2 --html=report.html --self-contained-html
    
    log_cli = False
    
    norecursedirs = venv report util log
    
    python_files = test*.py
    
    python_classes = Test*
    
    python_functions = test_*

    测试用例:

    # file_name: test_option.py
    
    
    import pytest
    
    
    def test_get_ini(pytestconfig):
        log_cli = pytestconfig.getini("log_cli")
        print("
    获取到的log_cli = {}".format(log_cli))
    
        xfail_strict = pytestconfig.getini("xfail_strict")
        print("
    获取到的xfail_strict = {}".format(xfail_strict))
    
        addopts = pytestconfig.getini("addopts")
        print("
    获取到的addopts = {}".format(addopts))
    
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_option.py'])

    运行结果:

      从运行结果中可以看到我们可以通过pytestconfig.getini()方法来获取配置文件中的配置参数。

  • 相关阅读:
    2011 ACM-ICPC 成都赛区解题报告(转)
    Subarray Sorting (线段树)
    sample
    gamma correction / /alpha blend
    mipmap
    antialiasing
    汇编指令
    zfighting 的问题
    勉励自己
    Ambient Occulution
  • 原文地址:https://www.cnblogs.com/lwjnicole/p/14452487.html
Copyright © 2011-2022 走看看