<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="tests" configfailurepolicy="continue" thread-count = "10" verbose="1">
<parameter name="dev" value="true"></parameter>
<test name ="Chrome" parallel="methods">
<parameter name="myBrowser" value="chrome" />
<classes>
<class name="package.TestClass"></class>
</classes>
</test>
<test name ="Firefox" parallel="methods">
<parameter name="myBrowser" value="firefox" />
<classes>
<class name="package.TestClass"></class>
</classes>
</test>
</suite>
在这个.xml文件中,我有一个名为“dev”的参数设置为true。我试图让我的数据提供者读取此变量并使用不同的Excel表格,如果为真。
@Parameters("dev")
@DataProvider(parallel = true)
public Object[][] testData(String dev) {
String path;
if(dev.equals(true)){
path = System.getProperty("user.dir") + "\\src\\data\\dev-data.xlsx";
}
else{
path = System.getProperty("user.dir") + "\\src\\data\\reg-data.xlsx";
}
ExcelReader reader = new ExcelReader(path);
Object[][] obj = new Object[reader.getSheetRows("url")][reader.getSheetColumns("url")]; //four test, one argument
for(int i = 0; i < reader.getSheetRows("url"); i++){
for(int j = 0; j < reader.getSheetColumns("url"); j++){
obj[i][j] = reader.getCellData("url", j, i);
}
}
return obj;
}
问题是这些方法说我传递的参数数量不正确
@Test (dataProvider="testData")
public void test1(String url)
{}
java.lang.IllegalArgumentException:参数数量错误
答案 0 :(得分:2)
@DataProvider
带注释的数据提供者AFAIK,无法通过@Parameters
注释读取参数。
你应该这样做:
@DataProvider(parallel = true)
public Object[][] testData(ITestContext context) {
//Here We are trying to read the value of
// <parameter name="dev" value="true"/>
//from the suite xml file.
String dev = context.getCurrentXmlTest().getAllParameters().get("dev");
String path;
if (dev.equals("true")) {
path = System.getProperty("user.dir") + "\\src\\data\\dev-data.xlsx";
} else {
path = System.getProperty("user.dir") + "\\src\\data\\reg-data.xlsx";
}
//Rest of the data provider code goes here.
return new Object[][] {{}};
}
答案 1 :(得分:1)
您的文档中只能有一列。