我有几个 DAO 单元测试类,我想使用 TestNG 一起运行,但是 TestNG 尝试并行运行它们,这会导致一些回滚失败。虽然我想按顺序运行我的单元测试类,但我还希望能够指定TestNG 在运行下一个测试之前必须等待的最短时间。这是可以实现的吗?
PS我知道可以告诉TestNG在SingleThread的测试类中运行所有测试,无论如何我都可以使用组指定方法调用的顺序,所以这可能不是问题。
我有几个 DAO 单元测试类,我想使用 TestNG 一起运行,但是 TestNG 尝试并行运行它们,这会导致一些回滚失败。虽然我想按顺序运行我的单元测试类,但我还希望能够指定TestNG 在运行下一个测试之前必须等待的最短时间。这是可以实现的吗?
PS我知道可以告诉TestNG在SingleThread的测试类中运行所有测试,无论如何我都可以使用组指定方法调用的顺序,所以这可能不是问题。
两个测试之间的硬依赖又如何呢?如果你这样写:
@Test
public void test1() { ... }
@Test(dependsOnMethods = "test1", alwaysRun = true)
public void test2() { ... }
thentest2
将始终在之后 test1
运行。
不要忘记alwaysRun = true
,否则如果test1
失败,test2
将被跳过!
如果您不想并行运行类,则需要将套件的并行属性指定为 false。默认情况下,它是错误的。所以我认为它应该默认按顺序运行,除非你在调用测试的方式上有一些变化。
为了在你的类之间添加一点延迟,你可以在一个用 @AfterClass 注释的方法中添加你的延迟逻辑。AFAIK testng 没有办法在 testng xml 或命令行中指定它。有一个 timeout 属性,但更多的是用于超时测试,可能不是您想要的。
要在测试之间添加延迟,即 xml 中的测试标签,那么您可以尝试实现 ITestListener - onFinish 方法,您可以在其中添加延迟代码。它在每个<test>
. 如果在每个测试用例之后都需要延迟,则在 IInvokedMethodListener - AfterInvocation() 中实现延迟代码,该代码在每个测试方法运行后运行。然后,您需要在调用套件时指定侦听器。
希望能帮助到你..
以下是我在一些测试中使用的。
首先,定义这样的实用方法:
// 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);
}
然后,在测试方法的末尾或开头调用该方法。
例如
@Test
public void testCopyViaTransfer() throws IOException, InterruptedException {
copyViaTransfer(new File(sourcePath), new File(targetPath));
delay();
}