TestNG使用DataProviders错误的参数数目
<?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。 我试图让我的数据提供者读取这个variables,并使用不同的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:参数个数错误
@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[][] {{}}; }
您的文档中应该只有一列。