基於 jmeter 和 shell 的介面效能自動化
阿新 • • 發佈:2018-12-20
jmeter+shell
1. 總體需求
由於效能測試中涉及的查詢介面多,版本迭代頻繁,版本更新後自動跑一輪查詢業務的效能,可以及時發現一些開發修復bug觸發的非預期的bug,利用晚上時間快速重測效能介面可以解放人工測試的時間,讓測試人員可以把精力集中在測試複雜介面,調優分析效能瓶頸上。
2. 實現流程
自動化的場景模擬真實手工測試,操作步驟和手工測試一樣。
3.準備工作
準備軟體:
系統環境:CentOS release 6.7 (Final)
核心版本:Linux localhost 2.6.32-573.7.1.el6.x86_64
測試工具:apache-jmeter-2.13 http://jmeter.apache.org/download_jmeter.cgi
執行JDK環境:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
python環境:Python 2.6.6
伺服器監控nmon:http://nmon.sourceforge.net/pmwiki.php?n=Site.Download
4.具體實現
4.1用例執行
Jmeter的執行支援命令列的方式執行,並且會有一個粗略報告,我們取這個報告裡面的執行結果並儲存下來
Jmeter的執行結果:
[email protected]bin]# ./jmeter -n -t singin.jmx Creating summariser <summary> Created the tree successfully using singin.jmx Starting the test @ Mon Dec 14 16:42:33 CST 2015 (1450082553651) Waiting for possible shutdown message on port 4445 summary + 1 in 1s = 1.3/s Avg: 268 Min: 268 Max: 268 Err: 0(0.00%) Active: 1 Started: 1 Finished: 0 summary + 2 in 0s = 50.0/s Avg: 17 Min: 14 Max: 20 Err: 0 (0.00%) Active: 0 Started: 1 Finished: 1 summary = 3 in 1s = 3.7/s Avg: 100 Min: 14 Max: 268 Err: 0 (0.00%) Tidying up ... @ Mon Dec 14 16:42:34 CST 2015 (1450082554551) ... end of run
由sumary統計行可以得到我們需要收集的測試結果:
主流程指令碼
#/bin/bash source /etc/profile Jmeter_Home='/usr/local/apache-jmeter-2.13' TestReport='/data/loadtest/report' LogDIR='/data/loadtest/log' Date=`date +"%F"` cd /data/loadtest/ >summary.txt #清理上次執行結果 run_test() { #獲取測試用例 for i in `find ./testcase/ -name *.jmx|awk -F '.' '{print $2}'` do casename=`echo "$i"|awk -F '/' '{print $4}'` >log/${casename}.txt echo -n "$i ">>summary.txt #發起監控 ./monitor.sh >/dev/null 2>&1 & #開始執行測試 $Jmeter_Home/bin/jmeter -n -t /data/loadtest${i}.jmx >>log/${casename}.txt & sleep 310 #如果執行310s還未結束,強制終止執行 ps -ef | grep java |grep -v grep | awk '{print $2}' |xargs kill -9 sleep 3 #提取結果 grep 'summary =' log/${casename}.txt| tail -1 |awk -F '[\t / (]+' '{if($7>10000 && $17<10.00){printf("%s %d %d %d %.2f% pass ",$7,$10,$3,$16,100-$17)}else{printf("%s %d %d %d %.2f%% fail ",$7,$10,$3,$16,100-$17)}}'>>summary.txt cat monitor.txt >>summary.txt echo '' >> summary.txt #獲取關鍵日誌 ssh 10.1.30.54 'tail -n 300 /data/logs/fcuh-user/catalina.out'>${LogDIR}${i}.log done } run_test sleep 3 #生成html報告 sh genHTML.sh sleep 1 #傳送郵件 python sendmail.py