我想知道是否有办法同时使用@DataProvider
和Paramaters
传递参数。
我尝试过两种选择,但都失败了:
@Parameters("Brand")
@Test(dataProvider="dpCGA", groups={"CGA"})
public void createAccount(String brand) {
setBrand(brand);
}
在上面的例子中,品牌变量被数据提供者覆盖。
@Parameters("Brand")
@Test(dataProvider="dpCGA", groups={"CGA"})
public void createAccount(String brand, String email) {
setBrand(brand);
createAccount(email);
}
测试用例甚至没有运行。
我正在使用TestNG来运行我的测试用例,并希望从XML文件中获取品牌参数。
另外,我有一个Excel文件用于保存电子邮件,并希望使用@DataProvider
获取这些值。
是否可以同时使用这两个标签?如果没有,是否有其他方法可以从XML文件中获取品牌参数?
提前致谢
答案 0 :(得分:2)
@DataProvider是将参数传递给方法的方法之一。您不能同时使用两种方法。
查看您的问题,您只需将品牌添加到DataProvider方法,例如
@DataProvider(name="dpCGA")
public Object[][] data() {
return new Object[][] {
{"brand", "email1"},
{"brand", "email2"}
};
}
并将其传递给方法,
@Test(dataProvider="dpCGA", groups={"CGA"})
public void createAccount(String brand, String email) {
setBrand(brand);
createAccount(email);
}
答案 1 :(得分:1)
根据您的情况,它实际上可能是“可行的”。特别是,如果您只有一个“参数”实例,例如,因为您正在传递环境(开发,测试版...),则可以这样做:
A value of type 'string' cannot be used as a default parameter because there are no standard conversions to type 'char'
BeforeSuite将使用参数执行,您可以在由数据提供者参数化的测试中访问它们。
它可能与多个参数或@BeforeEach一起使用,但我没有尝试过。
答案 2 :(得分:0)
您不能同时使用@DataProvider和@Parameters。通过@DataProvider传递所有参数。
答案 3 :(得分:0)
正如其他人已经指出的那样,接收DataProvider
结果以及套件参数是不可能的。这个答案通过逐步完成代码证明了这一点:
Invoker.invokeTestMethods()
会致电Parameters.handleParameters()
。DataProvider
DataProvider
xmlParameters
虽然DataProvider
可以通过ITestContext
接收上下文,但这只会使套件(XML)中的参数可用,而不是通过系统属性指定。