Java 使用POI操作EXCEL及测试框架搭建、测试开发的一些想法

无论是UI自动化测试还是接口自动化测试都需要进行数据驱动,一般很常见的一种方式就是用excel来管理数据,那么就涉及到一些代码对EXCEL的操作,之前我们介绍过用CSV来处理EXCEL,但是它的功能还不够强大。比如接口自动化测试框架搭建的时候我们用excel来进行数据驱动,用excel来进行用例的管理和测试结果的统计,那么我们就需要对excel进行读取,写入等编辑操作,如果做的更加全面的话还要对测试结果进行个统计。

先来谈下如何用excel来进行数据驱动吧。以我们公司的接口自动化测试框架为例,我们用excel来进行输入设计及输出对比,input表是请求输入数据,ouput表是期望输出数据,result表是实际输出结果,可以对这些用例进行相应地处理更直观的看到测试结果。

在这里还想谈下接口测试框架的搭建问题,之前也一直在论坛上看一些大神的框架设计,从技术层面上来讲涉及到的技术都是大同小异的,基本上都是用相关语言的一些测试框架加上一些数据解析,断言,数据请求。我认为接口测试框架的搭建,亦或者是UI自动化测试框架的搭建都是从需求出发,从项目本身出发去考虑如何搭建的,并不是从技术角度出发,不能说我做自动化测试做接口测试就要用这些技术搭建框架,要看项目本身的特点,看整体项目开发测试规范需要做到什么程度,再去考虑是否需要搭建框架。因为本身接口测试就由许多工具可以满足测试需要,如果说本身项目不会涉及到一些特殊需求,例如:

1.是否考虑特殊加密

2.是否考虑接口重复执行数据清理等问题(工具的话都是需要人工手动去处理测试数据的)

3.是否考虑测试批量执行,测试报告生成及邮件发送问题

4.是否考虑持续集成等问题

我认为当考虑了这些问题的时候才需要再去考虑搭建框架进行测试,而不是有了接口测试任务就各种技术各种查的去搭框架。自己有这种感想的原因也是在学习各种各样的测试技术,接口啊,性能啊,自动化啊等等之后,发现在实际的项目中是不一定都会用到的,那么我们学习这些技术的意义是什么呢?为了找工作加薪吗,是有这方面原因的。但是我认为还是应该回到测试工程师这个职位本职上来,我们的任务是什么,我越来越从思想上跳出测试者的禁锢,我希望我以后所学习的东西都是以软件质量管理质量控制为主,而不是各种各样的技术去堆砌,到最后发现掌握各种各样的技术却不知道怎么去测试,怎么当一名合格的测试,一名合格的QA。虽然自己会一直加强技术的学习,往测试开发方向发展,但是自己从思想深处还是坚定一下自己的定位,无论是测试,QA,测试开发,所做的所有工作应该是保证系统软件的质量,亦或者能在质量把控的工作上提供相应地技术支持,提供测试效率,辅助开发提高开发效率及质量,我想这才是测试应该做的工作,而不是一味的学习技术往开发靠拢来提高自己的市场竞争力。

好了废话不多说,简单地POI创建,读取,修改写入小Demo记录下:

package com.javaPOI;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class POITest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		POITest.createExcel();
		//POITest.readExcel();
		POITest.writeToExcel();
		Map<String, String> student = new HashMap<String, String>();
		student.put("名字", "小明");
		student.put("性别", "男");
		student.put("住址", "地球");
		student.put("成绩", "良好");

		String filePath = "/Users/macbookpro/Desktop/POITest/workbook.xls";

		POITest.writeToExcel(filePath, student, "new sheet");
	}

	public static void createExcel()
	{
		//创建工作表
		Workbook wbook = new HSSFWorkbook();
		//创建sheet页
	    Sheet sh = wbook.createSheet("new sheet");
	    //row 行   cell方格
	    Row row1 = sh.createRow(0);
	    //创建cell
	    Cell cell = row1.createCell(0);
	    //设置方格显示
	    cell.setCellValue("姓名");

	    row1.createCell(1).setCellValue("性别");
	    row1.createCell(2).setCellValue("住址");

	    //创建文件
	    FileOutputStream fos = null;
	    try {
			fos = new FileOutputStream("/Users/macbookpro/Desktop/POITest/workbook.xls");
     		wbook.write(fos);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void readExcel()
	{
		InputStream ips = null;
		try {
			//获取文件输入流
			ips = new FileInputStream("/Users/macbookpro/Desktop/POITest/workbook.xls");
			//根据输入流创建workbook对象
			Workbook wbook = WorkbookFactory.create(ips);
			//得到第一个sheet页
			Sheet sh1 = wbook.getSheetAt(0);
			//遍历行
	        for (Row row : sh1) {
				for (Cell cell : row) {
					System.out.print(cell.toString()+"   ");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				ips.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void writeToExcel()
	{
		OutputStream ops = null;
		InputStream ips = null;
		try {
			ips = new FileInputStream("/Users/macbookpro/Desktop/POITest/workbook.xls");
			//根据输出流创建workbook对象
			Workbook wbook = WorkbookFactory.create(ips);
			//获取sheet页
			Sheet sh = wbook.getSheetAt(0);
			for (Row row : sh) {
				for (Cell cell : row) {
					String str = cell.toString();
					//把姓名改成名字
					if (str.equals("姓名")) {
						cell.setCellValue("名字");
					}
				}
				//新增一个字段
				row.createCell(3).setCellValue("成绩");
			}
			ops = new FileOutputStream("/Users/macbookpro/Desktop/POITest/workbook.xls");
			wbook.write(ops);

		} catch (Exception e) {

			e.printStackTrace();
		} finally{
			try{
			   ops.close();
			   ips.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	public static void writeToExcel(String filePath,Map<String, String>student,String sheetName)
	{
		OutputStream ops = null;
		InputStream ips = null;

	    try {
			ips = new FileInputStream(new File(filePath));
			Workbook wbook = WorkbookFactory.create(ips);
			Sheet sh = wbook.getSheet(sheetName);

			//获得sheet行数  加1
			int shRowCount = sh.getLastRowNum()+1;
			System.out.println(shRowCount);
			//获得表头列数
			int shColumn = sh.getRow(0).getLastCellNum();
			System.out.println(shColumn);
			Row titleRow = sh.getRow(0);
			//新增一行
			Row newRow = sh.createRow(shRowCount);

			for (int i = 0; i < shColumn; i++) {
				//获取列名
				String columnStr = titleRow.getCell(i).toString();
				System.out.println(columnStr);
				newRow.createCell(i).setCellValue(student.get(columnStr));
			}

			ops = new FileOutputStream(new File(filePath));
			wbook.write(ops);
		} catch (Exception e) {
            e.printStackTrace();
		} finally{
			try{
				ops.close();
				ips.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}

查看结果:

搭建框架的话,就是需要对相关的excel操作进行封装,这个过两天以我们的自动化测试框架为例分享下如何搭建。

时间: 2024-08-06 20:00:14

Java 使用POI操作EXCEL及测试框架搭建、测试开发的一些想法的相关文章

JAVA使用POI操作excel

这里提一下,java操作excel的组件除了apache的poi,还有jexcelapi(jxl),其中poi组件的获取地址为poi.apache.org. poi组件中常用的类有HSSFworkbook表示一个完整的excel表格,HSSFsheet表示excel中的一个工作薄,HSSFRow表示工作薄中的一行,HSSFCell表示一个单元格 下面是一个简单的写入的demo public static void main(String [] args){ try { HSSFWorkbook

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

Java使用 POI 操作Excel

Java中常见的用来操作 Excel 的方式有2种:JXL和POI.JXL只能对 Excel进行操作,且只支持到 Excel 95-2000的版本.而POI是Apache 的开源项目,由Java编写的跨平台 Java API,可操作 Microsoft Office.借助POI,可以方便的生成数据报表,数据批量上传,数据备份等工作. 一.简单使用 1.创建Maven工程导入POI坐标 <!-- poi 相关 --> <dependency> <groupId>org.a

JAVA的POI操作Excel

1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组成,列用大写英文字母表示,从A开始到Z共26列,然后再从AA到AZ又26列,再从BA到BZ再26列以此类推.行则使用数字表示,例如:A3 表示第三行第一列,E5表示第五行第五列. 1.2 POI工具包 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Exce

(一)JAVA使用POI操作excel

1,Poi 简介 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能 POI为“Poor Obfuscationmplementation”的首字母缩写,意为“可怜的模糊实现”. Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API.用它可以使用Java读取和创建,修改M

(三)JAVA使用POI操作excel

1,单元格对齐方式 Demo8.java 1 package com.wishwzp.poi; 2 3 import java.io.FileOutputStream; 4 import java.util.Date; 5 6 import org.apache.poi.hssf.usermodel.HSSFCell; 7 import org.apache.poi.hssf.usermodel.HSSFCellStyle; 8 import org.apache.poi.hssf.usermo

(二)JAVA使用POI操作excel

1,创建一个时间格式的单元格 Demo4.java 1 package com.wishwzp.poi; 2 3 import java.io.FileOutputStream; 4 import java.util.Calendar; 5 import java.util.Date; 6 7 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 8 import org.apache.poi.ss.usermodel.Cell; 9 import

(四)JAVA使用POI操作excel

1,字体处理 Demo12.java 1 package com.wishwzp.poi; 2 3 import java.io.FileOutputStream; 4 5 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 6 import org.apache.poi.ss.usermodel.Cell; 7 import org.apache.poi.ss.usermodel.CellStyle; 8 import org.apache.p

JAVA使用POI操作Excel入门程序

jar 包地址: 链接: https://pan.baidu.com/s/1gfOVslH 密码: 44wu 1 /** 2 * 创建一个工作薄 3 * @throws IOException 4 */ 5 @Test 6 public void createWorkbook() throws IOException { 7 Workbook wb = new HSSFWorkbook() ; 8 FileOutputStream out = new FileOutputStream("G:\\