美文网首页
【读入测试数据】【读入表格数据的第一个脚本】

【读入测试数据】【读入表格数据的第一个脚本】

作者: 御都 | 来源:发表于2019-04-10 23:50 被阅读0次
  • 一、背景
    接口测试的测试数据一般保存在表格中,方便维护。POI框架能解决读入Excel中的测试数据并将测试结果回写到表格中。本次讨论的重点是读入,解决如何读入一个表格中的测试数据,用Object[] []进行保存。
  • 二、预置条件
    1、准备一个存放测试数据的表格,表格的内容如图所示,Excel取消了网址的超链接。不确定是否要取消


    image.png

    1.1 并将该表格放到Maven工程中,在已放入工程后本地修改Excel不会同步。


    image.png

2、在Maven工程中下载poi的jar包
在Pom.xml配置依赖,如下

<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.15</version>
    </dependency> 

2.1 设置保存后,Pom.xml报错,下载poi的jra包失败


image.png

首行报错如下:


image.png
在下载到的本地路径下查看,只下载了一个文件,一般要有7个
image.png

2.1.1 怀疑依赖的脚本写错了---无拼写错误
和正确的逐字比较,没有拼写错误,没有多没有少。使用网页上查询到依赖,还是不行。
2.1.2 怀疑版本不对
将版本改为3.7 3.8 4.10也不行
2.1.3 观察fail信息,估计是网络慢下载失败
解决办法:将Maven工程里下载到本地的文件全部删除,重新下载。Pom.xml的首行不报错了,但是pom.xml和工程名前都有红叉叉,pom.xml的报错信息为Project read error。解决办法右键该工程强制更新,解决(具体步骤为:https://jingyan.baidu.com/article/b2c186c82e5b56c46ef6ff0f.html,只用了其中的第3步骤,不支持mvn命令就没有纠结做1和2)。之后下载jar包都会出现这个问题,都可以强制更新解决。
2.1.4 总结下解决办法
将Maven工程中下载到本地的jar包删除了,重新下载。
重新下载可能会出现pom Dependency Hierarchy project read error错误,按照https://jingyan.baidu.com/article/b2c186c82e5b56c46ef6ff0f.html中的步骤3就能解决。

  • 三、代码
    1 思路
    工厂--》拿出workbook(也就是一个Excel)-->获取表单sheet--》获取Row(行)--》获取列(也就是一个单元格)
    2 调用poi中相关的类和方法
    2.1 方法的参数和返回值
    2.1.1 获取workbook对象:WorkbookFactory.create(File) 注意book不要写成了Book,
    ---参数为一个文件对象,new File("src/test/resources/testDate.xls"),File对象里的参数为文件所在的相对路径
    ---返回值为一个Workbook对象
    2.1.2 获取表单对象:workBook.getSheetAt(int)
    --参数为一个整数,表示一个workbook中第几个sheet.从0开始
    --返回值为一个Sheet对象
    2.1.3 获取行对象:sheet.getRow(int),从0开始
    2.1.4 获取列对象:row.getCell(int,MissingCellPolicy),从0开始
    --参数策略,MissingCellPolicy.CREATE_NULL_AS_BLANK解决单元
    --返回值为一个Row对象
    格为空时读入数据的策略,避免在使用该cell的值时出现空指针异常
    2.1.5 设置列的类型:cell.setCellType(CellType)
    --参数为CellType对象,CellType.STRING
    --无返回值
    2.1.6 获取一个列中的值:cell.getStringCellValue()
    --返回值为String

3 获取某个单元格内容的代码

//从工厂里获取一个workbook对象
        Workbook workbook = WorkbookFactory.create(new File("src/test/resources/testDate.xls"));
        //从workbook中获取第sheetNum个sheet对象,sheetNum从0开始计数
        Sheet sheet = workbook.getSheetAt(sheetNum - 1 );
        //从Sheet对象中获取需要的Row,从0开始计数。实际我们看到的表格行数从1开始,
        //参数要减去1
        Row row = sheet.getRow(rowNum - 1);
        //从Row对象中获取指定的列,确定为某个单元格,同上减去1
        Cell cell = row.getCell(columnNum -1);
        //设置Cell对象的值类型
        cell.setCellType(CellType.STRING);
        //获取cell对象的值
        String value = cell.getStringCellValue();

4 用Object[][]对单元格内容进行存储,代码如下

package inputDemo;

import java.io.File;
import java.io.IOException;

import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

/*import org.apache.poi.ss.usermodel.WorkbookFactory;*/
public class ExcelUtil {
    public static Object[][] read(int sheetNum,int starRow,int endRow,int starCell,int endCell){
        //创建一个Object 二维数组存放cell的值
        Object[][] datas = new Object[endRow-starRow+1][endCell-starCell+1];
        
try {
    try {
        //从工厂里获取一个workbook对象
        Workbook workbook = WorkbookFactory.create(new File("src/test/resources/testDate.xls"));
        //从workbook中获取第sheetNum个sheet对象,sheetNum从0开始计数
        Sheet sheet = workbook.getSheetAt(sheetNum - 1 );
        for(int i=starRow;i<=endRow;i++){
            //从Sheet对象中获取需要的Row,从0开始计数。实际我们看到的表格行数从1开始,
            //参数要减去1
            Row row = sheet.getRow(i - 1);
            for(int j=starCell;j<=endCell;j++){
                
                //从Row对象中获取指定的列,确定为某个单元格,同上减去1
                Cell cell = row.getCell(j -1,MissingCellPolicy.CREATE_NULL_AS_BLANK);
                //设置Cell对象的值类型
                cell.setCellType(CellType.STRING);
                //获取cell对象的值
                String value = cell.getStringCellValue();
                //将单元格的值存入二维度数组
                datas[i-starRow][j-starCell] = value;
                /*System.out.println("i-starRow = "+(i-starRow));
                System.out.println("i-starRow = "+(i-starRow));*/
            }
        }
    } catch (EncryptedDocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvalidFormatException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}  catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
        return datas;
    }
}

5 测试数据读入功能是否正常的代码

package inputDemo;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        //int sheetNum,int starRow,int endRow,int starCell,int endCell
        Object[][] datas = ExcelUtil.read(1,2,9,4,7);
        for(Object[] objects : datas){
            for(Object object : objects){
                System.out.print("【"+object+"】");
            }
            System.out.println();
        }
    }
}

6 运行结果

【https://hao.360.cn/?a1004】【post】【1】【1】
【https://hao.360.cn/?a1004】【post】【2】【2】
【https://hao.360.cn/?a1004】【post】【3】【3】
【https://hao.360.cn/?a1004】【post】【4】【4】
【https://hao.360.cn/?a1004】【post】【5】【5】
【https://hao.360.cn/?a1004】【post】【6】【6】
【https://hao.360.cn/?a1004】【post】【7】【7】
【https://hao.360.cn/?a1004】【post】【8】【8】

相关文章

网友评论

      本文标题:【读入测试数据】【读入表格数据的第一个脚本】

      本文链接:https://www.haomeiwen.com/subject/vxnoiqtx.html