自己写了一个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),我们将立即处理。