首页 > 其他分享 >【pytest】内置fixture之pytestconfig

【pytest】内置fixture之pytestconfig

时间:2022-08-22 20:44:40浏览次数:81  
标签:pytestconfig get url fixture pytest ini def

  • 前言:前面讲 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)

标签:pytestconfig,get,url,fixture,pytest,ini,def
From: https://www.cnblogs.com/xwltest/p/16614187.html

相关文章

  • 【pytest】内置fixture之request
    前言:request是pytest的内置fixture,"为请求对象提供对请求测试上下文的访问权,并且在fixture被间接参数化的情况下具有可选的“param”属性。"1、request.param前......
  • Pytest框架 — 14、Pytest的标记(五)(控制测试用例执行顺序)
    目录1、前言2、使用3、标记最先执行和最后执行1、前言在执行自动化测试时,我们通常都希望能够控制执行测试用例的顺序。在unittest框架中默认按照ACSII码的顺序加载测试......
  • Pytest框架 — 14、Pytest的失败重试
    目录1、前言2、使用(一)命令行或main函数中使用(二)全局配置中使用(推荐用法)1、前言有时候我们测试执行由于某些原因失败了,想要多执行几次,Pytest可以使用pytest-rerunfailures......
  • Pytest框架 — 13、Pytest的标记(四)(分组执行)
    目录1、前言2、mark的使用(一)注册自定义标记(二)在测试用例上标记(三)执行3、扩展(一)在同一个测试用例上使用多个标记(二)在测试类上使用标记1、前言在自动化测试工作中我们有时......
  • Pytest框架 — 12、Pytest的标记(三)(重复执行)
    目录1、前言2、--count参数使用(一)在命令行或者main函数使用(二)在全局配置文件中使用3、--repeat-scope参数使用4、@pytest.mark.repeat(count)装饰器使用5、结合参数x使重复......
  • pytest系列——allure命令行参数详解
    一、查看allure命令的帮助文档allure-hallure命令的语法格式allure[options][command][commandoptions]options列表Options:--help命令行帮助文档......
  • Pytest系列(2-3)-conftest详解
    什么是conftest.py可以理解成一个专门存放fixture的配置文件 实际开发场景多个测试用例文件(test_*.py)的所有用例都需要用登录功能来作为前置操作,那就不能把登录功能写......
  • Pytest系列(2-1)-fixture的详细使用
    前言前面一篇讲了setup、teardown可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局生效的如果有以下场景:用例1需要先登录,用例2不需要登录,用例......
  • Pytest系列(2-1)-用例状态
    用例执行状态用例执行完成后,每条用例都有自己的状态,常见的状态有passed:测试通过failed:断言失败error:用例本身写的质量不行,本身代码报错(譬如:fixture不存在,fixture里面......
  • Pytest系列(1-2)-assert断言详细使用
    前言与unittest不同,pytest使用的是python自带的assert关键字来进行断言assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例......