testNg自动化,读取excel的数据

发表于:2018-7-31 15:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:米蓝    来源:博客园

  自己写了一个testng执行excel用例的小程序,主要是运行.xlsx的,需要支持xls可以自己扩展,分享一下。下载地址:http://yun.baidu.com/share/link?shareid=3811093173&uk=925574576&third=0
  需要引用的jar包有(demo里面也有这些jar包):
  1、读取excel
  excel的数据放入List<Map<String, String>>中。这里,不包括excel第一条数据,因为第一条数据要作为map的key值。
  excel格式:
  package com.milan.utils;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  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 ReadExcel {
  public static List<Map<String, String>> readXlsx(String fileName) {
  XSSFWorkbook xssfWorkbook=null;
  try {
  xssfWorkbook = new XSSFWorkbook(fileName);
  } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
  // 循环工作表Sheet
  XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
  List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  // 循环行Row
  XSSFRow rowTitleRow =xssfSheet.getRow(0);
  for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
  XSSFRow xssfRow = xssfSheet.getRow(rowNum);
  if (xssfRow == null) {
  continue;
  }
  Map<String, String> map = new HashMap<String, String>();
  // 循环列Cell
  for (int cellNum = 0; cellNum <rowTitleRow.getLastCellNum(); cellNum++) {
  XSSFCell xssfCell = xssfRow.getCell(cellNum);
  XSSFCell xssfCellTitleCell = rowTitleRow.getCell(cellNum);
  map.put(getValue(xssfCellTitleCell), getValue(xssfCell));
  }
  list.add(map);
  }
  return list;
  }
  @SuppressWarnings("static-access")
  private static String getValue(XSSFCell xssfCell) {
  if (xssfCell ==null){return ""; }
  if (xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN) {
  return String.valueOf(xssfCell.getBooleanCellValue());
  } else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC) {
  return String.valueOf(xssfCell.getNumericCellValue());
  } else {
  return String.valueOf(xssfCell.getStringCellValue());
  }
  }
  }

  2、解析excel的数据
    excel中,
     
       这个字段的值为y表示需要执行测试用例,如果为其他的,则表示不执行。
  字段中{$d}开头的表示用例说明。{$p}开头的,表示用例需要的预置参数。比如QQ好友发送消息,但是发送消息需要先登录,所以这里可以放登录的用户名和密码。
   
  package com.milan.utils;
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  public class CaseHelper {
  //根据excel的map 转换为数组 第一个为 入参 map 第二个为用例说明,第三个参数为执行用例的预置条件
  public static Object[] getObjArrByMap(Map<String,String> caseExcelMap){
  Map<String,String> caseParam = new HashMap<String,String>();
  Map<String,String> caseDesc = new HashMap<String,String>();
  Map<String,String> casePreset =new HashMap<String,String>();
  CaseInfo ci = new CaseInfo();
  for (String key : caseExcelMap.keySet()) {
  if (key.indexOf("{$d}")== 0){
  caseDesc.put(key.replace("{$d}", ""), caseExcelMap.get(key));
  }
  else if(key.indexOf("{$p}") == 0){
  casePreset.put(key.replace("{$p}", ""), caseExcelMap.get(key));
  }
  else {
  String strValue = caseExcelMap.get(key);
  if (!strValue.equals("")){
  caseParam.put(key, strValue);
  }
  }
  }
  ci.setCaseDesc(caseDesc);
  ci.setCaseParam(caseParam);
  ci.setCasePreset(casePreset);
  return new Object[]{ci};
  }
  ///根据excel获取的list转换为  Object[][]
  public static Object[][] getObjArrByList(List<Map<String,String>> caseExcelList){
  List<Map<String,String>> caseExcuteList = getExcuteList(caseExcelList);
  Object[][] objArray = new Object[caseExcuteList.size()][];
  for(int i = 0;i<caseExcuteList.size();i++){
  objArray[i]=getObjArrByMap(caseExcuteList.get(i));
  }
  return objArray;
  }
  ///赛选出需要执行的用例
  private static List<Map<String,String>> getExcuteList(List<Map<String,String>> caseExcelList){
  List<Map<String,String>> list = new ArrayList<Map<String,String>>();
  for( Map<String,String> m : caseExcelList){
  String str = m.get("{$d}isexcute").trim().toLowerCase();
  if (str.equals("y")){
  list.add(m);
  }
  }
  return list;
  }
  }

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号