Jmeter Summariser reportとその可視化


Jmeterは性能テストをしている間にrunが長い間発生する可能性があります.このようにして発生したlogは非常に大きくなり、72時間のテストを走ったことがあります.logは6 Gに達しました.このように分析するのは面倒で、JMeterはsummariser result reportを提供して、一定の時間ごとに1行のlogを打って、このようにlogは大幅に減少します.
Jmeter summariser reportの設定はbin/jmeter.properties.
#---------------------------------------------------------------------------
# Summariser - Generate Summary Results - configuration (mainly applies to non-GUI mode)
#---------------------------------------------------------------------------
#
# Define the following property to automatically start a summariser with that name
# (applies to non-GUI mode only)
summariser.name=summary
#
# interval between summaries (in seconds) default 3 minutes
summariser.interval=180
#
# Write messages to log file
summariser.log=true
#
# Write messages to System.out
#summariser.out=true

以上の設定は3分おきにjmeterに向かう.logに1行のlogを書き込む
# Combined log file (for jmeter and jorphan) log_file=jmeter.log
logのフォーマットは次のとおりです.
Creating summariser 
Created the tree successfully using /opt/JMeter/TestPlan/test.jmx
Starting the test @ Tue Jun 25 16:22:12 CST 2013 (1372148532713)
Waiting for possible shutdown message on port 4445
summary +   2075 in   107s =   19.4/s Avg:    51 Min:    12 Max:  2318 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
summary +   3753 in   180s =   20.8/s Avg:    47 Min:    12 Max:   849 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
summary =   5828 in   287s =   20.3/s Avg:    49 Min:    12 Max:  2318 Err:     0 (0.00%)
summary +   3864 in   180s =   21.4/s Avg:    46 Min:    11 Max:   634 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
summary =   9692 in   467s =   20.7/s Avg:    48 Min:    11 Max:  2318 Err:     0 (0.00%)
summary +   3847 in   180s =   21.4/s Avg:    46 Min:    11 Max:   697 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
summary =  13539 in   647s =   20.9/s Avg:    47 Min:    11 Max:  2318 Err:     0 (0.00%)

summary+はこの3分間のデータで、summary=は現在の時刻までのすべてのデータを積算します
3行目のデータを例にとると、5828は送信要求数、287 sは時間、20.3は毎秒送信要求、すなわちスループット、Avg、Min、Maxはそれぞれ平均応答時間、最小応答時間、最大応答時間であり、応答時間は要求の送信から応答の受信までの時間を指し、Errの後に続くデータはそれぞれエラー数とエラー割合である.
summariserレポートでは、単純なスクリプトを書くことで解析してグラフィックス化することができます.以下はpythonで書かれた単純なスクリプトで、平均遅延とスループットを描くことができます.使用方法は
python summary.py test.log、次はsummaryです.py内容:
import matplotlib.pyplot as plt
import re
import sys

avgtime_data=[]
mintime_data=[]
maxtime_data=[]
throughput_data=[]

logfile=open(sys.argv[1])
try:
    while True:
		line=logfile.readline()
		if line=='':
			break
		if line.startswith('summary ='):
			result=re.split(r'\s+', line)
			avgtime_data.append(result[8])
			throughput=result[6]
			throughputvalue=throughput[:-2]
			throughput_data.append(throughputvalue)
finally:
    logfile.close()

plt.figure(figsize=(8,4))
plt.ylim(0,60)
plt.plot(avgtime_data,color="red",label="Avg ResponseTime (milliseconds)")
plt.plot(throughput_data,color="green",label="ThroughPut (/s)")
frame = plt.gca()
frame.axes.xaxis.set_ticklabels([])
plt.xlabel("Duration, 2013/06/25 16:30:00 -- 2013/06/28 6:00:00, about 60 hours")
plt.title("sundong Jmeter Test Report")
plt.legend()
plt.show()