将dataprovider参数作为数组存储在testng的test方法中

时间:2015-07-27 03:52:24

标签: java selenium-webdriver testng

我正在将excel数据写入数组并通过@dataprovider返回相同的数据。代码看起来像这样 -

for(i=0;i<numrow+1;i++){
      for (j=0;j<numcol;j++ ){
          if(xlsh.getRow(i).getCell(j)!=null){
              xldata[i][j]=xlsh.getRow(i).getCell(j).toString();
          }
          else{
              xldata[i][j]="";
          }
      }
}

return xldata;

我正在阅读的excel有大约40列,我想在@test方法中将相同的内容写入数组。所以我尝试在@test方法中使用下面的代码来读取@dataprovider提供的数据

@Test(dataProvider = "name")
public void mymethod(String[] fromxl) {
 //code
}

但不知怎的,数组不被识别为数组,我收到错误说 - dataprovider有40个参数,但测试方法只接受1。 现在如果我在我的测试方法中将数组更改为40个不同的参数(下面的示例代码),它似乎正在工作。但我不想这样做,因为这很麻烦。我无法使数组在我的测试方法中工作的任何原因?感谢关于此

的任何帮助/指示
@Test(dataProvider = "name")
public void mymethod(String data1, .. , String data40) {
 //code
}

4 个答案:

答案 0 :(得分:0)

要将数组作为参数传递给测试,您只需将其包装在Object[][]使用的DataProvider中。这样的事情应该做你想做的事情:

private String[] buildSingleDimensionArray() {
    String[] result = new String[40];
    for (int i = 0; i < result.length; i++) {
        result[i] = "element" + i;
    }
    return result;
}

@DataProvider(name = "arrayBuilder")
public Object[][] createData() {
    return new Object[][] { { buildSingleDimensionArray() }, };

}

@Test(dataProvider = "arrayBuilder")
public void theTest(String[] inputArray) {
    for (int i = 0; i < inputArray.length; i++) {
        System.out.println(inputArray[i]);
    }
}

答案 1 :(得分:0)

您的测试只需要一个参数 - 字符串数组。所以你的xldata应该以字符串数组的形式返回一个参数。

for(i=0;i<numrow+1;i++){

      for (j=0;j<numcol;j++ ){
          if(xlsh.getRow(i).getCell(j)!=null){
          //Build fresh array here instead of writing directly to return
               freshArr[j] = ...
          }
          else{
              freshArr[0] = "" ;
          }
//once all columns are read, set that to the return array
          xldata[i][0] = freshArr;
      }
}

答案 2 :(得分:0)

这对我有用 -

for(i=0;i<numrow;i++){
  String[] newArray=new String[numcol]; 
  for (j=0;j<numcol;j++ ){
      if(xlsh.getRow(i).getCell(j)!=null){
          XSSFCell cellval=xlsh.getRow(i).getCell(j);
          cellval.setCellType(Cell.CELL_TYPE_STRING);
          newArray[j] = cellval.toString();
      }
      else{
          newArray[j] = "";
      }
  }
  xldata[i][0] = newArray;  
}
return xldata;

答案 3 :(得分:0)

好吧,如果您仍在寻找答案,那么这就是解决方案: 首先不确定您的Excel数据电子表格是什么样的,但您的for循环应该说明这样......

for(i=0;i<numrow+1;i++){
      for (j=0;j<numcol;j++ ){
          if(xlsh.getRow(i).getCell(j)!=null){
              xldata[I][j]=xlsh.getRow(i).getCell(j).getStringCellValue();
      }
      else{
          xldata[i][j]="";
      }
  }
}

return xldata;

当你有xldata [I] [j]时,你需要从这个方法返回一个二维对象......比如&#34;返回xldata&#34;并且您的方法应该具有String [] []和返回类型。 例如:像这样的事情

public String[][] readExcelData(String filename, String sheetName, String tableName){
...
...
...
for(i=0;i<numrow+1;i++){
      for (j=0;j<numcol;j++ ){
      if(xlsh.getRow(i).getCell(j)!=null){
          xldata[i][j]=xlsh.getRow(i).getCell(j).getStringCellValue();
      }
      else{
          xldata[i][j]="";
      }
  }
}

return xldata;

}

您的测试方法也应该期望相同的行和列数据......这样的事情取决于您从电子表格中获得的数据,如果可能是2个参数或更多...

Ex:
@Test(dataProvider = "name")
public void test1(String row, String col){
..
}

尝试这样的实现并希望它有效!