中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現JMeter自定義日志與日志分析

發布時間:2021-12-17 12:31:00 來源:億速云 閱讀:171 作者:小新 欄目:開發技術

這篇文章主要介紹如何實現JMeter自定義日志與日志分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1 JMeter日志概覽

JMeter與Java程序一樣,會記錄事件日志,日志文件保存在bin目錄中,名稱為jmeter.log。當然,我們也可以在面板中直接察看日志,點擊右上角黃色標志物可以打開日志面板,再次點擊收起。

如何實現JMeter自定義日志與日志分析

可見,通過日志可以幫助我們定位一些不容易直接察覺的問題。

另外,JMeter可以很方便地設置日志輸出級別:

如何實現JMeter自定義日志與日志分析

2 JMeter自定義日志

前面所看到的都是系統日志,也就是JMeter本身所打印的日志。如果我們自己想輸出一些日志,該怎么辦呢?這個一般就要借助Beanshell了。

例如,一個接口響應結果如下:

如何實現JMeter自定義日志與日志分析

在該請求下添加Beanshell斷言,運行后,日志中輸出了相應內容:

如何實現JMeter自定義日志與日志分析

import org.apache.log4j.Logger;

// 獲取接口的響應數據
String result = prev.getResponseDataAsString();

if(result.contains("error")){
	Failure=true;
	log.error("接口失敗: " + result);
}

當然,自定義日志最重要的作用還是在Linux服務器上運行腳本時,因為沒有界面,排查問題更加麻煩。

承接前文,將JMeter腳本部署到Linux服務器上進行壓力測試,存在一些不便之處:

  • 吞吐量統計中包括了所有請求,包括一些輔助請求(beanshell請求),導致真正的tps統計數據不準確。

  • 業務是否成功,以及具體失敗原因難以排查。

首先,測試接口的響應內容如圖所示:

如何實現JMeter自定義日志與日志分析

在接口下添加2個【JSON Path Extractor】,分別用于在測試接口的響應內容里提取code、orderId。

如何實現JMeter自定義日志與日志分析

如何實現JMeter自定義日志與日志分析

再在測試接口下添加【BeanShell斷言】:

import org.apache.log4j.Logger;

// 獲取接口的響應數據
String result = prev.getResponseDataAsString();
// 從JSON提取器中獲取code和orderId
String code = vars.get("code");
String orderId = vars.get("orderId");

if(code.equals("0")){
	log.info("place order success, orderId=" + orderId);
}else{
	Failure=true;
	log.error("FailureMessage: " + result);
}

將該腳本上傳到Linux中,順便寫個啟動腳本:start.sh

#!/bin/bash
jmeter_log=/home/test/jmeter.log

if [ -f "$jmeter_log" ]; then
 // 將原日志文件備份后刪除
 cp $jmeter_log /home/test/jmeter.log_back
 rm -rf $jmeter_log
fi
// 啟動JMeter腳本
jmeter -n -t /home/test/test.jmx -l /home/test/result/test.jtl

運行腳本后,cat jmeter.log,效果如下:

如何實現JMeter自定義日志與日志分析

3 JMeter日志分析

針對該日志寫一個日志分析腳本logAnalysis.sh

#!/bin/bash
jmeter_log=/home/test/jmeter.log
thread_num=`grep 'Thread started' $jmeter_log|tail -n 1|awk -F"-" '{print$6}'`
start_time=`grep 'All thread groups have been started' $jmeter_log|awk -F" " '{print $1,$2}'|awk -F"," '{print $1}'`
end_time=`grep 'Shutdown hook ended' $jmeter_log|awk -F" " '{print $1,$2}'|awk -F"," '{print $1}'`

final_success_time=`grep "place order success" $jmeter_log|tail -n 1|awk -F" " '{print$1,$2}'|awk -F"," '{print$1}'`
success_running_time=$[ $(date -d "$final_success_time" +%s) - $(date -d "$start_time" +%s) ]
running_time=$[ $(date -d "$end_time" +%s) - $(date -d "$start_time" +%s) ]
cancle_times=`grep "cancle orders success" $jmeter_log|wc -l`   //撤單次數

success_times=`grep success $jmeter_log|wc -l`   // 成功次數
failure_times=`grep FailureMessage $jmeter_log|wc -l`
request_times=$[ $success_times+$failure_times ]
error_rate=`echo "scale=2; $failure_times/$request_times*100" | bc`
qps=$[ $request_times/$running_time ]
throughput=$[ $success_times/$success_running_time ]

echo -e '線程數:'$thread_num
echo -e '請求次數:' $request_times
echo -e '成功次數:' $success_times
echo -e '失敗次數:' $failure_times
echo -e '撤單次數:'$cancle_times
echo -e '錯誤率:' $error_rate'%'
echo -e '開始時間:'$start_time
echo -e '結束時間:'$end_time
echo -e '最后成功請求時間:'$final_success_time
echo -e '請求時間:' $running_time 
echo -e '成功運行時間:'$success_running_time
echo -e '吞吐量:'$throughput'/s'
echo -e 'QPS:'$qps'/s'

當JMeter腳本運行一段時間后,執行logAnalysis.sh,效果如下:

線程數:180
請求次數: 131691
成功次數: 131493
失敗次數: 198
撤單次數:141
錯誤率: 0%
開始時間:2018-11-28 15:34:54
結束時間:2018-11-28 15:37:17
最后成功請求時間:2018-11-28 15:37:17
請求時間: 143
成功運行時間:143
吞吐量:919/s
QPS:920/s

可以看到,輸出信息全面清晰。這樣,我們就可以在linux下運行JMeter壓測腳本時,實時獲取壓測詳情了。

以上是“如何實現JMeter自定義日志與日志分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜南县| 新建县| 米易县| 观塘区| 镇康县| 平顶山市| 怀集县| 都昌县| 拉孜县| 卓资县| 来凤县| 英吉沙县| 普陀区| 应城市| 富源县| 富蕴县| 牡丹江市| 潜山县| 成都市| 萨嘎县| 浪卡子县| 洛隆县| 马关县| 红安县| 旌德县| 固安县| 内江市| 抚州市| 屏东市| 南漳县| 曲阳县| 田林县| 本溪市| 巫溪县| 沽源县| 永嘉县| 陆丰市| 阆中市| 基隆市| 宁武县| 界首市|