相信很多用jmeter进行接口测试的童鞋都会有这样的苦恼:同时执行上百条测试案例,如何能轻松加愉快地检查案例输出结果?仅仅靠jmeter的断言、debug sampler、察看结果树等是无法满足我们要求的!下面跟大家分享一个小技巧,利用beanshell和外部jar包来生成excel结果文件。

 
Jmeter接口自动化脚本编写流程

1、下载开源jar包

下载jxl.jar, fastjson.jar(本文以json接口为例),并放到jmeter的lib目录下。

2、开发外部jar包

(1)创建CWResultFile java项目,创建CWOutputFile类,该类包含两个方法,cOutputFile用于创建结果文件,wOutputFile用于写结果文件。


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

/*

*导入jxl.jar;

*后续扩充功能,sheet2增加测试报告展现;------待实现;

*/

public class CWOutputFile {

/*

* wOutputFile方法写结果文件

* wOutputFile(文件路径,案例编号,测试验证点,预期结果,实际结果,错误码,状态码,响应结果)

*/

public  void wOutputFile(String filepath, String caseNo,

String testPoint, String preResult, String fresult, String errCode,

String status, String respond) throws IOException,

RowsExceededException, WriteException, BiffException {

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 labetest1 = new Label(0, rsRows, caseNo);    // 第1列--案例编号;

Label labetest2 = new Label(1, rsRows, testPoint); // 第2列--验证测试点;

Label labetest3 = new Label(2, rsRows, preResult); // 第3列--预期结果;

Label labetest4 = new Label(3, rsRows, fresult);  // 第4列--实际结果;

Label labetest5 = new Label(4, rsRows, errCode);  // 第5列--错误码;

if (preResult == fresult) {

result = "通过";

wcf.setBackground(Colour.BRIGHT_GREEN); // 通过案例标注绿色

} else {

result = "不通过";

wcf.setBackground(Colour.RED);          // 不通过案例标注红色

}

Label labetest6 = new Label(5, rsRows, result, wcf); // 第6列--执行结果;

Label labetest7 = new Label(6, rsRows, status);      // 第7列--状态码

Label labetest8 = new Label(7, rsRows, respond);    // 第8列--响应结果

readsheet.addCell(labetest1);

readsheet.addCell(labetest2);

readsheet.addCell(labetest3);

readsheet.addCell(labetest4);

readsheet.addCell(labetest5);

readsheet.addCell(labetest6);

readsheet.addCell(labetest7);

readsheet.addCell(labetest8);

}

wbook.write();

wbook.close();

}

/*

* cOutputFile方法创建输出文件,传入参数为交易类型,如开户等;

* cOutputFile方法返回文件路径,作为wOutputFile的入参;

*/

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); // 获取时间戳

// 相对路径默认为 apache-jmeter-3.1\bin

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); // createSheet(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); // 设置列宽度setColumnView(列号,宽度)

Sheet.setColumnView(1, 30);

Sheet.setColumnView(2, 35);

Sheet.setColumnView(3, 35);

Sheet.setColumnView(4, 18);

Sheet.setColumnView(5, 11);

Sheet.setColumnView(6, 11);

Sheet.setColumnView(7, 50);

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);

Label labe60 = new Label(6, 0, "返回状态", headwcf);

Label labe70 = new Label(7, 0, "响应结果", headwcf);

Sheet.addCell(labe00);

Sheet.addCell(labe10);

Sheet.addCell(labe20);

Sheet.addCell(labe30);

Sheet.addCell(labe40);

Sheet.addCell(labe50);

Sheet.addCell(labe60);

Sheet.addCell(labe70);

writeBook.write();

writeBook.close();

}

return filepath;

}

}

 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.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;/**导入jxl.jar;*后续扩充功能,sheet2增加测试报告展现;------待实现;*/public class CWOutputFile {/** wOutputFile方法写结果文件* wOutputFile(文件路径,案例编号,测试验证点,预期结果,实际结果,错误码,状态码,响应结果)*/public  void wOutputFile(String filepath, String caseNo,String testPoint, String preResult, String fresult, String errCode,String status, String respond) throws IOException,RowsExceededException, WriteException, BiffException {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 labetest1 = new Label(0, rsRows, caseNo);    // 第1列--案例编号;Label labetest2 = new Label(1, rsRows, testPoint); // 第2列--验证测试点;Label labetest3 = new Label(2, rsRows, preResult); // 第3列--预期结果;Label labetest4 = new Label(3, rsRows, fresult);   // 第4列--实际结果;Label labetest5 = new Label(4, rsRows, errCode);   // 第5列--错误码;if (preResult == fresult) {result = "通过";wcf.setBackground(Colour.BRIGHT_GREEN); // 通过案例标注绿色} else {result = "不通过";wcf.setBackground(Colour.RED);          // 不通过案例标注红色}Label labetest6 = new Label(5, rsRows, result, wcf); // 第6列--执行结果;Label labetest7 = new Label(6, rsRows, status);      // 第7列--状态码Label labetest8 = new Label(7, rsRows, respond);     // 第8列--响应结果readsheet.addCell(labetest1);readsheet.addCell(labetest2);readsheet.addCell(labetest3);readsheet.addCell(labetest4);readsheet.addCell(labetest5);readsheet.addCell(labetest6);readsheet.addCell(labetest7);readsheet.addCell(labetest8);}wbook.write();wbook.close();}/** cOutputFile方法创建输出文件,传入参数为交易类型,如开户等;* cOutputFile方法返回文件路径,作为wOutputFile的入参;*/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); // 获取时间戳// 相对路径默认为 apache-jmeter-3.1\binString 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); // createSheet(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); // 设置列宽度setColumnView(列号,宽度)Sheet.setColumnView(1, 30);Sheet.setColumnView(2, 35);Sheet.setColumnView(3, 35);Sheet.setColumnView(4, 18);Sheet.setColumnView(5, 11);Sheet.setColumnView(6, 11);Sheet.setColumnView(7, 50);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);Label labe60 = new Label(6, 0, "返回状态", headwcf);Label labe70 = new Label(7, 0, "响应结果", headwcf);Sheet.addCell(labe00);Sheet.addCell(labe10);Sheet.addCell(labe20);Sheet.addCell(labe30);Sheet.addCell(labe40);Sheet.addCell(labe50);Sheet.addCell(labe60);Sheet.addCell(labe70);writeBook.write();writeBook.close();}return filepath;}}

(2)导出CWResultFile.jar包,并放到jmeter的lib/ext目录下。

3、脚本示例

(1)准备案例数据

 
testcase.csv

(2)调用cOutputFile方法创建结果文件

 
ps:此处使用“仅一次控制器”是因为对于testcase.csv的N条案例数据我们只需一个结果文件即可;

(3)调用wOutputFile方法写结果文件

 
调用wOutputFile方法写文件

(4)生成结果文件

 
以时间戳命名输出结果文件,确保唯一性
 
输出结果文件内容如上所示

4、下一阶段展望

持续集成;

作者:Tomandy
链接:https://www.jianshu.com/p/eebbeaf80fd2
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Jmeter—生成excel结果文件的更多相关文章

  1. PHP生成excel表格文件并下载

    本文引自网络,仅供自己学习之用. 利用php导出excel我们大多会直接生成.xls文件,这种方便快捷. function createtable($list,$filename){ header(& ...

  2. java生成excel报表文件

    此次简单的操作将数据从数据库导出生成excel报表以及将excel数据导入数据库 首先建立数据库的连接池: package jdbc; import java.io.FileInputStream; ...

  3. 生成Excel.xlsx文件 iOS

    使用到的三方库 https://github.com/jmcnamara/libxlsxwriter cocoapods导入 pod 'libxlsxwriter', '~> 0.8.3' 1. ...

  4. springboot2.1.8使用poi导出数据生成excel(.xlsx)文件

    前言:在实际开发中经常需要将数据库的数据导出成excel文件,poi方式则是其中一种较为常用的导出框架.简单读取excel文件在之前的一篇有说明 本项目实现需求:user发出一个导出student信息 ...

  5. 根据xlsx模板生成excel数据文件发送邮件代码

    package mail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...

  6. unity 读取excel表 生成asset资源文件

    做unity 项目也有一段时间了,从unity项目开发和学习中也遇到了很多坑,并且也从中学习到了很多曾经未接触的领域.项目中的很多功能模块,从今天开始把自己的思路和代码奉上给学渣们作为一份学习的资料. ...

  7. 如何生成excel文件作为图像识别结果

    如何生成excel文件作为图像识别结果 在进行大规模图像处理的时候,如果能够以表格的形式生成结果文件,将非常的直观.这个时候,选择excel作为结果输出文件,将是合适的. 查询相关资料,有很多关于ex ...

  8. [转]powerDesigner生成excel版本的数据库文件

    powerDesigner生成excel版本的数据库文件 出处:http://ray-allen.iteye.com/blog/1893347 脚本 excel  今天收到一个需求,要把数据库设计给一 ...

  9. php生成excel文件的简单方法

    生成excel文件,最简单的莫过于把数据库的数据导入到excel就行了. 生成excel 当然使用的是 phpExcel http://www.jbxue.com/tags/phpexcel.html ...

随机推荐

  1. javascript(6)

    javascript的冒泡排序 var arr=[5,0,-56,900,12]; //大的排序次数(arr.length-1) var flag=false; for(var i=0;i<=a ...

  2. listen 74

    Genes Link Touch and Hearing Sound and touch may seem completely separate, except possibly when play ...

  3. listen and translation exercise 53

    It was hard work and there weren't any interesting things for him. You should be an expert with comp ...

  4. php设置编码格式的方法

    a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312"),静态页面添加<meta htt ...

  5. bzoj 4503 两个串 快速傅里叶变换FFT

    题目大意: 给定两个\((length \leq 10^5)\)的字符串,问第二个串在第一个串中出现了多少次.并且第二个串中含有单字符通配符. 题解: 首先我们从kmp的角度去考虑 这道题从字符串数据 ...

  6. 【LeetCode】062. Unique Paths

    题目: A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...

  7. tcpdump抓包工具用法说明

    tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包. 例如: ...

  8. TTY,Console以及Terminal

    TTY可以理解是一种终端显示.可以在/dev文件夹看到多个tty开头的文件,可以通过alt+Fn(n=1~6)来进行切换.这个是不是和GUI场景下的多个Terminal窗口是一致的呢? 伪TTY是指一 ...

  9. 优化EF的性能

    Entity Framework的性能优化: 1.使用MergeOption.NoTracking  (发现添加这个代码后, 导致"The object cannot be deleted ...

  10. WPF 中 UserControl作为另一个Process宿主到Window里, ErrorTemplate的默认红框没有出现

    最近做WPF项目遇到一个问题, 我有2个process, 一个Process里只有Usercontrol, 另一个Process获取前一个Process中Usercontrol并host到当前的win ...