我可能大错特错(如果我错了,我相信其他人会给你一个更好的解决方案);但我认为您无法使用 testNG Guruswamy 实现您所追求的目标。
我刚刚使用此 dataProvider 测试了您的尝试
@DataProvider(name = "login8users")
public Object[][] login8usersForStackOverflow() {
return new Object[][] {
{ "user1@gmail.com", "pass" },
{ "user2@gmail.com", "pass"},
{ "user3@gmail.com", "pass"},
{ "user4@gmail.com", "pass"},
{ "user5@gmail.com", "pass"},
{ "user6@gmail.com", "pass"},
{ "user7@gmail.com", "pass"},
{ "user8@gmail.com", "pass"},
};
}
并且从 XML 文件中传递一个名为 browser 的参数。我注意到,当您在同一 @Test 注释下使用 dataProvider 和参数 ;您是否会收到上面向我们展示的错误,或者 XML 参数将被完全忽略(似乎 dataProvider 取代了它们)。
那么这里是测试方法:
@Test(dataProvider="login8users")
@Parameters({"browser"})
public void login8(String dataProvider1, String dataProvider2) {
System.out.println("Email from data provider is..: "+dataProvider1);
System.out.println("Pass from data provider is..: "+dataProvider2);
}
这是输出:
[TestNG] Running:
C:\projects\test\currentTest.xml
Email from data provider is..: user1@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user2@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user3@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user4@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user5@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user6@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user7@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user8@gmail.com
Pass from data provider is..: pass
===============================================
Regression
Total tests run: 8, Failures: 0, Skips: 0
===============================================
因此您需要寻找替代解决方案。其中之一可能是提前加载参数,(甚至可能在@BeforeClass 中)在测试中将参数作为全局变量传递,以便您可以访问它。所以像这样的解决方案:
public static String globalVarScope;
@BeforeClass
@Parameters({"xmlParam"})
public void initialSetup(String xmlParam) {
System.out.println("Parameter from XML is..: "+xmlParam);
globalVarScope= xmlParam;
}
@Test
public void useMeAnywhere() {
System.out.println("Hey, I passed the param earlier and I can use it anywhere now :) ..: "+globalVarScope);
}
@Test(dataProvider="login8users")
@Parameters({"browser"})
public void login8(String dataProvider1, String dataProvider2) {
System.out.println("Email from data provider is..: "+dataProvider1);
System.out.println("Pass from data provider is..: "+dataProvider2);
}
所以希望现在你可以达到你想要的结果,如果你遇到困难,请告诉我。下面是单独运行参数后的最终输出:
[TestNG] Running:
C:\projects\test\currentTest.xml
Browser is..: ***chrome***
Email from data provider is..: user1@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user2@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user3@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user4@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user5@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user6@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user7@gmail.com
Pass from data provider is..: pass
Email from data provider is..: user8@gmail.com
Pass from data provider is..: pass
===============================================
Regression
Total tests run: 9, Failures: 0, Skips: 0
===============================================
祝你好运!