按时间顺序依次运行TestNG测试

时间:2012-05-14 14:32:29

标签: unit-testing junit dao testng

我想要使用TestNG一起运行几个DAO单元测试类,但是TestNG尝试并行运行它们导致一些回滚失败。虽然我想按顺序运行我的单元测试类,但我还希望能够指定TestNG在运行下一个测试之前必须等待的最小时间。这可以实现吗?

P.S。我知道可以告诉TestNG在SingleThread的测试类中运行所有测试,我能够使用组指定方法调用的顺序,所以这可能不是问题。

3 个答案:

答案 0 :(得分:0)

两次测试之间hard dependency怎么样?如果你这样写:

@Test
public void test1() { ... }

@Test(dependsOnMethods = "test1", alwaysRun = true)
public void test2() { ... }

然后test2将始终在 test1之后运行。

不要忘记alwaysRun = true,否则如果test1失败,则会跳过test2

答案 1 :(得分:0)

  1. 如果您不想并行运行类,则需要将套件的parallel属性指定为false。默认情况下,它是错误的。所以我认为默认情况下它应该按顺序运行,除非你对调用测试的方式有所改变。

  2. 为了在类之间添加一点延迟,您可以在使用@AfterClass注释的方法中添加延迟逻辑。 AFAIK testng没有办法在testng xml或命令行中指定它。有一个超时属性,但更多的是超时测试,而不是你想要的。

  3. 为了在测试之间添加延迟,即xml中的测试标记,您可以尝试实现ITestListener - onFinish方法,其中您可以添加延迟代码。它在每<test>之后运行。如果在每个测试用例之后需要延迟,则在IInvokedMethodListener中实现延迟代码 - 在每个测试方法运行后运行的AfterInvocation()。您需要在调用套件时指定侦听器。

    希望有所帮助......

答案 2 :(得分:0)

以下是我在某些测试中使用的内容。

首先,定义如下的实用程序方法:

String input=kb.nextLine();   
if(input.(isInteger method)&&(int)input==otherint)
  do stuff inside here;
else
  do different stuff;

然后,在结束或开始时调用测试方法中的方法。

e.g

// make thread sleep a while, so that reduce effect to subsequence operation if any shared resource,
private void delay(long milliseconds) throws InterruptedException {
    Thread.sleep(milliseconds);
}

private void delay() throws InterruptedException {
    delay(500);
}