1. 程式人生 > >Jmeter—生成excel結果文件

Jmeter—生成excel結果文件

nsh 開戶 ebp 集成 測試 exception str pre -o

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

}

}

技術分享圖片
1 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;}}
View Code


(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結果文件