TestNG超时示例

时间:2020-02-23 14:41:57  来源:igfitidea点击:

我们可以为我们的TestNG测试指定超时。
这可以在测试类中通过设置@Test注解的timeTime属性来完成。

如果测试方法未在指定的超时时间内完成,则会抛出org.testng.internal.thread.ThreadTimeoutException,并将方法标记为失败。

TestNG超时@Test示例

这是一个简单的类,其中为测试方法指定了超时。

package com.theitroad.timeout;

import org.testng.annotations.Test;

public class TimeoutExample {

	@Test(timeOut = 300)
	public void foo() throws InterruptedException {
		Thread.sleep(200);
		System.out.println("foo method executed");
	}

	@Test(timeOut = 300)
	public void bar() throws InterruptedException {
		Thread.sleep(400);
		System.out.println("bar method executed");
	}
}

当我们执行以上类时,我们得到以下输出。

[RemoteTestNG] detected TestNG version 6.14.3
foo method executed
PASSED: foo
FAILED: bar
org.testng.internal.thread.ThreadTimeoutException: Method com.theitroad.timeout.TimeoutExample.bar() didn't finish within the time-out 300

TestNG XML超时示例

我们还可以在套件级别和测试级别中在XML套件中指定超时值。
如果我们在两个地方都指定了超时,那么将在执行测试方法时考虑最小值。

让我们看一个简单的TestNG XML套件示例。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="TestNGXMLTest Test Suite" time-out="500">
	<test name="TestNGXMLTest Test 1" verbose="2" time-out="300">
		<classes>
			<class name="com.theitroad.timeout.TimeoutExample" 
		</classes>
	</test>
</suite>

请注意,套件级别超时为500 ms,而测试级别超时为300 ms。
执行后,我们得到以下输出。

foo method executed
PASSED: foo
FAILED: bar
org.testng.internal.thread.ThreadTimeoutException: Method com.theitroad.timeout.TimeoutExample.bar() didn't finish within the time-out 300

将套件级别超时更改为300 ms,将测试级别超时更改为500 ms。
我们仍将获得与上述相同的异常,这意味着正在考虑执行超时的最小值。