数据驱动(3)

3.1使用TestNG、Apache POI和Excel文件进行数据驱动测试

测试逻辑:

(1)打开百度首页

(2)在搜索框中输入两个搜索关键词

(3)单击搜索按钮

(4)断言搜索结果页是否包含Excel文件每行第三个单元格的关键词

测试环境准备:

(1)从http://poi.apache.org/download.html#POI-4.0.1下载POI安装包的压缩文件

(2)将压缩文件进行解压,将解压的压缩文件根目录下的JAR文件和ooxml-lib文件夹、lib文件夹下的所有JAR文件均加入到Eclipse的Build Path中

Excel文件内容

测试代码:

package cn.datadriven;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;

public class TestDataDrivenByExcelFile {
    WebDriver driver;
    String url = "http://www.baidu.com";
    //使用注解DataProvider,将数据集合命名为testData
    @DataProvider(name ="testData")
    public static Object[][] words() throws IOException{
        //调用静态方法获取xlsx文件的测试数据
        return getTestData("E:\\材料\\selenium\\","testData.xlsx","Sheet1");
    }
  public static Object[][] getTestData(String filePath,String fileName, String sheetName) throws IOException{
      //根据参数传入的数据文件路径和文件名称,组合出excel数据文件的绝对路径
        File file = new File(filePath+"\\"+fileName);
        //创建FileInputStream对象用于读取Excel文件
        FileInputStream inputStream = new FileInputStream(file);
        //声明Workbook对象
        Workbook Workbook = null;
        //获取文件参数扩展名,判断是.xlsx文件还是.xls文件
        String fileExtensionName = fileName.substring(fileName.indexOf("."));
        if(fileExtensionName.equals(".xlsx")){
            Workbook = new XSSFWorkbook(inputStream);
        }
        else if(fileExtensionName.equals(".xls")){
            Workbook =new HSSFWorkbook(inputStream);
        }
        //通过sheetName参数生成Sheet对象
        Sheet sheet = Workbook.getSheet(sheetName);
        //获取excel数据文件Sheet1中数据的行数,getLastRowNum方法获取数据的最后一行行号
        //getFirstRowNum方法获取数第一行的行号相减之后计算出数据的行数
        //注意:Excel文件的行号和列号都是从0开始的
        int rowCount = sheet.getLastRowNum()-sheet.getFirstRowNum();
        //创建名为records的list对象来存储Excel数据文件读取的数据
        List<Object[]>records = new ArrayList<Object[]>();
        //遍历Excel文件所有数据除第一行为标题所有从1开始
        for(int i=1 ; i<rowCount+1; i++){
            Row row = sheet.getRow(i);
            //声明一个数组,用来存储Excel数据文件每行中的3个数据,数组的大小用getLastCellNum()
            //进行动态声明,实现测试数据个数和数组大小一致
            String fields[] = new String[row.getLastCellNum()];
            for(int j=0;j<row.getLastCellNum();j++){
                //调用getCell和getStringCellValue获取单元格数据
                fields[j] = row.getCell(j).getStringCellValue();
            }
            //将单元格数据存储到records 的list中
            records.add(fields);
        }
        //定义函数返回值
        //将测试数据list转为一个Object的二维数组
        Object[][] results = new Object[records.size()][];
        //设置二维数组每行的值,每行是一个Object对象
        for(int i=0;i<records.size();i++){
            results[i] = records.get(i);
        }
        return results;
    }
  @Test(dataProvider="testData")
  public void testSearch(String searchWord1,String searchWord2, String searchResult) {
      //文件每行单元格的前两个值进行搜索
      driver.findElement(By.id("kw")).sendKeys(searchWord1+""+searchWord2);
      //单机搜索
      driver.findElement(By.id("su")).click();
      //使用显示等待确认页面已加载完成,帮助已显示在页面底部
      (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
          @Override
          public Boolean apply(WebDriver d){
              return d.findElement(By.xpath("//*[@id='help']/a[1]")).getText().contains("帮助");
          }
    });
      //断言判断每行搜索的内容页面是否包含单元格的第三值
      Assert.assertTrue(driver.getPageSource().contains(searchResult));
  }
  @BeforeMethod
  public void beforeMethod() {
      System.setProperty("webdriver.chrome.driver", "D:\\WebDriver\\chromedriver_win32\\chromedriver.exe");
      driver = new ChromeDriver();
      driver.manage().window().maximize();
      driver.get(url);
  }

  @AfterMethod
  public void afterMethod() {
      driver.quit();
  }

}

测试结果:

posted @ 2019-03-19 16:34  心生意动  阅读(115)  评论(0编辑  收藏  举报