【pytest】内置fixture之pytestconfig

  • 前言:前面讲 request 是pytest的一个内置 fixture ,作用是获取测试的上下文,可以通过request.config 获取配置对象。pytestconfig 的作用跟 request.config 是一样的,都是获取配置对象。
  • 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

  • 1、getoption() 获取命令行参数

#conftest.py

import pytest

# 注册命令行参数
def pytest_addoption(parser):
    parser.addoption(
        "--url",
        action = "store",
        default="http://127.0.0.1:8000",
        help = 'test base url'
    )

# 获取命令行参数
@pytest.fixture()
def get_url(pytestconfig):
    return pytestconfig.getoption("--url")

#test_getoption.py
import pytest

def test_getoption(get_url):
    url = get_url
    print("get_url",url)
  • 执行时传 --url:

  • 执行时,不传命令行参数

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

    • 在项目的根目录一般会放一个 pytest.ini 写一些配置参数
[pytest]
base_url = http://49.235.92.12:7005
  • 我们想读取 pytest.ini 里面的配置信息,可以用 pytestconfig.getini() 来获取,使用示例
#conftest.py
#获取配置文件参数
@pytest.fixture()
def get_ini_markers(pytestconfig):
    url = pytestconfig.getini("base_url")
    return url

#test_get_ini.py
def test_ini(get_ini_markers):
    print("url",get_ini_markers)
  • 3、pytest.ini配置参数

    • type参数的几种类型
      • 默认None,可以设置:None, "pathlist", "args", "linelist", "bool"
        • type=None 默认读的是字符串
        • type="pathlist" 可以设置多个路径,会自动拼接ini文件这一层目录
        • type="args" 多个参数
        • type="linelist" 可以是多个命令行参数
        • type="bool" bool值,设置1或0
    • 使用示例
#conftest.py
import pytest

# 注册命令行参数
def pytest_addoption(parser):
    parser.addoption(
        "--url",
        action = "store",
        default="http://127.0.0.1:8000",
        help = 'test base url'
    )

    #添加参数到pytest.ini
    parser.addini(
        'url',
        type=None,
        default = "http://127.0.0.1:8080",
        help = '添加URL访问地址'
    )

# 获取命令行参数
@pytest.fixture()
def get_url(pytestconfig):
    return pytestconfig.getoption("--url")


#获取配置文件参数
@pytest.fixture()
def get_ini_url(pytestconfig):
    url = pytestconfig.getini("url")
    return url

#test_get_ini.py
def test_ini(get_ini_url):
    print("url",get_ini_url)
posted @ 2022-08-22 20:39  Tony_xiao  阅读(372)  评论(0编辑  收藏  举报