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[][] {{}}; } 

您的文档中应该只有一列。