欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Web UI自动化之Excel用例读取

程序员文章站 2022-07-14 08:54:16
...

本文讲解了如何从 Excel 表格中读取测试用例并在 TestNG 中执行。使用的例子是打开百度首页,输入用户名和密码,完成登录。
Web UI自动化之Excel用例读取
Excel 表格中的用例如图Web UI自动化之Excel用例读取
我们将这个 Excel 取名为 test.xls,放在 resource 目录***意要将 resource 设为 Source Folder(右键点击文件夹 -> Build Path -> Use as Source Folder),否则文件读取不到
Web UI自动化之Excel用例读取

一、实现登录操作

将百度首页(www.baidu.com)定义为 SearchPage,在该类中实现登录操作的代码

public void login(WebDriver driver, Map<String,String> param){
  //在页面上name为tj_login的元素有两个,所以用findElements,得到List,然后取第二个元素
  driver.findElements(By.name("tj_login")).get(1).click();
  //使线程休眠两秒,等待登录页面弹框加载
  try {
    Thread.sleep(2000);
  } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 //切换到使用账号登录
  driver.findElement(By.id("TANGRAM__PSP_10__footerULoginBtn")).click();
  //输入用户名
  driver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys(param.get("用户名"));
  //输入密码
  driver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys(param.get("密码"));
  //点击登录按钮 
  driver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
}

其中的 Map 参数 param 就是我们的测试用例。

用例读取后存放的形式如下:

[{“用户名”:“11111”, “密码”:“abcde”}, {“用户名”:“22222”,“密码”:“fghij”}]

其中有两条 map 数据,TestNG 会对它们分别执行

二、读取用例并保存

上面说到,用例是以 Map 形式存储的,具体是怎么实现的呢?
新建 ExcelUtils.java ,处理 Excel 文件并返回用例

public class ExcelUtils {

  @DataProvider(name="excel")
  public static Object[][] readFile(){
    Object[][] obj=null;
    Map<String,String> map = new HashMap<String,String>();
    try{
      //InputStream is = new FileInputStream("D:\\test.xls"); 
      InputStream is = ExcelUtils.class.getResourceAsStream("/test.xls");
      POIFSFileSystem poi = new POIFSFileSystem(is); 
      HSSFWorkbook wb = new HSSFWorkbook(poi);
      HSSFSheet sheet = wb.getSheetAt(0);
      obj = new Object[sheet.getLastRowNum()][];
      for(int r=1; r <= sheet.getLastRowNum(); r++){
        HSSFRow row = sheet.getRow(r);
        map.clear();
        for(int c=0; c< sheet.getRow(0).getLastCellNum(); c++){
          Cell cell = row.getCell(c);
          cell.setCellType(CellType.STRING);
          map.put(sheet.getRow(0).getCell(c).getStringCellValue(), cell.getStringCellValue());
        }
        obj[r-1] = new Object[]{new HashMap<>(map)};
      }
      is.close();
      wb.close();
    }catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
    return obj;
  }
}

代码解释:

1、@DataProvider(name=“excel”)

在使用 TestNG 时,可以设置 DataProvider,指定数据源,这个方法返回的是用例,也就是数据源,所以要在方法前加上@DataProvider(name=“excel”),name 是我们自己定义的名字,也可以不填。

2、Excel 读取的实现

具体说明在这里 Java读写Excel文件

3、TestNG 的数据源是 Object[][] 对象,所以将 Excel 中的每一行都存放到 Map 中,再将 map 放到 Object[][] 中返回。

4、在读取 Excel 的过程中,纯数字文本会被当成 Numeric 类型处理,所以在读取前需要先设置单元格数据类型为 String

cell.setCellType(CellType.STRING);

三、编写测试类

新建 TestLogin.java,实现测试过程

public class TestLogin {
  
  //指定数据源,数据源和 Test 方法不在一个类中时,需要说明数据源的 class
  @Test(dataProvider="excel",dataProviderClass=ExcelUtils.class)
  public void testLogin(Map<String,String> param){
    Browser browser = new Browser();
    Properties properties = Config.getProperties();
    WebDriver driver = browser.openUrl(properties.getProperty("URL"));
    SearchPage search = new SearchPage();
    search.login(driver, param);
    browser.close();
  }
}

四、运行 TestNG

右键点击 TestLogin.java,选择Run As -> TestNG Test

执行结果如下:
Web UI自动化之Excel用例读取

欢迎关注微信公众号,您的支持是对我最大的鼓励
Web UI自动化之Excel用例读取