前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest文档63-内置fixture之pytestconfig

pytest文档63-内置fixture之pytestconfig

作者头像
上海-悠悠
发布2020-12-03 10:56:26
5780
发布2020-12-03 10:56:26
举报

前言

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

pytestconfig 源码分析

pytestconfig 是一个内置fixture,用于获取配置对象 pytestconfig 源码 pytestconfig 有2个常用的方法

  • .getoption() 获取命令行参数
  • .getini() 获取ini配置文件的参数
代码语言:javascript
复制
@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

使用示例

代码语言:javascript
复制
def test_foo(pytestconfig):
    if pytestconfig.getoption("verbose") > 0:
        ...

getoption() 获取命令行参数

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

代码语言:javascript
复制
# 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")

测试用例

代码语言:javascript
复制
# 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 参数

代码语言:javascript
复制
>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:\wangyiyun\web\cases\module2
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 写一些配置参数

代码语言:javascript
复制
[pytest]

log_cli = 1

addopts = -v -x

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

代码语言:javascript
复制
# 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)

在命令行运行后,可以看到打印的内容

代码语言:javascript
复制
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 运行用例,在控制台输出是按每个模块显示运行结果

代码语言:javascript
复制
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 命令

代码语言:javascript
复制
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 ==============================

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • pytestconfig 源码分析
  • getoption() 获取命令行参数
  • getini() 从 pytest.ini 配置文件获取参数
  • log_cli
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档