我有一组用于运行测试套件的 ant 任务,有时其中一个测试会冻结,我的整个测试套件会挂起。我添加了一个关闭处理程序,所以当我点击Ctrl+ Cant 时,它会优雅地关闭并给我一个报告,最终测试标记为未运行。(这很重要,因为这些是集成测试,可以运行数小时)这很好用,除了在没有调用我的关闭挂钩的 Windows 上。有没有办法让蚂蚁响应任何类型的输入并优雅地关闭?
问问题
1162 次
1 回答
2
看来这是一个长期存在的已知问题。
问题在于,在 Windows 上,正如您所观察到的,Ant Ctrl+C没有传播到子 VM。您可能会考虑的事项:
- 将测试分解成更小的部分,并使用 a
timeout
杀死任何挂起的东西。这会将丢失的数据限制为挂起的一个测试。 - 在您的测试运行中,添加一个等待关闭“信号”(可能存在标志文件)的“侦听器”线程,如果检测到挂起,则根据来自控制台的命令安排 Ant 设置该信号。
这看起来很复杂,但可能值得一试。您需要结合 Antparallel
和input
任务在一个线程中运行测试,并在第二个线程中等待来自控制台的输入。选择中止时,写了信号文件,将在“侦听器”测试运行中检测到这一点,从而导致其终止。任何其他输入都会导致运行的干净终止。这样做的问题是,如果测试成功完成,Ant 会等待用户输入,但您可以为此设置一个整体超时。(我没有给出测试运行代码如何检测信号文件的示例。)
伪蚂蚁:
<property name="signal.abort" value="stop.txt" />
<target name="runner">
<delete file="${signal.abort}" />
<parallel timeout="86400000">
<sequential>
<!-- run tests here -->
</sequential>
<sequential>
<input validargs="y,n"
message="Abort the test (y/n)?"
addproperty="abort.test" />
<condition property="do.abort">
<equals arg1="y" arg2="${abort.test}"/>
</condition>
<ant target="terminator" />
</sequential>
</parallel>
</target>
<target name="terminator" if="do.abort">
<echo message="abort" file="${signal.abort}" />
</target>
于 2010-12-03T00:48:39.267 回答