如何使 TestNG @DataProvider returns 几个对象 returns 只有一个?

How to make TestNG @DataProvider which returns several objects returns only one?

我关注@DataProvider:

@DataProvider(name = "CredentialsProvider", parallel = true)
public static Object[][] credentialsProvider() {

    ...

    for (int i = 0; i < login.size(); i++) {
        credentials[i] = new Object[] {login.get(i)[0], password.get(i)[0]};
    }
    return credentials;
}

它用于生成测试凭据,在并行模式下 运行:

@Test(dataProvider = "CredentialsProvider")
public void Login (String login, String password)

但有时我想在只有单个 运行 的测试中使用相同的 @DataProvider。我预计在 @Test 方法中使用 invocationCount 会有所帮助,但我错了。有没有任何解决方案可以只调用一次 @DataProvider 而不管提供者返回的对象数量而不改变它的来源?

据我所知,您只能在数据提供者端处理此问题。

@DataProvider(name = "CredentialsProvider", parallel = true)
public static Object[][] credentialsProvider(Method method) { ... }

@DataProvider(name = "CredentialsProvider", parallel = true)
public static Object[][] credentialsProvider(ITestContext context) { ... }

在这两种情况下,您都可以从使用数据提供程序的测试用例的上下文中获取信息。在第一种情况下,例如 method.getName(); 为您提供了 @Test 方法的名称。在第二种情况下,context.getName(); 为您提供测试套件中的测试用例 (<test name="TestName">) 的名称。

我的意思是这样的:

for (int i = 0; i < login.size(); i++) {
    credentials[i] = new Object[] {login.get(i)[0], password.get(i)[0]};
    if(i > MAX_COUNT && "EXPECTED_TEST_NAME".equals(context.getName())) { break; }
}

让您的 DataProvider 接受 Method 类型的参数,并编写您自己的自定义注释来处理此问题。类似于:

@DataProvider(name = "CredentialsProvider", parallel = true)
public static Object[][] credentialsProvider(Method method) {
    //code to extract custom annotation value
    ....
}

@Test(dataProvider = "CredentialsProvider")
@RunCount(1)
public void test(String login, String password) {
....
}