Jmter-将测试结果输出到Excel中🧡
一、环境准备
1.下载jxl.jar包和CWResultFile.jar 提取码:1020
jxl.jar是通过java操作excel表格的工具类库,是由java语言开发而成的。
2.将下载的jxl.jar和CWResultFile.jar包拷贝在ext扩展库下
eg:E:\prgram\apache-jmeter-5.3\lib\ext;
3.准备两个CVS格式的文档,其中一个内容为测试数据文档,另外一个文档为设计的测试用例文档;
4.某系统登录脚本已编写好,可使用固定用户名及口令进行登录;
二、编写脚本
1.CVS保存测试数据,上传至CVS Data Set Config,然后参数化登录的帐号及密码,变量名之间用‘,’隔开;
2.CVS保存测试用例,上传至CVS Data Set Config,然后参数化用例编号、用例标题及预期结果,变量名之间用‘,’隔开;
3.参数化http请求参数值;
4.在POST请求下,添加正则表达式,提取响应数据,存放在变量fResult中;
5.创建一个仅一次控制器(逻辑控制器),使得最后生成的Excel文件只有一个;
6.添加一个beanshell取样器(放在仅一次控制器下),用户创建Excel用例模板,在beanshell里调用jar包里的创建Excel文件方法,并将测试模板的filePath存到jmeter里;
t=new CWOutputFile();
String filePath=t.cOutputFile("测试结果");
vars.put("filePath",filePath);//转为jMeter变量,方便后期获取。
7.将测试结果写入Excel,添加一个新的beanshell取样器;
t=new CWOutputFile();
String filePath=vars.get("filePath");
String caseNo=vars.get("caseNo");
String testPoint=vars.get("testPoint");
String testData="{\"loginName\":\"${loginName}\",\"password\":\"${password}\"}";
String preResult=vars.get("preResult");
String fResult=vars.get("fResult");//用get方法可以确保获取到的是字符串,里面传递的是变量名,不需要用${变量名}这种方式
t.wOutputFile(filePath,caseNo,testPoint,testData,preResult,fResult);
8.最后生成格式为:测试结果_outPut__20210414001257.xls的结果文档;
附录:eclipse安装包
代码实现:
1.新建一个Java Project–>CWResultFile,并导入jxl.jar包,如下所示:
2.创建一个名为CWOutputFile.java的文件;
3.将代码全部拷贝至该文件中;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import jxl.Cell;
import jxl.JXLException;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class CWOutputFile {
/*
* wOutputFile方法写结果文件,wOutputFile(文件路径,案例编号,用例编号,测试数据,预期结果,实际结果)
*/
public void wOutputFile(String filePath,String caseNo,String testPoint,String testData,String preResult,String fResult) throws IOException, BiffException, WriteException{
File outPut=new File(filePath);
String result="";
InputStream instream=new FileInputStream(filePath);
Workbook readWB=Workbook.getWorkbook(instream);
WritableWorkbook wBook=Workbook.createWorkbook(outPut, readWB);//根据文件创建一个操作对象;
WritableSheet readSheet=wBook.getSheet(0);
//int rsColumns=readSheet.getColumns();//获取sheet表中所包含的总列数
int rsRows=readSheet.getRows();//获取sheet表中所包含的总行数
WritableFont font=new WritableFont(WritableFont.createFont("宋体"),10,WritableFont.NO_BOLD);//字体样式
WritableCellFormat wcf=new WritableCellFormat(font);
Cell cell1=readSheet.getCell(0, rsRows);
if(cell1.getContents().equals("")) {
Label lableTest1=new Label(0,rsRows,caseNo);//第1列-用例编号;
Label lableTest2=new Label(1,rsRows,testPoint);//第2列-用例标题;
Label lableTest3=new Label(2,rsRows,testData);//第3列-测试数据;
Label lableTest4=new Label(3,rsRows,preResult);//第4列-预期结果;
Label lableTest5=new Label(4,rsRows,fResult);//第5列-实际结果;
if(preResult.equals(fResult)) {
result="通过";
wcf.setBackground(Colour.BRIGHT_GREEN);//通过案例则标注绿色
}else {
result="不通过";
wcf.setBackground(Colour.RED);//不通过案例则标注红色
}
Label lableTest6=new Label(5,rsRows,result,wcf);//第6列-执行结果;
readSheet.addCell(lableTest1);
readSheet.addCell(lableTest2);
readSheet.addCell(lableTest3);
readSheet.addCell(lableTest4);
readSheet.addCell(lableTest5);
readSheet.addCell(lableTest6);
}
wBook.write();
wBook.close();
}
/** cOutputFile方法创建输出文件,传入参数为交易类型,如开户等;* cOutputFile方法返回文件路径,作为wOutputFile的入参;
* @throws IOException
* @throws WriteException */
public String cOutputFile(String tradeType) throws IOException, WriteException {
// TODO Auto-generated method stub
String temp_str="";
Date dt=new Date();
SimpleDateFormat sdf =new SimpleDateFormat("yyyyMMddHHmmss");
temp_str=sdf.format(dt);//获取时间戳,相对默认路径为apache-jmeter-3.1\bin
String filePath="E:\\\\"+tradeType+"_outPut_"+"_"+temp_str+".xls";//以时间戳命名结果文件,确保唯一
File outPut=new File(filePath);
if(!outPut.isFile()) {
outPut.createNewFile();//如果指定文件不存在,则新建该文件;
WritableWorkbook writeBook=Workbook.createWorkbook(outPut);
WritableSheet sheet=writeBook.createSheet("输出结果",0);//creatSheet(sheet名称,第几个sheet)
WritableFont headFont=new WritableFont(WritableFont.createFont("宋体"),11,WritableFont.BOLD);//字体样式
WritableCellFormat headwcf=new WritableCellFormat(headFont);
headwcf.setBackground(Colour.GRAY_25);//灰色颜色
sheet.setColumnView(0, 11);//设置列宽度setCoumnView(列号,宽度)
sheet.setColumnView(1, 30);
sheet.setColumnView(2, 35);
sheet.setColumnView(3, 35);
sheet.setColumnView(4, 18);
sheet.setColumnView(5, 11);
headwcf.setAlignment(Alignment.CENTRE);//设置文字居中对齐方式
headwcf.setVerticalAlignment(VerticalAlignment.CENTRE);//设置垂直居中
Label label00=new Label(0, 0, "用例编号", headwcf);//Lable(列号,行号,内容);
Label label10=new Label(1, 0, "用例标题", headwcf);
Label label20=new Label(2, 0, "测试数据", headwcf);
Label label30=new Label(3, 0, "预期结果", headwcf);
Label label40=new Label(4, 0, "实际结果", headwcf);
Label label50=new Label(5, 0, "执行结果", headwcf);
sheet.addCell(label00);
sheet.addCell(label10);
sheet.addCell(label20);
sheet.addCell(label30);
sheet.addCell(label40);
sheet.addCell(label50);
writeBook.write();
writeBook.close();
}
return filePath;
}
}
4.导出为jar文件;
注:导出的jar包的名称需为:CWResultFile.jar,导出后的jar包放在lib/ext下