2

在 TestNG 中,我有一个参数化的测试 A,它自动从 a创建n 个dataProvider测试,以及一个测试 B,每次 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 视为以后报告的一个测试。

4

2 回答 2

1

您可以使用 TestNG Factory。例如:

关于工厂方法

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 文档页面中的工厂

于 2016-03-01T16:22:10.147 回答
0

已经提供了很好的答案,如果您只是期待按要求的顺序执行 @Test 方法,那么您可以使用优先级。如果要指定方法之间的依赖关系,则可以使用dependOnMethods。下面是一个简单的例子

  @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(){

}
于 2016-03-01T17:28:51.487 回答