我们如何在 class 级别使用 testNG 中的数据提供程序,以便它可以在 class 级别而不是方法级别进行迭代?

How can we use Data Provider in testNG at class level, so it can iteration at class level not on method level?

我的 class 有 20 个测试用例。 我想用 100 个数据集执行此 class。

例如 MyClass1 的 Iteraton1 方法 1 - 数据集 = 用户 1,密码 1 方法 2 - 数据集 = 用户 1,密码 1 . . 方法 20 - 数据集 = 用户 1,密码 1

MyClass 的 Iteraton2 方法 1 - 数据集 = 用户 2,密码 2 方法 2 - 数据集 = 用户 2,密码 2 . . 方法 20 - 数据集 = 用户 2,密码 2

我尝试使用@Factory 和 DataProvider,但它会迭代方法。

import org.testng.annotations.Factory;

public class FactoryClass {
    
    @Factory(dataProvider="dp")
    public Object[] invodeMyTest(String name) {
        Object[] data = new Object[1];
        data[0]= new MyClass1(name);
        //data[1]= new MyClass1("qwer");
        return data;
    }
    
    @DataProvider(name = "dp")
    public static Object[][] dataProvider() throws Exception {
    String[][] names = { {"user1"} , {"user2"} };
    return names;
    }

}

@Test()
public class MyClass1 {
    private String user;

    MyClass1(String user) {
        this.user = user;
    }

    public void f1() {
        System.out.println("Inside f1 - User: " + user + (int) Thread.currentThread().getId());
        System.out.println((int) Thread.currentThread().getId());
    }

    public void f2() {
        System.out.println("Inside f2 - User: " + user + (int) Thread.currentThread().getId());
        System.out.println((int) Thread.currentThread().getId());
    }

    @Test
    public void f3() {
        System.out.println("Inside f2 - User: " + user + (int) Thread.currentThread().getId());
        System.out.println((int) Thread.currentThread().getId());
    }

}

当前执行: f1 f1 f2 f2 f3 f3

要求执行: f1 f2 f3 f1 f2 f3

有人可以帮助我们如何在 class 级别而不是方法级别实现迭代吗?

请执行以下操作:

  1. 为您的测试创建套件 xml 文件 class。
  2. 将属性 group-by-instances="true" 设置为 <test> 级别或 <suite> 级别。