数据驱动部分,是自动化测试常用部分,也是参数化设计的重要环节,前面分享了,mysql、yaml做数据源,那么再来分享下excel做数据驱动

思路:

先用POI读取excel。解析读取数据,返回list,返回Object[][]即可

工具类文件:

读取excel,返回map对象list集合

ReadExcelUtil.java

  1. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  2. import org.apache.poi.ss.usermodel.*;
  3. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  4.  
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.util.ArrayList;
  10. import java.util.LinkedHashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13.  
  14. /**
  15. * 读取excel,返回map对象list集合
  16. *
  17. * @author longrong.lang
  18. */
  19. public class ReadExcelUtil {
  20.  
  21. /**
  22. * 读取excel操作
  23. *
  24. * @param filePath
  25. * @return:读取excel,返回map对象集合
  26. */
  27. public static List<Map<String, String>> getExcuteList(String filePath) {
  28. Workbook wb = null;
  29. Sheet sheet = null;
  30. Row row = null;
  31. List<Map<String, String>> list = null;
  32. String cellData = null;
  33. String columns[] = {"name", "method", "value","备注"};
  34. wb = readExcel(filePath);
  35. if (wb != null) {
  36. //用来存放表中数据
  37. list = new ArrayList<Map<String, String>>();
  38. //获取第一个sheet
  39. sheet = wb.getSheetAt();
  40. //获取最大行数
  41. int rownum = sheet.getPhysicalNumberOfRows();
  42. //获取第一行
  43. row = sheet.getRow();
  44. //获取最大列数
  45. int colnum = row.getPhysicalNumberOfCells();
  46. for (int i = ; i < rownum; i++) {
  47. Map<String, String> map = new LinkedHashMap<String, String>();
  48. row = sheet.getRow(i);
  49. if (row != null) {
  50. for (int j = ; j < colnum; j++) {
  51. cellData = (String) getCellFormatValue(row.getCell(j));
  52. map.put(columns[j], cellData);
  53. }
  54. } else {
  55. break;
  56. }
  57. list.add(map);
  58. }
  59. }
  60. return list;
  61. }
  62.  
  63. /**
  64. * 判断excel文件的类型
  65. *
  66. * @param filePath
  67. * @return
  68. */
  69. public static Workbook readExcel(String filePath) {
  70. Workbook wb = null;
  71. if (filePath == null) {
  72. return null;
  73. }
  74. String extString = filePath.substring(filePath.lastIndexOf("."));
  75. InputStream is = null;
  76. try {
  77. is = new FileInputStream(filePath);
  78. if (".xls".equals(extString)) {
  79. return wb = new HSSFWorkbook(is);
  80. } else if (".xlsx".equals(extString)) {
  81. return wb = new XSSFWorkbook(is);
  82. } else {
  83. return wb = null;
  84. }
  85. } catch (FileNotFoundException e) {
  86. e.printStackTrace();
  87. } catch (IOException e) {
  88. e.printStackTrace();
  89. }
  90. return wb;
  91. }
  92.  
  93. public static Object getCellFormatValue(Cell cell) {
  94. Object cellValue = null;
  95. if (cell != null) {
  96. //判断cell类型
  97. switch (cell.getCellType()) {
  98. case Cell.CELL_TYPE_NUMERIC: {
  99. cellValue = String.valueOf(cell.getNumericCellValue());
  100. break;
  101. }
  102. case Cell.CELL_TYPE_FORMULA: {
  103. //判断cell是否为日期格式
  104. if (DateUtil.isCellDateFormatted(cell)) {
  105. //转换为日期格式YYYY-mm-dd
  106. cellValue = cell.getDateCellValue();
  107. } else {
  108. //数字
  109. cellValue = String.valueOf(cell.getNumericCellValue());
  110. }
  111. break;
  112. }
  113. case Cell.CELL_TYPE_STRING: {
  114. cellValue = cell.getRichStringCellValue().getString();
  115. break;
  116. }
  117. default:
  118. cellValue = "";
  119. }
  120. } else {
  121. cellValue = "";
  122. }
  123. return cellValue;
  124. }
  125.  
  126. }

然后把解析出来的list转换成Object[][]类型的数据,且结合在@DataProvider中。

  1. import org.testng.annotations.DataProvider;
  2.  
  3. import java.util.List;
  4. import java.util.Map;
  5.  
  6. public class ExcelDataHeleper {
  7.  
  8. @DataProvider
  9. public Object[][] dataMethod(){
  10. List<Map<String, String>> result = ReadExcelUtil.getExcuteList("D:\\data.xls");
  11. Object[][] files = new Object[result.size()][];
  12. for(int i=; i<result.size(); i++){
  13. files[i] = new Object[]{result.get(i)};
  14. }
  15. return files;
  16. }
  17.  
  18. }

再通过测试文件来测试一下:

  1. import org.testng.annotations.Test;
  2.  
  3. import java.util.Map;
  4.  
  5. public class TestDataUtil extends ExcelDataHeleper {
  6.  
  7. @Test(dataProvider="dataMethod")
  8. public void testmethod1(Map<?, ?> param){
  9. System.out.println(param.get("name")+"\t"+param.get("method")+"\t"+param.get("value"));
  10. }
  11.  
  12. }

运行结果:

  1. [TestNG] Running:
  2. C:\Users\Administrator\.IntelliJIdea2018.2\system\temp-testng-customsuite.xml
  3. 输入框 id kw
  4. 百度一下 id su
  5. 退出 name tj_logout
  6. 201811151441 2018/11/15 14:42:31 脚本
  7. 退出 name tj_logout
  8.  
  9. ===============================================
  10. Default Suite
  11. Total tests run: 5, Failures: 0, Skips: 0
  12. ===============================================
  13.  
  14. Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
  15.  
  16. Process finished with exit code 0

  

java结合testng,利用excel做数据源的数据驱动实例的更多相关文章

  1. java结合testng,利用yaml做数据源的数据驱动实例

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以yaml为例: 备注:@DataProvider的返回 ...

  2. java结合testng,利用txt做数据源的数据驱动实例

    import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.Buffe ...

  3. java分享第十八天-02( java结合testng,利用XML做数据源的数据驱动)

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例:备注:@DataProvider的返回值类 ...

  4. java结合testng,利用XML做数据源的数据驱动示例

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例: 备注:@DataProvider的返回值 ...

  5. java结合testng,利用mysql数据库做数据源的数据驱动实例

    上一篇我们介绍用如何用yaml结合testng做数据驱动,就又想来个数据库的参数化 备注:@DataProvider的返回值类型只能是Object[][]与Iterator<Object> ...

  6. 利用Excel做一些简单的数据分析

    先来几个原始数据的截图,如下所示: 示例图就举一个吧,因为这些数据量还挺大的,大概的总结了一下,这下列这几栏中不合规范的数据占比很大: (1)民族(经分析,在此表中所涉及到的民族分别为:汉族,满族,蒙 ...

  7. Java基础-继承 利用接口做参数,写个计算器,能完成+-*/运算

    38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 ...

  8. java 接口测试,使用excel做数据驱动(二)

    承接上篇. 改变我们的测试驱动方式,灵活设置测试用例. 数据驱动测试 数据驱动测试的核心是: 测试数据与测试脚本分离,实现测试脚本参数化, 提高测试脚本的可重用性.在自动化功能测试中如果灵活使用数据源 ...

  9. 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)

    本次随笔主要讲述着工作中是如何解决数据导出的,对于数据导出到excel在日常工作中大家还是比较常用的,那导出到word呢,改如何处理呢,简单的页面导出问题应该不大,但是如果是标准的公文导出呢,要保证其 ...

随机推荐

  1. 细说java系列之反射

    什么是反射 反射机制允许在Java代码中获取被JVM加载的类信息,如:成员变量,方法,构造函数等. 在Java包java.lang.reflect下提供了获取类和对象反射信息的相关工具类和接口,如:F ...

  2. 'DataVisualization' does not exist in the namespace 'System.Web.UI'一例解决办法

    之前项目是vs2010 aspx项目,用vs2017打开后,非运行状态下有一行错误:CS0234 C# The type or namespace name 'DataVisualization' d ...

  3. SpringBoot入门笔记(二)、使用fastjson

    1.添加fastjson配置 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastj ...

  4. mssql 创建存储过程简单实例

    CREATE procedure [dbo].[cp_User_Increment] @channelId int, @currentPage int, @pageSize int, @userId ...

  5. dbms_redefinition在线重定义表结构

    dbms_redefinition在线重定义表结构 (2013-08-29 22:52:58) 转载▼ 标签: dbms_redefinition 非分区表转换成分区表 王显伟 在线重定义表结构 在线 ...

  6. ue4配置分析记录

    相关代码 UObject::CallFunctionByNameWithArguments  ExecuteConsoleCommand << 配置.ini[???.类名]    //要先 ...

  7. Linux命令之-ps & kill

    1.ps:将某个进程显示出来: 常用命令 :ps -ef |grep Java 1)如下为加不加-e参数的区别 2.一般我们查找某个进程的目的就是把它杀掉,使用kill 命令. kill -9 564 ...

  8. 如何解压RPM包

    有时我们需要RPM包中的某个文件,如何解压RPM包呢? RPM包括是使用cpio格式打包的,因此可以先转成cpio然后解压,如下所示: rpm2cpio xxx.rpm | cpio -div 解压了 ...

  9. vue工具知识

    1.访问数据自动格式化 Google jsonview插件(已用) 2.字体图标库. https://icomoon.io/  上传svg可生成字体图标

  10. 51nod 1294 修改数组

    若a[i]-i(i从1开始)的值小于0,那么a[i]必须改变 若a[i]-i的值大于等于0,将a[i]-i存入新的数组中,求出新数组的最长非严格上升子序列,所得即最多的,不用改变的数. #includ ...