こんにちは。
JMeter が出力する結果を Google のスプレッドシートに出力してみようと考えまして、調べてみると Python に便利なライブラリがあったんで作ってみました。
※ 下記の JMeter デプロイ用 Playbook にも入れているのでよければご利用くださいませ。
https://github.com/keisukesanuki/jmeter-MS
Python スクリプト
#!/usr/bin/python3 import gspread import json import csv import sys import itertools # シークレットキーを絶対パスで指定 SECRETJSON = "/usr/local/jmeter/bin/sacred-drive.json" # スプレッドシートキーを定義 SPREADSHEET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' ############################################################################ ## 関数 # 数字と文字コンバーター def num2alpha(num): if num<=26: return chr(64+num) elif num%26==0: return num2alpha(num//26-1)+chr(90) else: return num2alpha(num//26)+chr(64+num%26) ############################################################################# ## 認証 # お約束 from oauth2client.service_account import ServiceAccountCredentials scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] # ダウンロードした json ファイルを定義 credentials = ServiceAccountCredentials.from_json_keyfile_name(SECRETJSON, scope) # Google API にログイン gc = gspread.authorize(credentials) # スプレッドシートのシート1を開く worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1 ############################################################################## ## 処理 # コマンドライン引数を取得 args = sys.argv csvfile = args[1] # CSVファイルの内容を配列に代入 with open(csvfile) as fp: results_list_ex = list(csv.reader(fp)) # 2次元配列を1次元配列に変換 results_list = list(itertools.chain.from_iterable(results_list_ex)) # カウント変数初期化 COUNT_NUM = 1 # 空白行探索 while str(len(worksheet.cell(COUNT_NUM, 1).value)) != "0": COUNT_NUM += 1 # 編集する範囲を指定 cell_list = worksheet.range('A'+str(COUNT_NUM)+':'+num2alpha(len(results_list))+str(COUNT_NUM)) # cell_listにresults_listの配列を代入 for i,cell in enumerate(cell_list): cell.value = results_list[i] # 結果の保存 worksheet.update_cells(cell_list)
第一引数に csv ファイルを指定することで、結果をスプレッドシートに出力するスクリプトです。
このスクリプトを後述の JMeter 起動用スクリプトで利用します。
シェルスクリプト
#!/bin/sh DATE=$(date +"%Y%m%d") OPTIME=$(date +"%Y%m%d-%H%M%S") # 結果の出力先ディレクトリを指定 LOGDIR=/var/www/html/${DATE} # JMXファイルを指定 FILE_JMX=/usr/local/jmeter/bin/templates/build-web-test-plan.jmx # 日付ディレクトリの作成 mkdir -p ${LOGDIR} # JMeter 起動 /usr/local/jmeter/bin/jmeter -Dsun.net.inetaddr.ttl=0 -n -t ${FILE_JMX} -j ${LOGDIR}/${OPTIME}.log -l ${LOGDIR}/${OPTIME}.jtl -e -o ${LOGDIR}/${OPTIME}_th${JMETER_THREAD}${2}/ -r # CSV ファイルの作成 cat ${LOGDIR}/${OPTIME}_th${JMETER_THREAD}${2}/statistics.json | jq -r ". [] | [.transaction,.sampleCount,.errorCount,.errorPct,.meanResTime,.minResTime,.maxResTime,.pct1ResTime,.pct2ResTime,.pct3ResTime,.throughput,.receivedKBytesPerSec,.sentKBytesPerSec] | @csv" | grep "Total" > ${LOGDIR}/${OPTIME}_th${JMETER_THREAD}${2}/statistics.csv # スプレッドシートに結果を出力 /usr/local/bin/main.py ${LOGDIR}/${OPTIME}_th/statistics.csv
JMeter は json で結果を出力するので jq で無理やり csv に変換してます。
Python だと簡単に実装できて楽ですね。
補足
スクリプトの実行に下記のパッケージ導入が必要です。
yum install python3 python-devel jq pip3 install gspread pip3 install oauth2client