背景
JMeterで負荷テストや性能評価を行なっているが、出力されるjtlファイルをいちいちJMeterのGUIモードで開くのが面倒なのでpandasで計算してみる。
#動作確認バージョン
python 2.7.11
JMeter 3.1
#JMeterの実行とjtlファイルの取得
以下のようにJMeterをコマンドモードで実行し、jtlファイル(csv形式)を取得する。
jmeter.bat -n -t test.jmx -l result.jtl
#統計量の計算例
###jtlファイルの読み込みと簡単な統計量の計算
csv形式だと1行でDataFrameの形式にできるので楽。
import pandas as pd
# jtlファイルの読み込み
df = pd.read_csv(jtl_file_name)
# 対象列の取り出し(ここでは開始時間と、経過時間)
df = df.loc[:, ['timeStamp', 'elapsed']]
# 総スレッド数
cnt = len(df.index)
# 最小値
min = df['elapsed'].min()
# 最大値
max = df['elapsed'].max()
# 平均値
avg = df['elapsed'].mean()
# 標準偏差
std = df['elapsed'].std(ddof=False)
###Throughput(#/sec)の計算
総スレッド数を、処理全体でかかった時間で割る。
以下などを参考にした。
https://jmeter.apache.org/usermanual/glossary.html
# 終了時間を得るために、各スレッドの開始時間と経過時間を足して新たな列として追加。
df['end_time'] = df['timeStamp'] + df['elapsed']
# 開始時間の最小値を取得
start = df['timeStamp'].min()
# 終了時間の最大値を取得
end = df['end_time'].max()
# 総スレッド数を、処理全体でかかった時間で割る。秒数にするため1000かける。
tp = float(cnt)*1000.0/(end - start)
#感想
pandas便利。
group byして処理ごとに統計量を取る事もできると思うが、今回は不要なので見送り。
処理は一瞬もたつくので、やリたい事に対してやや大げさな気もするが自由度や拡張性を考えるとメリットは大きい。