在TestNG中,我有一个参数化的 Test A ,可以自动从dataProvider
和测试B 创建 n 测试应该在每次A中的测试结束时执行,因为我想利用在A中获得的结果。换句话说,我想知道是否可以有以下内容:
给定参数化@Test A(dataProvider = "inputList")
和@Test B
,TestNG将创建以下单元测试并按以下顺序执行:
Test A1
Test B1 (Based on A1 result)
Test A2
Test B2 (Based on B2 result)
...
Test An
Test Bn (Based on An result)
是否可以使用任何现有的TestNG标签?我知道我可以将@Test B
视为@After
但是对于TestNG来说,这不是一个可以理解的测试,我需要将测试B视为后续报告的测试。
答案 0 :(得分:1)
您可以使用TestNG Factory
。 e.g:
关于工厂方法
public class TestClass {
private final int p1;
private final int p2;
public TestClass(int p1, int p2) {
this.p1 = p1;
this.p2 = p2;
}
@Factory(dataProvider = "inputList")
public static Object[] createTestClasses() {
return new Object[]{
new TestClass(1, 1),
new TestClass(1, 0),
new TestClass(1, -1),
};
}
@Test
public void A() {
// test `A` code, stores result in some class member field
}
@Test(dependsOnMethods = {"A"})
public void B() {
// test `B` code, uses stored result from test `A`
}
}
在构造函数
上public class TestClass {
private final int p1;
private final int p2;
@Factory(dataProvider = "inputList")
public TestClass(int p1, int p2) {
this.p1 = p1;
this.p2 = p2;
}
@DataProvider
public static Object[][] inputList() {
return new Object[][]{
{1, 1},
{1, 0},
{1, -1}
};
}
@Test
public void A() {
// test `A` code, stores result in some class member field
}
@Test(dependsOnMethods = {"A"})
public void B() {
// test `B` code, uses stored result from test `A`
}
}
请参阅TestNG文档页面中的Factories。
答案 1 :(得分:0)
已经提供了很好的答案,如果您只是期望按要求的顺序执行@Test方法,那么您可以使用优先级。如果要指定方法之间的依赖关系,则可以使用dependsOnMethods。下面是一个简单的例子
@Test(priority=1)
public void testA1(){
}
@Test(priority=2,dependsOnMethods="testA1")
public void testB1(){
}
@Test(priority=3)
public void testA2(){
}
@Test(priority=4,dependsOnMethods="testA2")
public void testB2(){
}