TestNG 之 超时测试教程

在运行测试时,某些情况下可能会卡住某些测试,或者可能花费比预期更长的时间。在这种情况下,您可能需要将所述测试用例标记为失败,然后继续。在本教程中,我们将学习将TestNG测试配置为在某些配置的持续时间超时

TestNG允许用户配置一个时间段来等待测试完全执行。超时可以通过两种方式配置:

  • 在套件级别:这将适用于上述TestNG测试套件中的所有测试
  • 在每个测试方法级别:这将适用于所述测试方法,并且如果在套件级别配置,则将覆盖时间段

要指定超时持续时间,请使用注解的“ timeOut ”属性@Test

@Test(timeOut = 500)

让我们创建一个示例测试,并了解TimeNG在TestNG中的工作方式。

套件级别的超时测试示例

在下面的测试中,我们有两种测试方法,即timeTestOne()timeTestTwo()timeTestOne()完全执行将花费1000毫秒,而完全执行将花费400毫秒timeTestTwo()。我们使用Thread.sleep()方法强制执行时间。

public class TimeoutSuite 
{
	@Test
	public void timeTestOne() throws InterruptedException {
		Thread.sleep(1000);
		System.out.println("Time test method one");
	}

	@Test
	public void timeTestTwo() throws InterruptedException {
		Thread.sleep(400);
		System.out.println("Time test method two");
	}
}

现在,将一个testng.xml文件添加到项目根目录,并将以下代码放入其中。该代码将超时时间定义为500ms。

<suite name="Time test Suite" time-out="500" verbose="1" >
  <test name="Timeout Test" >
    <classes>
      <class name="com.how2codex.test.TimeoutSuite" />
    </classes>
  </test>
</suite>

现在使用进行以上测试testng.xml。以上测试运行的输出如下:

[TestNG] Running: C:\somepath\TestNGExamples\testng.xml

Time test method two

===============================================
Time test Suite
Total tests run: 2, Failures: 1, Skips: 0
===============================================

从测试结果中可以看到,仅timeTestTwo()针对执行,因为执行时间少于testng.xml文件中定义的超时时间。timeTestOne()执行被取消,因为完成时间超过配置的超时时间。

现在,让我们继续学习在测试方法级别设置超时。

方法级别的超时测试示例

如前所述,您也可以在方法级别指定超时。这将使您可以灵活地给每个单独的测试方法特定的运行时间。

public class TimeoutMethod 
{
	@Test(timeOut = 500)
	public void timeTestOne() throws InterruptedException {
		Thread.sleep(1000);
		System.out.println("Time test method one");
	}

	@Test(timeOut = 500)
	public void timeTestTwo() throws InterruptedException {
		Thread.sleep(400);
		System.out.println("Time test method two");
	}
}

以上测试运行的输出如下:

[[TestNG] Running: C:\Users\somepath\testng-customsuite.xml

Time test method two
PASSED: timeTestTwo
FAILED: timeTestOne

org.testng.internal.thread.ThreadTimeoutException: Method org.testng.internal.TestNGMethod.timeTestOne() didn't finish within the time-out 500

===============================================
    Default test
    Tests run: 2, Failures: 1, Skips: 0
===============================================

在上述测试方法中,timeTestOne()由于未在指定的超时时间内未完全执行而导致测试方法失败。

学习愉快!

saigon has written 1440 articles

Leave a Reply