2018年8月28日,星期二

使用Excel的TestNG数据提供程序

当我们要创建遵循数据驱动的方法并创建框架时,最好的方法是使用Excel存储我们的数据,并且可以使用在上一篇文章中看到的数据提供程序将数据作为参数传递。

逐步过程以使用TestNg数据提供程序实施Excel。

步骤1:使用TestNG Data Provider创建Login Application的测试用例。

第2步: 创建一个测试数据表。

步骤3:建立要开启的功能&从Excel读取数据

步骤4:创建一个TestNg测试用例,以使用数据提供者从Excel接受数据。

步骤5:针对测试数据文件中的测试用例名称运行测试。

使用Apache POI库从Excel工作表中读取数据-

下面是我们的代码,用于打开Excel工作表并在Selenium测试脚本中从中读取数据。为此,我们使用Apache POI库,该库允许我们使用Java读取,创建和编辑Microsoft Office文档。我们将用于从Excel工作表读取数据的类和方法位于org.apache.poi.hssf.usermodel中。

1.下载Apache POI  from the link http://poi.apache.org/ 并将其添加到您的项目构建路径中。

2.使用以下代码从Excel文件读取数据。


package test;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtils {

 private static XSSFSheet ExcelWSheet;

 private static XSSFWorkbook ExcelWBook;

 private static XSSFCell Cell;

 private static XSSFRow Row;

 public static void setExcelFile(String Path,String SheetName) throws Exception {
   
     try {

    // Open the Excel file

    FileInputStream ExcelFile = new FileInputStream(Path);

    // Access the required test data sheet

    ExcelWBook = new XSSFWorkbook(ExcelFile);

    ExcelWSheet = ExcelWBook.getSheet(SheetName);

    } catch (Exception e){

     throw (e);

    }

  }
 public static Object[][] getTableArray(String FilePath, String SheetName) throws Exception {

  String[][] tabArray = null;

  try {

   FileInputStream ExcelFile = new FileInputStream(FilePath);

   // Access the required test data sheet

   ExcelWBook = new XSSFWorkbook(ExcelFile);

   ExcelWSheet = ExcelWBook.getSheet(SheetName);

   int startRow = 1;

   int startCol = 1;

   int ci, cj;

   int totalRows = ExcelWSheet.getLastRowNum();

   // you can write a function as well to get Column count

   int totalCols = 2;

   tabArray = new String[totalRows][totalCols];

   ci = 0;

   for (int i = startRow; i <= totalRows; i++, ci++) {

    cj = 0;

    for (int j = startCol; j <= totalCols; j++, cj++) {

     tabArray[ci][cj] = getCellData(i, j);

     System.out.println(tabArray[ci][cj]);

    }

   }

  }

  catch (FileNotFoundException e) {

   System.out.println("Could not read the Excel sheet");

   e.printStackTrace();

  }

  catch (IOException e) {

   System.out.println("Could not read the Excel sheet");

   e.printStackTrace();

  }

  return (tabArray);

 }

 public static String getCellData(int RowNum, int ColNum) throws Exception {
 
   try{
 
    Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum);
 
    int dataType = Cell.getCellType();
 
    if  (dataType == 3) {
 
     return "";
 
    }else{
 
     String CellData = Cell.getStringCellValue();
 
     return CellData;
    }
 
    }catch (Exception e){
 
    System.out.println(e.getMessage());
 
    throw (e);
 
    }
 
   
 
  }
 public static String getTestCaseName(String sTestCase)throws Exception{
   
  String value = sTestCase;

  try{

   int posi = value.indexOf("@");

   value = value.substring(0, posi);

   posi = value.lastIndexOf("."); 

   value = value.substring(posi + 1);

   return value;

    }catch (Exception e){

   throw (e);

     }

  }

 public static int getRowContains(String sTestCaseName, int colNum) throws Exception{

  int i;

  try {

   int rowCount = ExcelUtils.getRowUsed();

   for ( i=0 ; i<rowCount; i++){

    if  (ExcelUtils.getCellData(i,colNum).equalsIgnoreCase(sTestCaseName)){

     break;

    }

   }

   return i;

    }catch (Exception e){

   throw(e);

   }

  }

 public static int getRowUsed() throws Exception {

   try{

    int RowCount = ExcelWSheet.getLastRowNum();

    return RowCount;

   }catch (Exception e){

    System.out.println(e.getMessage());

    throw (e);

   }

  }
 public static Object[][] getTableArray(String FilePath, String SheetName, int iTestCaseRow)    throws Exception
  
 {   

    String[][] tabArray = null;

    try{

     FileInputStream ExcelFile = new FileInputStream(FilePath);

     // Access the required test data sheet

     ExcelWBook = new XSSFWorkbook(ExcelFile);

     ExcelWSheet = ExcelWBook.getSheet(SheetName);

     int startCol = 1;

     int ci=0,cj=0;

     int totalRows = 1;

     int totalCols = 1;

     tabArray=new String[totalRows][totalCols];

      for (int j=startCol;j<=totalCols;j++, cj++)

      {

       tabArray[ci][cj]=getCellData(iTestCaseRow,j);

       System.out.println(tabArray[ci][cj]);

      }

  }

  catch (FileNotFoundException e)

  {

   System.out.println("Could not read the Excel sheet");

   e.printStackTrace();

  }

  catch (IOException e)

  {

   System.out.println("Could not read the Excel sheet");

   e.printStackTrace();

  }

  return(tabArray);

 }
    }

 3.使用要传递给测试用例的数据作为参数创建excelfile。


4.使用Excel中的参数更新测试用例。


package test;


import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
 
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
 
import org.testng.annotations.Test;
 
import org.testng.annotations.BeforeMethod;
 
import org.testng.annotations.AfterMethod;
 
import org.testng.annotations.DataProvider;
 

 
public class TestCaseExcelData {
 
 private String sTestCaseName;
 
 private int iTestCaseRow;
 
 WebDriver driver;
 
  @BeforeMethod
 
  public void beforeMethod() throws Exception {
 
   System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\chromedriver_win32\\chromedriver.exe");
  
   driver=new ChromeDriver();
      
      driver.get("http://www.yubo666.com");
 
      Thread.sleep(5000);
  } 
 
  @Test(dataProvider = "search")
  
  public void 测试(String searchtext) throws Exception {
 
   
      driver.findElement(By.xpath("*//input[@class='search-field']")).sendKeys(searchtext);
      
      driver.findElement(By.xpath("*//input[@class='search-submit']")).click();
 
      
  }
 
  @AfterMethod
 
  public void afterMethod() {
 
    driver.close();
 
  }
 
  @DataProvider
 
  public Object[][] search() throws Exception{
 
     // Setting up the Test Data Excel file
 
   ExcelUtils.setExcelFile("C:\\Users\\manojjai\\Documents\\dataprovider.xlsx","Sheet1");
 
   sTestCaseName = this.toString();
 
    // From above method we get long test case name including package and class name etc.
 
    // The below method will refine your test case name, exactly the name use have used
 
    sTestCaseName = ExcelUtils.getTestCaseName(this.toString());
 
     // Fetching the Test Case row number from the Test Data Sheet
 
     // Getting the Test Case name to get the TestCase row from the Test Data Excel sheet
 
   iTestCaseRow = ExcelUtils.getRowContains(sTestCaseName,0);
 
     Object[][] testObjArray = ExcelUtils.getTableArray("C:\\Users\\manojjai\\Documents\\dataprovider.xlsx","Sheet1",iTestCaseRow);
 
      return (测试ObjArray);
 
  }
 
}

20条评论:

  1. 非常感谢您提供此信息。我喜欢阅读您的博客。继续努力吧
    顺便说一句,在我的博客上访问新帖子 IIT JEE准备的最佳书籍 获得有关学术工程领域和竞争激烈的工程考试的免费电子书。
    问候,
    萨钦

    回复删除
  2. myTectra放置 门户网站是一个基于Web的门户网站,可带来潜在的雇主和 myTectra 通用平台上的求职者候选人

    回复删除
  3. 我真的很喜欢阅读您的文章。我想告诉您,您中有像我这样的人,对您的工作表示赞赏。我绝对想读这篇很棒的文章。

    批准
    tutuapp APK iOS

    回复删除
  4. 得到 班加罗尔的精选硒培训 从TIB学院获得100%的安置协助

    回复删除
  5. 我读了许多有关Excel和其他课程的文章,但我对您的写作方式以及如何表达文字印象深刻。’对我们真的很有帮助感谢您的分享,继续写作
    德里高级Excel培训
    诺伊达的高级Excel培训
    古尔冈高级进阶Excel训练

    回复删除
  6. 有很多作家,但您的写作方式是如此出色且与众不同。它’对我们真的很有帮助,知识渊博,非常感谢分享...
    德里的高级Excel培训
    诺伊达的高级Excel培训
    古尔冈高级Excel培训

    回复删除
  7. 有很多作家,但您的写作方式是如此出色且与众不同。它’对我们真的很有帮助,知识渊博,非常感谢分享...
    德里的高级Excel培训
    诺伊达的高级Excel培训
    古尔冈高级Excel培训

    回复删除
  8. 谢谢(你的)信息。它非常有用。
    我在这里有一个问题,因为我看到您在excel中将类名用作测试用例名。
    sTestCaseName = this.toString();

    但是我想使用实际的测试用例方法名称(例如:"test"是示例中的测试用例名称。)我可能在一个类中有20个测试用例,每个测试用例都有不同的数据集。如果您对此有答案,请告诉我

    回复删除
  9. 感谢您抽出宝贵时间与我们分享此信息。直截了当,直截了当,这确实是非常有益和有见地的。继续努力吧
    Ai &钦奈的人工智能课程
    钦奈PHP培训
    钦奈的道德黑客课程 钦奈的蓝色棱镜培训
    钦奈的UiPath培训

    回复删除
  10. 人工智能(AI)的发展推动了更多的编程架构师,信息科学家和不同的专家来研究某种职业在机器学习中的可行性。尽管如此,一些新手通常会在假设上关注很多,而在常识性应用上则不足。 最后一年的机器学习项目 如果您成功了,则必须在不久的将来开始构建机器学习项目。

    项目可帮助您快速提高应用的ML技能,同时使您能够研究一个有趣的观点。此外,您可以将项目包括在投资组合中,从而更轻松地获得职业,发现出色的职业空缺,以及 钦奈的最后一年项目中心 甚至安排更大的赔偿。


    数据分析是对原始数据进行剖析以便做出决策的研究。数据分析的进步和程序通常用于企业中,以使协会能够逐渐适应 钦奈的Python培训 明智的业务选择。在目前的全球商业中心,'足够汇编数据并进行数学运算;您应该意识到如何将这些数据应用于会影响行为的真实情况。在该程序中,您将首先精通专门技能,包括R和Python方言,这些常用于数据分析编程和使用。 钦奈的Python培训 鉴于行业细分领域中的真正业务问题,例如福利,促销和会计,此时,常识性应用围绕着常识应用。

    回复删除