LoginSignup
2
2

More than 5 years have passed since last update.

JMeterのjtlファイルをpandasを利用して解析する

Last updated at Posted at 2017-05-12

背景

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して処理ごとに統計量を取る事もできると思うが、今回は不要なので見送り。
処理は一瞬もたつくので、やリたい事に対してやや大げさな気もするが自由度や拡張性を考えるとメリットは大きい。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2