JMeter-如何修改excel表格的内容

一、需求:实现导入课表数据功能,但excel的内容需要修改日期后,才能导入。
二、难点:Exceld的读写操作

在网上百度了一下,需要使用jxl.jar包才能实现,且该包只支持xls格式的读写,不支持xlsx。如果不是xls,则需要将表格另存为xls格式。

 

三、思路分析:

1、下载环境包:jxl.jar,并放到Jmeter安装目录的lib目录下,或者lib/ext(尝试过都可以),然后重启Jmeter就会生效了。

2、使用Beanshell取样器,用java脚本去操作excel,修改表格的内容

excel三要素:workbook、sheet、cell,即最终要定位到想要修改的单元格
(1)先获取excel的文件名:注意路径一定要写对
(2)获取表单名:即获取第几个sheet
(3)获取单元格的坐标:获取sheet的哪个单元格,从0开始数
(4)将内容写入到对应的单元格中去,并保存为变量(以便于断言)
(5)关闭读写的流

3、修改完成后,使用Beanshell断言,读取excel的内容,对比是否与写入的一致

(1)获取beanshell取样器里,保存的变量:写入的内容

(2)同上述步骤,定位到单元格

(3)读取单元格的内容

(4)比对写入和读取的内容是否一致,进行断言

四、操作步骤:

1、测试计划-线程组-取样器-添加Bean Shell取样器,如图

2、在beanshell取样器-脚本区域,编写脚本

import jxl.*;
import java.io.*;
import java.io.File;
import java.io.FileInputStream;
import jxl.Workbook;
import jxl.write.WritableWorkbook;
import jxl.write.WritableSheet;
import jxl.Cell;
import jxl.write.WritableCell;
import jxl.write.Label;
import java.text.SimpleDateFormat;
import java.util.Calendar;


// 获取当前日期
String year_month_day= "yyyy-MM-dd";
SimpleDateFormat dft = new SimpleDateFormat(year_month_day);
Calendar date = Calendar.getInstance();
String today = dft.format(date.getTime());

// 获取课节
int startSeq = ${seq_1};
int endSeq = startSeq + ${seqNum};
String seqValue = startSeq +"-"+ endSeq;

vars.put("now_date",today);
vars.put("now_seq",seqValue);

//课表文件路径
//String courseFilePath = "F:/测试组共享文件/高校222/20 共用工具/11 盒子信息修改&同步&录制/公共列表/课表导入/教师课表导入模板1天.xls";
String courseFilePath = "${fileurl}" +"/教师课表导入模板1天.xls";

//打印日志
log.info("startSeq===="+startSeq);
log.info("endSeq===="+endSeq);
log.info("seqValue===="+seqValue);
log.info("today===="+today);
log.info("courseFilePath===="+courseFilePath);

try{
	InputStream instream = new FileInputStream(new File(courseFilePath));
	Workbook readwb = Workbook.getWorkbook(instream);
	// 在原表格上追加操作
	WritableWorkbook wbook = Workbook.createWorkbook(new File(courseFilePath), readwb);
	WritableSheet sheet1 = wbook.getSheet(0); 

	// 修改单元格的内容:上课日期
	Label l20 = new Label(9, 20, today);
	Label l21 = new Label(9, 21, today);
	Label l22 = new Label(9, 22, today);
	Label l23 = new Label(9, 23, today);
	Label l24 = new Label(9, 24, today);
	sheet1.addCell(l20);
	sheet1.addCell(l21);
	sheet1.addCell(l22);
	sheet1.addCell(l23);
	sheet1.addCell(l24);

	// 修改单元格内容:节次
	Label l1 = new Label(10, 20, seqValue);
	Label l2 = new Label(10, 21, seqValue);
	Label l3 = new Label(10, 22, seqValue);
	Label l4 = new Label(10, 23, seqValue);
	Label l5 = new Label(10, 24, seqValue);
	sheet1.addCell(l1);
	sheet1.addCell(l2);
	sheet1.addCell(l3);
	sheet1.addCell(l4);
	sheet1.addCell(l5);
	
	wbook.write();
	wbook.close();
	readwb.close();
	instream.close();
}catch(Exception e){
	e.printStackTrace();
}

3、在Beanshell取样器下,添加Beanshell断言

import jxl.*;
import java.io.*;
import java.io.File;
import java.io.FileInputStream;
import jxl.Workbook;
import jxl.Cell;
import jxl.Sheet;


// 获取当前日期
String now_date = vars.get("now_date");

// 获取课节
String now_seq = vars.get("now_seq");

//课表文件路径
//String courseFilePath = "F:/测试组共享文件/高校222/20 共用工具/11 盒子信息修改&同步&录制/公共列表/课表导入/教师课表导入模板1天.xls";
String courseFilePath = "${fileurl}" +"/教师课表导入模板1天.xls";

//打印日志
log.info("now_date===="+now_date);
log.info("now_seq===="+now_seq);
log.info("courseFilePath===="+courseFilePath);

String date = "";
String seq = "";

try{
	InputStream instream = new FileInputStream(new File(courseFilePath));
	Workbook readwb = Workbook.getWorkbook(instream);
	Sheet sheet1 = readwb.getSheet(0); 
	Cell c20 = sheet1.getCell(9,20);
	date = c20.getContents();

	Cell c10 = sheet1.getCell(10,20);
	seq = c10.getContents();

	log.info("date---"+date);
	log.info("seq---"+seq);
	
	readwb.close();
	instream.close();
}catch(Exception e){
	e.printStackTrace();
	Failure=false;
	FailureMessage="读取表格失败";
}

// 断言日期是否写入正确
if (date.equals(now_date)){
	if(seq.equals(now_seq)){
		Failure=false;
		log.info("日期和节次都正确");
	}else{
		Failure=true;
		FailureMessage="节次不正确";
		log.info("节次不正确");
	}
}else{
	Failure=true;
	FailureMessage="上课日期不正确";
	log.info("上课日期不正确");
}

 备注:java代码,最好调试过再粘贴进去,直接用Jmeter运行调试的话,只能根据每次运行报错去排查错误点,比较耗费时间,最好打开jmeter.bat程序,在cmd窗口可以看到具体报错日志。

五、中途遇到的问题:

1、excel文件路径不正确,使用绝对路径正常,换成相对路径,不对了,报文件找不到异常;

2、导包导入不全,之前使用import jxl.*,改成了使用导入具体类名才行;

3、修改后,流没有关闭,导致第二次执行的时候会报错,提示文件已打开;

4、修改后,整个表格内容被清空了,没有在原来的基础上追加修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值