我正在使用 python unittest 框架来测试外部设备。在这个特殊的用例中,我实际上希望让 python 做一个需要几天时间的耐力测试。(一次测试只需要几分钟,但会经常重复。)
在这种情况下,我希望能够优雅地停止测试并稍后恢复或重新启动它。我可以忍受稍后重新启动它,但现在我无法优雅地停止。
通过优雅的停止,我设想如下:按下 后Ctrl-C
,最后一次测试完成并返回结果。
有没有内置的方法来实现这一点?如果没有,我如何实现它?
我正在使用 python unittest 框架来测试外部设备。在这个特殊的用例中,我实际上希望让 python 做一个需要几天时间的耐力测试。(一次测试只需要几分钟,但会经常重复。)
在这种情况下,我希望能够优雅地停止测试并稍后恢复或重新启动它。我可以忍受稍后重新启动它,但现在我无法优雅地停止。
通过优雅的停止,我设想如下:按下 后Ctrl-C
,最后一次测试完成并返回结果。
有没有内置的方法来实现这一点?如果没有,我如何实现它?
查看 unittest命令行文档。
测试运行期间的Control-C等待当前测试结束,然后报告到目前为止的所有结果。第二个 control-C 引发正常的 KeyboardInterrupt 异常。
KeyboardInterrupt
因此,您可以在报告到目前为止的结果后捕获异常以将下一个测试放入睡眠循环。然后,睡眠循环可以等待进一步的按键以中止整个测试或继续。
我通过仔细查看 unittest 文档找到了解决方案:通过调用:
unittest.installHandler()
安装了 Ctrl-C 的信号处理程序,并且所有结果:
unittest.registerResult(result)
在 Ctrl-C 的情况下将正常退出。这正是我所需要的。