我希望我的测试重试5次且不超过x分钟。在最后一次调用之后,它将在@Aftermethod中调用mergeReport方法。这是我的示例代码:
@Test(priority = 1, invocationCount = 5, invocationTimeOut = 6000, expectedExceptions = ThreadTimeoutException.class)
public void test() throws Exception {
while (true) {
Thread.sleep(1000);
}
}
@AfterMethod(lastTimeOnly = true, alwaysRun = true)
public void mergeReport(ITestResult result) throws Exception {
System.out.println("Report");
}
测试结果为空。但是,当我将invocationCount更改为2时,测试结果将是:
Report
我在互联网上搜索并发现了与2014年类似的问题,但仍然没有答案:https://github.com/cbeust/testng/issues/325
有人遇到过这个问题吗?
最佳答案
您是否尝试过使用timeOut而不是invocationTimeout?
@Test(priority = 1, invocationCount = 5, invocationTimeout= 20000, expectedExceptions = ThreadTimeoutException.class)
public void test() throws Exception {
while (true) {
Thread.sleep(1000);
}
}
从testng doc:
invocationTimeOut->此测试的最大毫秒数
应该占用所有调用计数的累积时间。这个
如果未指定invocationCount,则将忽略该属性。
timeOut->此测试应花费的最大毫秒数。
我认为您超时之后想要您想要的东西!
再说一次,您在解密时提到要运行X分钟。关键字是“累计”。顺便说一句,6000毫秒是6秒,所以例如6分钟需要360000(很傻,我知道,但是也许这就是为什么你没有得到想要的效果)。
因此,我的猜测是您设置时,程序会生成“报告”
调用2;仅仅是因为它有足够的时间来完成(即
执行2次调用,如果您愿意在6次中调用两次,则调用两次
秒余量)。当您将其设置为5时,它还不够
时间完成! :)
为了确定是尝试使用timeOut参数还是使用invocationTimeOut参数,然后将其设置为更高的值,以便测试可以在所需的时间范围内完成。从成功的示例设置来看,invocationTimeOut = 20000应该足够了;)
祝你好运!