如何在Python unittest tearDown()中停止测试?

时间:2015-04-09 23:43:31

标签: python unit-testing

我使用Python unittest(Python 2.7.8)编写的大量测试作为一个大的TestSuite。其中许多测试都会调用其他程序。有时这些其他程序会转储核心。当他们这样做时,我想发现并确保测试失败。如果转储了一定数量的内核,我想中止整个测试环境并退出而不是继续:我的整个测试套件有> 6000次测试,如果所有内容都倾倒核心,它就没用了(而且很危险:磁盘空间等等) 。)继续。

为了确保我们在每次测试后都能找到coredump(所以我最好了解什么程序/调用转储核心)我决定在tearDown()中寻找核心,我正在成功地做。如果我找到核心,我可以在tearDown()中运行一个断言变量来指定测试失败。

但如果发现内核太多,我无法弄清楚如何完全放弃tearDown()内的所有测试。我甚至尝试运行sys.exit("too many cores"),但是unittest case.py捕获了除tearDown()之外的KeyboardInterrupt引发的每个异常(如果我尝试手动提升,我的脚本会挂起,直到我执行真实^C)。

我考虑过尝试调用stop(),但这是结果的方法,我无法找到从tearDown()(!)中访问结果对象的任何方法

到目前为止,我唯一的选择似乎是调用os._exit()这真的很烦人,因为它可以保留任何报告结果!

Python unittest.TestCase中是否真的没有设施告诉测试环境现在就停止,产生你的结果但是不运行其他任何东西?

1 个答案:

答案 0 :(得分:0)

您可以查看setUp()中已转储的内核数量吗?如果是这样,你可以在事情变得糟糕的时候致电self.skipTest('Too many cores dumped.')

如果您不想在setUp()中查找核心,您可以使用类变量来保存核心转储计数并检查它。