我关注@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
。我希望在invocationCount
方法中使用@Test
会有所帮助,但这是错误的。是否有任何解决方案只调用@DataProvider
一次,无论提供者返回的对象数量如何,而不更改它的来源?
答案 0 :(得分:0)
AFAIK您只能在数据提供者方面处理此问题。
@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; }
}
答案 1 :(得分:0)
使您的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) {
....
}