2017-08-29 4 views
0

J'ai créé une classe pour lire les valeurs d'Excel dans un paquet et il y a une classe de plus pour vérifier la connexion qui est dans une classe différente sous la forme de test. Mon ReadExcelFile.java est package uat;Comment donner une valeur dynamique au chemin dans testng.xml

public class ReadExcelFile extends BeforeAfterSuite{ 

    @Test 
    @Parameters("filename") 
    public void readXLSXFile(String fileName) { 
     InputStream XlsxFileToRead = null; 
     XSSFWorkbook workbook = null; 
     try { 
      XlsxFileToRead = new FileInputStream(fileName); 

      //Getting the workbook instance for xlsx file 
      workbook = new XSSFWorkbook(XlsxFileToRead); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     //getting the first sheet from the workbook using sheet name. 
     // We can also pass the index of the sheet which starts from '0'. 
     XSSFSheet sheet = workbook.getSheet("Sheet1"); 
     XSSFRow row; 
     XSSFCell cell; 

     //Iterating all the rows in the sheet 
     Iterator rows = sheet.rowIterator(); 

     while (rows.hasNext()) { 
      row = (XSSFRow) rows.next(); 

      //Iterating all the cells of the current row 
      Iterator cells = row.cellIterator(); 

      while (cells.hasNext()) { 
       cell = (XSSFCell) cells.next(); 

       if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) { 
        System.out.print(cell.getStringCellValue() + " "); 
       } else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) { 
        System.out.print(cell.getNumericCellValue() + " "); 
       } else if (cell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) { 
        System.out.print(cell.getBooleanCellValue() + " "); 

       } 
      } 
      System.out.println(); 
      try { 
       XlsxFileToRead.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 



} 

et testng Je veux passer le paramètre comme nom de fichier avec le chemin, mais est Hardcoded au lieu que je veux envoyer valeur dynamique parce que l'emplacement je compte plus tard sur le mouvement est en chemin partagé.

Répondre

1

Voilà comment vous le faites

  • Retirez la dépendance à l'égard @Parameters
  • Effet de levier un argument JVM dire filename pour éventuellement accepter l'emplacement réel et si non fourni définir une valeur par défaut pour l'argument JVM.

Votre code peut ressembler à ceci

@Test 
public void readXLSXFile() { 
    //To provide a different value for the excel sheet, use the JVM argument: -Dfilename 
    //For e.g., -Dfilename=src/test/resources/anotherdata.xls 
    //If this JVM argument is not provided, 
    //then the file name is defaulted to src/test/resources/data.xls 
    String fileName = System.getProperty("filename", "src/test/resources/data.xls"); 
    InputStream XlsxFileToRead = null; 
    XSSFWorkbook workbook = null; 
    //Rest of the code goes here 
}