如何使 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) {
....
}
我关注@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) {
....
}