如何优雅地停止Python单元测试?

3
我正在使用Python的unittest框架来测试外部设备。在这种特定的用例中,我实际上想让Python进行一项耐久性测试,需要几天时间。(一个测试只需要几分钟,但会经常重复。)
在这种情况下,我希望能够优雅地停止测试,并在以后恢复或重新启动测试。我可以接受以后重新启动测试,但现在我没有任何优雅停止的手段。
优雅地停止指的是:按下Ctrl-C后,最后一个测试被完成并返回结果。
有没有内置的方法来实现这一点?如果没有,我该如何实现?

是否只有一个长时间运行且可能被中断的 testFoo() 方法?还是您需要能够中断任何测试? - Brian Cain
2
@delnan,我倾向于同意。但是,公平地说,可以利用unittest进行除单元测试以外的其他事情(只要您认识到unittest仅设计用于这些用例)。例如,您可能不得不承认测试无法优雅地停止。 :/ - Brian Cain
@delnan,基本上Brian Cain已经解释过了。unittest框架是一个很棒的框架,因此在许多应用程序中都非常有用。 - Martin Schulze
2个回答

4

请查看unittest 命令行文档

在测试运行期间按Control-C会等待当前测试结束,然后报告到目前为止的所有结果。第二次按Control-C会引发通常的KeyboardInterrupt异常。

因此,您可以捕获KeyboardInterrupt异常,在已报告到目前为止的结果后将下一个测试放入睡眠循环中。 睡眠循环可以等待进一步的按键来中止整个测试或继续进行。


我只想补充一下,这个解决方案(以及@Martin的)自Python 2.7版本以来就可用。 - Alois Mahdal

3
我通过仔细查看unittest文档找到了解决方案: 调用以下方法:

unittest.installHandler()

安装了一个Ctrl-C的信号处理程序,并且所有执行以下操作的结果:

unittest.registerResult(result)

在出现 Ctrl-C 的情况下,程序将优雅地退出。这正是我所需要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接