上一篇文章中提到,如何提高 Jmeter 集成 Bug關係系統後提交缺陷的效率,今天繼續討論 Jmeter 自動生成 Excle 結果的方法。
相信很多用 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.1in
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)生成結果文件
以時間戳命名輸出結果文件,確保唯一性
輸出結果文件內容如上所示
公眾號:軟件測試資源站(ID:testpu)
關注後私信回覆 入群,加入自學社群聯盟。
QQ 群:330374464
閱讀更多 馬蟻蛋 的文章