福岡拠点の野田です。
最近ひさしぶりにJmeterを使って負荷テストをしました。
Jmeterから実行結果をログに出力することができますが、XMLかCSVかjmeter.propertiesで選ぶことができます。
XMLは、ページアクセスに起因する問合せをすべて記録することができます。一方、CSVにおいては、画像、CSS、JSなど付随情報は、明示してシナリオを作成していない限りログに記録することができません。そのため、出力はXMLで出力していたほうが広くログを残すことができます。ここは迷わずXMLを指定してください。
1 2 |
#jmeter.save.saveservice.output_format=csv jmeter.save.saveservice.output_format=xml |
付随する関連ログをすべて残すためには、以下のsubresultsをtrueで指定します。
1 |
jmeter.save.saveservice.subresults=true |
実行コマンドの例を提示します。
1 |
export JMDATE=`date +"%Y%m%d%H%M" -d "+9 hours"` |
1 2 3 4 5 |
cd /usr/local/jmeter/bin \ && mkdir -p /usr/local/jmeter/logs/$JMDATE && \ ./jmeter -n -t ../jmeter_files/test_scenario.jmx \ -l /usr/local/jmeter/logs/$JMDATE/result.jtl \ -p ./jmeter.properties |
HTMLのみのログに残すためには以下のような処理で加工することができます。
1 2 |
grep -E "(\/>|testResult|xml version)" /usr/local/jmeter/logs/$JMDATE/$JMDATE.jtl | \ grep -v -E '\.(css|jpg|png|js|svg|gif|ico)' > /usr/local/jmeter/logs/$JMDATE/result_htmlonly.jtl |
※個別ログのtestResult+必要なXMLタグで含まれる範囲で絞り込み。その後、css/jpg/png/js/svg/gif/icoを排除。
ここまでは、XML最高!なのですが、実は大きな欠点があります。実は、XMLログからはHTMLレポートが作成できません。
そんなときどうしたらいいか。
XMLからCSVを作ればオッケーです。そこで使えるのが、XSLT。
jmeter_xml2csv.xslt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method="text" encoding="UTF-8" /> <xsl:template match="/">timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,Latency,IdleTime,Connect <xsl:apply-templates select="testResults/httpSample" /> </xsl:template> <xsl:template match="httpSample"> <xsl:value-of select="@ts" />,<xsl:value-of select="@t" />,<xsl:value-of select="@lb" />,<xsl:value-of select="@rc" />,<xsl:value-of select="@rm" />,<xsl:value-of select="@tn" />,<xsl:value-of select="@dt" />,<xsl:value-of select="@s" />,,<xsl:value-of select="@by" />,<xsl:value-of select="@sby" />,<xsl:value-of select="@ng" />,<xsl:value-of select="@na" />,<xsl:value-of select="@lt" />,<xsl:value-of select="@it" />,<xsl:value-of select="@ct" /><xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet> |
XMLからCSVを変換するコマンド例は以下。
1 2 3 |
java -cp "%JMETER_HOME%\lib\xalan-2.7.2.jar;%JMETER_HOME%\lib\serializer-2.7.2.jar" \ org.apache.xalan.xslt.Process -in /usr/local/jmeter/logs/$JMDATE/result_htmlonly.jtl \ -xsl jmeter_xml2csv.xsl -out result_htmlonly.csv |
XMLからCSVに変換したファイルを使って、以下のコマンドで晴れてレポートを作れるようになりました。
1 2 |
mkdir report "%JMETER_HOME%\bin\jmeter" -g result_htmlonly.csv -o report |
他にもコマンドラインからプラグインを呼び出すことも簡単にできます。
元のログから集計結果を得たいときは以下。
1 2 3 4 5 6 |
java -cp "%JMETER_HOME%\lib\jmeter-plugins-cmn-jmeter-0.4.jar" \ -jar "%JMETER_HOME%\lib\ext\CMDRunner.jar" \ --tool Reporter \ --generate-csv aggr_htmlonly.csv \ --input-jtl /usr/local/jmeter/logs/$JMDATE/result_htmlonly.jtl \ --plugin-type AggregateReport |
※利用にあたって、標準プラグインと呼ばれるjarライブラリをlib/ext 以下に配置する必要があります。
https://jmeter-plugins.org/downloads/old/
こちらもご参考まで。