如果引发特定错误,则允许所有测试失败

时间:2020-02-26 19:48:51

标签: python pytest python-unittest

我的项目中有2000多个单元测试/ pytest。他们中的许多人都询问API,但API可能会滞后。如果发生此错误,是否有一种方法可以期望APILagError出现在每个测试中,并对任何测试都抛出SKIP / XFAIL?

当前:

  • test_1:好的
  • test_2:失败
  • test_3:好的

结果:1​​次失败,2次确定=>测试失败

想要:

  • test_1:好的
  • test_2:跳过/ xfail
  • test_3:好的

结果:2正常,1跳过/不合格=>测试通过

1 个答案:

答案 0 :(得分:3)

我感到你很痛苦。我要做的是这样烦人的事情,我实际上并没有像您提出的那样回答您的问题,但是建议您改变方向。您应该选择以下选项之一:

  1. 嘲笑该API,这样它就不会再超时,并且您的测试也不会出现问题
  2. 将API滞后作为正常行为进行处理,并增加允许的API调用持续时间,这样典型的滞后时间不会导致测试失败
  3. 将您的API滞后作为一个错误进行处理,并对其进行修复,以使您的测试通过

为什么亚麻测试不好?

轻巧的测试意味着您无法分辨破损的代码和缓慢的API调用之间的区别。因此,您的测试并不能帮助您捕获错误。那有什么意义呢?

我为什么要模拟API?这不是“真实”!

如果要测试API之外的任何内容,则可以执行此操作。将您的逻辑与API的行为分离开来,以消除脆弱性并使代码更易于维护。

您也许还可以获取行为类似但速度更快的API,作为您的模拟进行测试。就像在本地检查API的代码并用一小组数据填充它一样。在您的测试中而不是在生产API中实现这一目标。这样一来,您就可以将其逻辑与其滞后性分开检查。