Jmeter将测试结果写入到Excel中

一、Jmeter写入结果到excel环境准备

(1)下载:jxl.jar这个jar包

(2)下载之后,放到jmeter的安装路径下发lib目录下的ext中

(3)jxl.jar的作用,完成对excel的读写及修改操作

链接:https://pan.baidu.com/s/1W-opSEqJZVkjsCwmxBfmAw
提取码:isaq

二、如何利用Jmeter操作excel的思路分析

excel中一般有三要素:workbook、sheet、cell,要想把结果存储到指定的单元格中,那么就必须确定好这三个元素依次来定位

(1)先获取excel的文件名

(2)获取表单名

(3)获取单元格的坐标

获取结果,写入到对应的单元格中去

需要利用beanshell写Java代码,获取对应的数据写入到excel里面去

三、Jmeter写入结果到excel

我们需要写Java代码,利用插件完成对excel的创建以及excel的数据读写,按照如下步骤操作:

(1)编写Java代码

(2)引入相对应需要的jar包

导入jar包的方法

 

 

 

 

 

代码:

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.LabelCell;
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;

public class CWOutputFile {
    
    /**
     * wOutputFile写结果文件   wOutputFile(文件路径、用例编号、用例标题、预期结果、实际结果、测试结果)
     * @throws IOException 
     * @throws BiffException 
     * @throws WriteException 
     */
    public void wOutputFile(String filepath,String caseNo,String testPoint,String testData,String preResult,String fresult) throws BiffException, IOException, 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);  //定位到文件的第一个sheet页签
        int rsRows = readsheet.getRows();   //获取sheet页签的总行数
        
        /******************设置字体样式***************************/
        WritableFont font = new WritableFont(WritableFont.createFont("宋体"),10,WritableFont.NO_BOLD);
        WritableCellFormat wcf = new WritableCellFormat(font);
        /****************************************************/
        
        Cell cell = readsheet.getCell(0,rsRows);  //获取sheet页的单元格
        if(cell.getContents().equals("")){
            Label labetest1 = new Label(0,rsRows,caseNo);   //第一列:用例编号
            Label labetest2 = new Label(1,rsRows,testPoint);//第二列:用例标题
            Label labetest3 = new Label(2,rsRows,testData); //第三列:测试数据
            Label labetest4 = new Label(3,rsRows,preResult);//第四列:预期结果
            Label labetest5 = new Label(4,rsRows,fresult); //第五列:实际结果
            if(preResult.equals(fresult)){
                result = "通过";
                wcf.setBackground(Colour.BRIGHT_GREEN); //预期结果和实际结果相同,测试通过
            }
            else{
                result = "不通过";
                wcf.setBackground(Colour.RED);  //预期结果和实际结果不相同,测试不通过
            }
            Label labetest6 = new Label(5,rsRows,result,wcf);//第六列:测试结果
            readsheet.addCell(labetest1);
            readsheet.addCell(labetest2);
            readsheet.addCell(labetest3);
            readsheet.addCell(labetest4);
            readsheet.addCell(labetest5);
            readsheet.addCell(labetest6);
        }
        wbook.write();
        wbook.close();
    }
    
    /**cOutputFile 创建输出Excel文件 cOutputFile,tradeType为文件名称前缀,返回结果:文件路径,作为wOutputFile写入结果文件的入参
     * @throws IOException 
     * @throws WriteException */
    public String cOutputFile(String tradeType) throws IOException, WriteException{
        String temp_str = "";
        Date dt = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        temp_str = sdf.format(dt); //获取时间戳
        String filepath = "D:\\\\"+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);  //命名sheet
            WritableFont headfont = new WritableFont(WritableFont.createFont("宋体"),11,WritableFont.BOLD);//设置首行字体为宋体,11号,加粗
            WritableCellFormat headwcf = new WritableCellFormat(headfont);
            headwcf.setBackground(Colour.GRAY_25);
            sheet.setColumnView(0, 11); //设置列宽
            sheet.setColumnView(1, 20);
            sheet.setColumnView(2, 40);
            sheet.setColumnView(3, 10);
            sheet.setColumnView(4, 10);
            sheet.setColumnView(5, 10);
            headwcf.setAlignment(Alignment.CENTRE); //文字居中
            headwcf.setVerticalAlignment(VerticalAlignment.CENTRE);
            Label labe00 = new Label(0,0,"用例编号",headwcf); //写入内容:Label(列号,行号,内容)
            Label labe10 = new Label(1,0,"用例标题",headwcf); 
            Label labe20 = new Label(2,0,"测试数据",headwcf);
            Label labe30 = new Label(3,0,"预期结果",headwcf);
            Label labe40 = new Label(4,0,"实际结果",headwcf);
            Label labe50 = new Label(5,0,"执行结果",headwcf);
            sheet.addCell(labe00);
            sheet.addCell(labe10);
            sheet.addCell(labe20);
            sheet.addCell(labe30);
            sheet.addCell(labe40);
            sheet.addCell(labe50);
            writeBook.write();
            writeBook.close();
        }
        return filepath;
    }

}

 

保存路径:String filepath = "D:\\develop\\"+tradeType+"_output_" + "_" + temp_str + ".xls";

 

将上面的代码导出成jar包:CWOutputFile.jar,将导出的包放到Jmeter安装目录下的lib–>ext目录下
选择CWOutputFile项目–Export —java(JAR file)

 

 

 

 

四、Jmeter测试数据结构准备

我们需要准备对应的测试数据,一共有两份:

1、测试用例
测试用例.csv如下:

 

 2、参数化数据

测试数据.csv如下:

 

线程组循环次数设置成:2

线程组-->CSV Data Set Config,保存测试用例,并设置相关属性

线程组-->CSV Data Set Config,保存测试数据,并设置相关属性

 

线程组-->HTTP请求默认值

 

线程组-->HTTP请求(登录)

 

 


线程组-->察看结果树,可以查看到登录接口的响应数据

五、Jmeter写入结果到Excel
线程组-->HTTP请求(登录)-->正则表达式提取器,提取登录接口的响应数据

线程组-->仅一次控制器
线程组-->仅一次控制器-->BeanShell Sampler,创建一个Excel

import com.hxs.file.CWOutputFile;

t=new CWOutputFile();//实例化对象 String filePath=t.cOutputFile("测试结果");//调用方法,获取到文件名保存到变量中 vars.put("filePath",filePath);//转为jmeter变量,方便获取

 


线程组-->BeanShell Sampler,将测试数据写入Excel中

import com.hxs.file.CWOutputFile;
t=new CWOutputFile();
String testData="{\"name\":\"${name}\",\"email\":\"${email}\",\"pwd\":\"${pwd}\",\"pwdcf\":\"${pwdcf}\"}";
String preResult=vars.get("preResult");
String fResult=vars.get("fResult");
t.wOutPutFile("${filePath}", "${caseNo}", "${testPoint}", testData, preResult, fResult);

 

线程组-->察看结果树

6.遇到的问题
在将测试结果写入Excel的过程中,遇到了一个问题,如下图所示:

 

查了关于BeanShell脚本的资料,发现写的BeanShell脚本有问题,如下:

 

在Jmeter中我们经常会使用正则表达式去获取接口返回的参数,在引用参数的时候,可以直接使用“${参数名}”,如果这个参数的格式不带有任何符号需要转义的时候,那么这种引用方式就没有问题,否则Jmeter就没法识别。这时可以用vars.get("参数名")的方法将Jmeter变量先变成Java变量,然后再去操作,就不会报错!

可将上述BeanShell脚本修改成如下:

 

 参考:

https://www.cnblogs.com/zhangwuxuan/p/12329078.html

https://www.cnblogs.com/wzl0916/p/13657122.html

posted on 2021-04-26 22:45  uestc2007  阅读(1030)  评论(0编辑  收藏  举报

导航