我使用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
中是否真的没有设施告诉测试环境现在就停止,产生你的结果但是不运行其他任何东西?
答案 0 :(得分:0)
您可以查看setUp()
中已转储的内核数量吗?如果是这样,你可以在事情变得糟糕的时候致电self.skipTest('Too many cores dumped.')
。
如果您不想在setUp()
中查找核心,您可以使用类变量来保存核心转储计数并检查它。