测试驱动技术(TDD)系列之:从excel中读取数据

开发 后端
在前面的文章中,我详细地讲解了,java中数组的应用,以及如何利用api来操控excel文件。接下来我就把在测试框架中读取excel进行接口测试参数化的核心代码以及实现思路讲解给大家。

[[380428]]

 测试框架中参数化的一般形式

在Junit4和TestNG框架中实现参数化的形式几乎是一致的。

Junit4定义参数化数据,代码如下:

  1. public static Collection prepareData(){ 
  2. Object [][]object= {{1,2,3},{0,2,2},{0,3,3}}; 
  3. return Arrays.asList(object); 

 TestNG定义参数化数据,代码如下:

  1. @DataProvider 
  2.       public Object[][] dp1() { 
  3.         return new Object[][] { 
  4.           new Object[] { 1, 1,0 }, 
  5.           new Object[] { 2, 1,1 }, 
  6.           new Object[] { 2, 1,2 }, 
  7.         }; 
  8.       } 

 从excel中读取测试驱动数据的实现思路

在前面的文章中,我详细地讲解了,java中数组的应用,以及如何利用api来操控excel文件。接下来我就把在测试框架中读取excel进行接口测试参数化的核心代码以及实现思路讲解给大家。

1.首先我们看到测试数据的参数化返回值是Object [][] object,那么我们就需要写一个读取excel的方法,该方法的返回值是Object [][],方法可以定义为:Object[][] readExcel(String p_file,int p_sheetindex)

2.excel中读取cell的名称是通过行和列确认的,而且不同类型的cell在读取值时用到的api是不同的,我们写一个读取Cell值得方法,代码实现如下:

  1. public static Object getCellVaule(Sheet p_sheet,int p_rowIndex,int p_cellIndex) { 
  2.  
  3.       Object value=null
  4.  
  5.        Row row = p_sheet.getRow(p_rowIndex); 
  6.  
  7.         Cell cell = row.getCell(p_cellIndex);    
  8.  
  9.         if(cell.getCellType()==CellType.NUMERIC) //判断是数字类型 
  10.  
  11.         { 
  12.  
  13.         value= cell.getNumericCellValue();      
  14.  
  15.         } 
  16.  
  17.         else if(cell.getCellType()==CellType.STRING) //判断是String类型 
  18.  
  19.         { 
  20.  
  21.         value=cell.getStringCellValue(); 
  22.  
  23.         } 
  24.  
  25.         else if(cell.getCellType()==CellType.BOOLEAN)  // 判断是BOOLEAN类型 
  26.  
  27.         { 
  28.  
  29.         value=cell.getStringCellValue(); 
  30.  
  31.         } 
  32.  
  33.         else 
  34.  
  35.         { 
  36.  
  37.         value=cell.toString();    // 其他类型统一转化成String类型 
  38.  
  39.         } 
  40.  
  41.         return value; 
  42.  
  43.     } 

 3.结合getCellVaule方法,我们编写一个读取完整excel值的方法,返回值为Object[][] ,代码如下:

  1. public static Object[][] readExcel(String p_file,int p_sheetindex){ 
  2.  
  3.         Workbook workbook=null
  4.  
  5.         Object [][] data=null
  6.  
  7. try { 
  8.  
  9.        workbook = new XSSFWorkbook(new FileInputStream(p_file)); 
  10.  
  11.         Sheet sheet = workbook.getSheetAt(p_sheetindex); // 获取第一个工作表.0代表第一个sheet页 
  12.  
  13.         int iRowNum=sheet.getPhysicalNumberOfRows();  //获取工作表中的行数 
  14.  
  15.         int iColumnNum= sheet.getRow(0).getPhysicalNumberOfCells(); //获取工作表中的列数    
  16.  
  17.         data=new Object[iRowNum][iColumnNum];//通过行列数,创建一个二维数组来保存cell中的数据 
  18.  
  19.         for(int i=0;i<iRowNum;i++) { 
  20.  
  21.         for(int j=0;j<iColumnNum;j++) { 
  22.  
  23.         data[i][j]= getCellVaule(sheet,i,j);  //通过循环以及之前编写好的读取excel单元格值的方法,把cell中的数据保存到二维数组中 
  24.  
  25.         } 
  26.  
  27.         } 
  28.  
  29.         workbook.close(); 
  30.  
  31. } catch (IOException e) { 
  32.  
  33. // TODO Auto-generated catch block 
  34.  
  35. e.printStackTrace(); 
  36.  
  37.  
  38.         return data; 
  39.  
  40.     } 

 4.我们可以把这两个方法作为工具方法,写入到工具类ExcelTool中,方便在测试框架中应用

测试用例中参数化的应用

在测试用例中(以junit4为例),使用该工具方法实现参数化的代码实现如下:

  1. @RunWith(Parameterized.class) 
  2. public class ParaDemo {  
  3. private Object input1;  
  4.     private Object input2;  
  5.     @Parameters  
  6.     public static Collection prepareData(){  
  7.     System.out.println("prepareData"); 
  8.     Object [][] object=ExcelTool.readExcel("D:\\TestData2.xlsx",0);  
  9.         return Arrays.asList(object);  
  10.     }  
  11.     public ParaDemo(Object input1,Object input2,Object expected){  
  12.        System.out.println("ParaDemo"); 
  13.         this.input1 = input1;  
  14.         this.input2 = input2;  
  15.     }  
  16.     @Test  
  17.     public void testEqual(){  
  18.         Assert.assertEquals(this.input1,this.input2);  
  19.     }  

 excel里保存的测试数据如下所示


运行测试用例,发现参数化成功执行,如下图所示


 

责任编辑:姜华 来源: 今日头条
相关推荐

2021-02-04 07:12:15

测试excelapi

2021-02-21 08:53:19

测试驱动技术数据驱动pytest

2021-01-19 07:46:48

TestNG测试驱动TDD

2014-04-09 11:13:37

测试驱动开发

2009-10-10 10:55:48

TDD技术

2010-08-26 16:34:12

DB2Excel读取

2023-09-11 11:05:49

软件开发TDD

2022-08-09 14:42:44

自动驾驶算力

2009-08-18 16:14:05

C# 操作Excel

2009-08-11 14:51:47

C#读取Excel中数

2009-07-02 09:56:24

导入事件驱动技术JSP Servlet

2010-01-28 09:07:50

Visual Stud

2012-02-22 09:44:21

Java

2010-08-25 12:06:18

LTEWiMAX

2010-04-20 10:12:42

OraclePL

2009-08-13 10:27:28

C#读取Excel数据

2009-02-12 09:55:28

2023-02-07 07:54:25

2010-08-23 16:55:53

SharePoint

2017-03-16 13:17:54

TDD代码开发
点赞
收藏

51CTO技术栈公众号