什么是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 |
|
运行后结果如下:
test_order
被标记Error,并且信息提示:test setup failed
,说明是调用的fixture函数存在问题,且说明了