Pytest自动化测试框架-教程23-不稳定测试用例

不稳定测试用例处理

“不稳定”测试用例是指,有时候用例通过,有时候失败。用例间歇或偶发性出现故障,并且不清楚原因。本页讨论了pytest的一些帮助处理这些不确定测试用例的功能。这些功能可以帮助你快速确定、修复或缓解这些问题,或提供一些其他的常规策略。

为什么不稳定测试用例是个问题

当使用连续集成(CI)服务器时,不稳定测试尤其麻烦,因此在合并新代码更改之前必须通过所有测试。如果测试结果不是一个不稳定 - 测试失败意味着代码更改破坏了测试 - 开发人员可能会对测试结果产生不信任,这可能导致忽略真正的失败。它也是浪费时间的一个来源,因为开发人员必须重新运行测试套件并调查虚假故障。

潜在的根本原因

系统状态

从广义上讲,不稳定测试用例,表明测试依赖于一些未被适当控制的系统状态 - 测试环境没有充分隔离。更高级别的测试更有可能是因为他们依赖更多的状态。

当测试套件并行运行时(例如使用pytest-xdist),有时会出现不稳定测试用例。这可以表明测试依赖于测试顺序。

  • 也许不同的测试是在自身之后无法清理并留下导致片状测试失败的数据。
  • 不稳定测试依赖于先前测试的数据,该测试不会自行清理,并且并行运行以前的测试并不总是存在。
  • 修改全局状态的测试通常不能并行运行。

过于严格的断言

过于严格的断言可能会导致浮点比较以及时序问题。pytest.approx在这里很有用。

Pytest特性

Xfail严格模式

pytest.mark.xfailstrict=False可用于标记测试,以便其失败不会导致整个构建中断。这一般用于临时手动隔离一些问题,但不推荐永久使用。

PYTEST_CURRENT_TEST

PYTEST_CURRENT_TEST环境变量可用于确定“哪个测试用例卡住了”。

插件

重新运行任何失败的用例可以通过给予他们额外的机会来减轻不稳定测试的负面影响,这样整体构建就不会失败。以下几个pytest插件可以支持用例重新运行:

  • flasky
  • pytest-flakefinder - blog post
  • pytest-rerunfailures
  • pytest-replay:这个插件有助于重现CI运行期间观察到的局部崩溃或片状测试。

使用随机化测试的插件,打乱运行顺序也可以帮助暴露测试状态依赖问题:

  • pytest-reandom-order
  • pytest-randomly

其他一般策略

拆分测试套件

将单个测试套件拆分为两个是常见的,例如单元与集成,并且仅将单元测试套件用作CI门。这也有助于保持构建时间的可管理性,因为高级别测试往往更慢。但是,这意味着打破构建的代码可能会合并,因此需要额外的警惕来监视集成测试结果。

失败的视频/截图

对于UI测试,这些对于了解测试失败时UI的状态非常重要。pytest-splinter可以与pytest-bdd这样的插件一起使用,并且可以在测试失败时保存屏幕截图,这有助于隔离原因。

删除或重写测试#

如果其他测试涵盖了该函数,则可能会删除该测试。如果没有,也许它可以在较低的水平重写,这将消除片状或使其来源更明显。

隔离#

Mark Lapierre在2018年的一篇文章中讨论了[隔离测试的优缺点]。

在失败时重新运行的CI工具

Azure管道(Azure云CI / CD工具,以前称为Visual Studio Team Services或VSTS)具有[识别片状测试和重新运行失败测试的函数。

相关研究

这个列表比较简短,请提交问题或拉取请求以扩展它!

  • Gao,Zebao,Yalan Liang,Myra B. Cohen,Atif M. Memon和Zhen Wang。“使系统用户交互式测试可重复:何时以及我们应该控制什么?”在软件工程(ICSE),2015 IEEE / ACM第37届IEEE国际会议上,第一卷。1,pp.55-65。IEEE,2015年PDF
  • Palomba,Fabio和Andy Zaidman。“测试气味的重构是否会导致固定片状测试?”在软件维护和演进(ICSME),2017 IEEE国际会议上,第1-12页。IEEE,2017.Google[Drive中的PDF
  • Bell,Jonathan,Owolabi Legunsen,Michael Hilton,Lamyaa Eloussi,Tifany Yung和Darko Marinov。“DeFlaker:自动检测片状测试。”在2018年国际软件工程会议论文集中。2018.[PDF

相关资源

  • Eradicating Non-Determinism in Tests by Martin Fowler, 2011
  • No more flaky tests on the Go team by Pavan Sudarshan, 2012
  • The Build That Cried Broken: Building Trust in your Continuous Integration Tests talk (video) by Angie Jones at SeleniumConf Austin 2017
    Test and Code Podcast: Flaky Tests and How to Deal with Them by Brian Okken and Anthony Shaw, 2018
  • Microsoft:
    • How we approach testing VSTS to enable continuous delivery by Brian Harry MS, 2017
    • Eliminating Flaky Tests blog and talk (video) by Munil Shah, 2017
  • Google:
    • Flaky Tests at Google and How We Mitigate Them by John Micco, 2016
    • Where do Google’s flaky tests come from? by Jeff Listfield, 2017

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

猜你喜欢

转载自blog.csdn.net/m0_59868866/article/details/129805082