JMeter用のCsvLogWriterプラグイン



はじめに



確かに、JMeterで標準リスナーを使用するすべての人は、次の制限に直面しました。



これらの制限を回避するために、新しいCsvLogWriterプラグインを使用してログファイルを再作成することにしました。



タスク



JMeter用のプラグインを開発する必要がありました。これには次の機能があります。



JMeterの標準リスナーでは、XML形式で完全なエラーコンテンツを修正することが可能であり、分析には不便です。 エラーテキストを文字列形式で保存してから、たとえばCSV形式に書き込んで、ExcelおよびPandasでのグラフ作成を有効にする必要がありました。 通常、結果のログファイルには、子サブクエリのデータは表示されません。 テスト計画の複雑な構造を使用する場合、これは非常に不便です。 構造の例を図1に示します。





図1.テスト計画の構造



標準リスナーを使用する場合、サブクエリ(埋め込みリソース)のデータを取得できません。CSVLogWriterはそのような機会を提供します。



プラグイン機能の説明pflb @ CsvLogWriter



作業の過程で、JMeter用のpflb @ CsvLogWriterプラグインが作成されました。 このプラグインの主な機能には、子サブクエリの作業の結果をキャプチャし、エラーの全テキストを、XML形式ではなくプレーンテキストで記録できるという事実が含まれます。



ログフィールドの説明
ログ形式


ログファイルに記録されたデータを表1に示します。

表1.ログ形式

いや 種類 説明 ログ列の値の例 単位
1 タイムスタンプ 長い 開始時間または終了時間を要求する ミリ秒
2 経過した 長い リクエスト処理期間:endTime-startTime-idleTime 49、434 ミリ秒
3 ラベル ひも JMeterコンポーネント名
4 responseCode ひも 要求応答コード 「200」、「非HTTP応答コード:java.net.UnknownHostException」
5 responseMessage ひも 応答コードのデコード 「OK」、「内部サーバーエラー」
6 threadName ひも ストリーム名 「スレッドグループ1-1」
7 dataType ひも 回答のデータ型は、実際には2つの値を取ります-「bin」または「text」 「ビン」、「テキスト」
8 成功 ブール値 成功ステータスのリクエスト 真か偽か
9 failureMessage ひも エラーメッセージ

アサーションコンポーネントのアクティベーションの場合、

サンプラーに追加されました。

CsvLogWriterでは、メッセージはフィールドに書き込まれます

すべてのアサーションコンポーネントから

実行によりエラーが生成されました。

最初のメッセージのみがベースロガーに記録されます。
10 バイト int 応答のサイズ。

値と計算アルゴリズムは設定によって異なります

サンプラー。 値はresponseData.lengthの影響を受ける場合があります。

headersSize、bodySize。
バイト
11 grpThreads int 現在のグループ内のアクティブなスレッドの数
12 allThreads int すべてのグループのアクティブな仮想ユーザーの数
13 URL ひも リンク
14 ファイル名 ひも 応答が記録されるファイルの名前。

[応答をファイルリスナに保存]を使用すると、フィールドにデータが入力されます。

このリスナーはめったに使用されません。通常は列の値です。

-空の文字列
15 待ち時間 int 最初のサーバー応答を取得する時間。

この時間遅延には時間が含まれます

サーバーへの接続に費やした

安全な接続のセットアップによる遅延、

およびJMeterの取得における内部遅延

サーバー応答の最初のバイト。 何らかの理由で

サンプラーの作業は中断され、その後再開されました。

レイテンシー値が調整されます

サンプラーの停止期間中。
ミリ秒
16 エンコード ひも エンコード。 応答エンコードが返されます。

応答エンコードが指定されていない場合、

デフォルトのエンコード値が返されます。

デフォルトのエンコーディング値は

「Sampleresult.default.encoding」。

HTTP要求の場合、デフォルト値は「ISO-8859-1」です。
「ISO-8859-1」、「UTF-8」
17 サンプル数 int サンプルの数。

HTTP要求の場合、値は1です。

イベントにサブスクライブするJMSサンプラーの場合

一度に複数のメッセージを読んで、

値はポーリングサイクルの数に等しい

または読み取られたメッセージの数。

値は常に1以上です。
1、2
18 ErrorCount int エラーの数。

HTTPリクエストの場合、成功した場合の値は0です

要求が成功しなかった場合は1に等しくなります。

その他のサンプラー処理用

一度に複数のメッセージ

値は1より大きい場合があります。
0、1
19 ホスト名 ひも マシン名
20 アイドル時間 int ダウンタイム ミリ秒
21 つなぐ int 接続セットアップ時間 ミリ秒
22 headersSize int ヘッダーサイズ バイト
23 bodySize int 本体サイズ バイト
24 contentType ひも 応答ヘッダーのコンテンツタイプ
25 endTime 長い リクエスト終了時間 ミリ秒
26 isMonitor ブール値 モニターとして使用がチェックされているかどうかの署名 真偽
27 threadName_label ひも スレッドとJMeterコンポーネントの名前
28 parent_threadName_label ひも スレッドと親JMeterコンポーネントの名前
29日 startTime 長い 開始時間のリクエスト ミリ秒
30 stopTest ブール値 テストを停止するかどうかは、停止ボタンです。

スレッドグループの設定にもオプションがあります

エラー時に「テストを停止」。 stopTest列にある場合

true、それがまさに起こったことです。

スクリプトは現在のリクエストで終了しました。
真偽
31 stopTestNow ブール値 テストが突然停止したかどうかの兆候は、シャットダウンボタンです。

スレッドグループの設定にもオプションがあります

エラー時に「今すぐテストを停止」。 「stopTestNow」列にある場合

true、それがまさに起こったことです。

スクリプトは現在のリクエストで終了しました。
真偽
32 stopThread ブール値 現在のスレッドが停止しているかどうか。

スレッドグループの設定には、「スレッドの停止」オプションがあります

エラー発生時。 stopThread列がtrueの場合、

これがまさに起こったことです。

スクリプトは現在のリクエストで終了しました。
真偽
33 startNextThreadLoop ブール値 再生が開始されますか。

スレッドグループの設定には、オプション「次のスレッドループを開始」があります

エラー発生時。 startNextThreadLoop列がtrueの場合、

これがまさに起こったことです。

スクリプトは現在のリクエストで終了しました。
真偽
34 isTransactionSampleEvent ブール値 現在のイベントがトランザクション(TransactionController)であることの兆候。 つまり、グループ化要素にすぎません。 真偽
35 transactionLevel int ネストレベルをリクエストします。

トランザクションコントローラー階層が使用されている場合

またはサブクエリにサブクエリがあり、

この列には、ネストのレベルがあります。
ルートクエリまたはルートトランザクションコントローラの場合は0。

親がルートであるサブクエリの場合は1。
36 responseDataAsString ひも 文字列形式の完全なエラーコンテンツ

発生した場合、成功== falseの場合、

responseDataには完全な応答本文が含まれます
37 requestHeaders ひも リクエストヘッダー
38 responseData ひも エラーが発生した場合、エラーの全内容、

成功== falseの場合、responseDataには

base64エンコードされた応答本文
39 responseHeaders ひも 応答ヘッダー
40 <変数名> ひも JMeter変数




ログ構造は、基本的なCSVログ形式を拡張します。 パラメーターの基本セットはjmeter.apache.org/usermanual/listeners.html#csvlogformatで見つけることができます



結果のCSVログは、CSVログの読み込みをサポートする基本的なJMeterリスナーでダウンロードできます。

また、分析に役立つ可能性のある追加の列がログに表示されました(ログ形式の表の22〜35)。

応答と要求の本文とヘッダーは、エラーが発生した場合にのみ記録されます(ログ形式テーブルの36〜39ページ)。

変数の列もログに書き込まれます: jmeter.apache.org/usermanual/listeners.html#sample_variables-変数の値を記録する機能の説明。



インターフェース



プラグインを開始するには、「ファイル名」フィールドに入力する必要があります。 [ファイル名]フィールドには、作業の結果が記録されるファイルへのパスが含まれます。 ディレクトリを手動で登録するか、[参照]ボタンを使用してファイルを選択できます。 指定したファイルが存在する場合、新しいファイルが作成されます。 新しいログファイルの名前は、元の名前にログファイルの番号を付けた接尾辞を追加することで形成されます。



フォームにはフラグもあります。 フラグを使用して、ログに記録されたデータを操作できます。 「追加パラメーター」チェックボックスは追加パラメーター(ログ形式テーブルの22-35行)を修正し、応答データはエラーテキスト(ログ形式テーブルの36-39行)を修正し、ユーザー変数はユーザー変数を修正します。



プラグインインターフェイスを図2に示します。





図2. CSVLogWriterプラグインインターフェイス



CSVLogWriterプラグインとSimple Data Writerの比較



このセクションでは、CsvLogWriterプラグインと標準のSimple Data Writerリスナーを比較します。



記録されたデータの構成


Simple Data Writer Listerは、コミットされたデータのリストをカスタマイズする機能をユーザーに提供します。 図3は、出力データの設定ウィンドウを示しています。





図3.固定データリスナーSimple Data Writerの設定ウィンドウ



CsvLogWriterプラグインは常にパラメーターの基本リストを表示し(Simple Data Writerと同様)、フォーム上の3つのフラグを使用して追加データのリストの出力を構成できます。



記録されたデータの詳細なリストは、コードにハードコーディングされています。 ただし、図3からわかるように、Simple Data Writerはエラーテキストを文字列形式で表示できません。 エラーの全文はXML形式でのみ記録されます。 このため、エラーのテキストが必要な場合は、2つのログを保持する必要があります-1つはCSV形式(1つはExcelまたはPandasのグラフでログのさらなる処理が必要な場合)、1つはXML形式です。



サブクエリのロギング


また、Simple Data Writerリスナーは、子サブクエリの作業の結果を記録しないため、このようなログファイルは網羅的とは言えません。 出力データの量を明確に比較するには、図1のテスト計画に対応するテストを実行し、ログファイルを確認します。 SimpleDataWriterログファイルを図4に示します。





図4.シンプルデータライターのログファイル



図4からわかるように、SimpleDataWriterは埋め込みリソースに関する情報を表示しません。 次に、CsvLogWriterプラグインは、子サブクエリの処理を通じてより多くの情報を表示します。 CsvLogWriterプラグインログファイルの内容を図5に示します。





図5. CsvLogWriterログファイル



性能比較



イベント処理を担当するSimpleOccuredメソッドのパフォーマンスも分析しました。 プロファイリングはJava VisualVMで行われました。 テスト計画ではサブクエリは使用されませんでした。 SimpleDataWriterの場合、テストは1つのCSVファイルへの書き込みと2つのファイル(CSVおよびXML)への書き込みから開始されました。 仮想ユーザーの数は10、繰り返しの数は100です。比較の結果を表2に示します。



表2. SimpleDataWriterとCsvLogWriterプラグインのパフォーマンスの比較

CsvLogWriter SimpleDataWriter(CSV + XML) SimpleDataWriter(CSV)
継続時間(ミリ秒)、コール数 継続時間(ミリ秒)、コール数 継続時間(ミリ秒)、コール数
215、2000 23076、4000 101、2000


結論:





プラグインへのリンク



github.com/pflb/Jmeter.Plugin.CsvLogWriter



All Articles