Python自动化测试pytest中fixtureAPI

本文详细介绍了Python自动化测试库pytest中的fixture功能,包括fixture与xUnit的对比,fixture报错处理,以及@fixture()装饰器的scope、params、autouse、ids和name等参数的使用。通过实例演示了fixture如何为测试提供数据源,以及如何提高代码的可读性和测试效率。
摘要由CSDN通过智能技术生成

什么是fixture

根据pytest官方文档的说明,fixture可以简单的归纳为具有以下功能的函数:

  • 配置测试前系统的初始状态;
  • 定义传入测试中的数据集;
  • 为批量测试提供数据源等

与xUnit风格的setup和teardown的对比

fixture的功能与setup和teardown类似,可以实现setup和teardown的功能,但是对这些功能进行了明显的改进,主要有以下方面:

  • 调用灵活。可以在测试函数、模块、类或整个项目中声明fixture的名称来进行调用;
  • 使用灵活。fixture即适用于简单的单元测试又适用于复杂的功能测试。根据测试的需求可对fixture进行参数化使用,并且可对fixture进行重复使用。
  • fixture是以模块化方式实现的,因此允许fixture调用其他fixture函数;
  • teardown的实现逻辑更加清晰明了,并且方便进行管理。

 fixture运行报错后,pytest的处理方式

通过上面的说明,我们可以知道fixture函数本身是允许调用其他fixture函数的。在这种情况下,测试运行的时候,其中一个fixture函数报错了,pytest的会如何处理呢?
通过pytest官方文档的说明,我们可以知道:

  • pytest以线性的方式顺序执行测试用例所调用的fixture函数;
  • 当顺序较前的fixture函数执行报错后,pytest会停止执行该测试所调用的其他fixture,并且将测试标记出错;
  • 测试标记错误,并不意味着测试未通过,只能说明测试无法尝试执行下去,因此我们需要尽可能的去为测试函数减少必要的依赖关系。

示例1:

1.在以下demo代码中,order()返回类型存在问题,正确的应该返回一个list,我们给其返回一个None:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import pytest

@pytest.fixture

def order():

    return None  #正确应该返回[],我们给返回一个None

@pytest.fixture

def append_first(order):

    order.append(1)

@pytest.fixture

def append_second(order, append_first):

    order.extend([2])

@pytest.fixture(autouse=True)

def append_third(order, append_second):

    order += [3]

def test_order(order):

    assert order == [1, 2,3]

运行后结果如下:

test_order被标记Error,并且信息提示:test setup failed,说明是调用的fixture函数存在问题,且说明了

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值