Jmeter排忧解难—生成excel结果文件

  相信很多用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;

}

}


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

  3、脚本示例

(1)准备案例数据

testcase.csv

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

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

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

调用wOutputFile方法写文件

(4)生成结果文件

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

  4、下一阶段展望

持续集成;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容