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-idleTime49、434ミリ秒
3ラベルひもJMeterコンポーネント名
4responseCodeひも要求応答コード「200」、「非HTTP応答コード:java.net.UnknownHostException」
5responseMessageひも応答コードのデコード「OK」、「内部サーバーエラー」
6threadNameひもストリーム名「スレッドグループ1-1」
7dataTypeひも回答のデータ型は、実際には2つの値を取ります-「bin」または「text」「ビン」、「テキスト」
8成功ブール値成功ステータスのリクエスト真か偽か
9failureMessageひもエラーメッセージ
アサーションコンポーネントのアクティベーションの場合、
サンプラーに追加されました。
CsvLogWriterでは、メッセージはフィールドに書き込まれます
すべてのアサーションコンポーネントから
実行によりエラーが生成されました。
最初のメッセージのみがベースロガーに記録されます。
10バイトint応答のサイズ。
値と計算アルゴリズムは設定によって異なります
サンプラー。 値はresponseData.lengthの影響を受ける場合があります。
headersSize、bodySize。
バイト
11grpThreadsint現在のグループ内のアクティブなスレッドの数
12allThreadsintすべてのグループのアクティブな仮想ユーザーの数
13URLひもリンク
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
18ErrorCountintエラーの数。
HTTPリクエストの場合、成功した場合の値は0です
要求が成功しなかった場合は1に等しくなります。
その他のサンプラー処理用
一度に複数のメッセージ
値は1より大きい場合があります。
0、1
19ホスト名ひもマシン名
20アイドル時間intダウンタイムミリ秒
21つなぐint接続セットアップ時間ミリ秒
22headersSizeintヘッダーサイズバイト
23bodySizeint本体サイズバイト
24contentTypeひも応答ヘッダーのコンテンツタイプ
25endTime長いリクエスト終了時間ミリ秒
26isMonitorブール値モニターとして使用がチェックされているかどうかの署名真偽
27threadName_labelひもスレッドとJMeterコンポーネントの名前
28parent_threadName_labelひもスレッドと親JMeterコンポーネントの名前
29日startTime長い開始時間のリクエストミリ秒
30stopTestブール値テストを停止するかどうかは、停止ボタンです。
スレッドグループの設定にもオプションがあります
エラー時に「テストを停止」。 stopTest列にある場合
true、それがまさに起こったことです。
スクリプトは現在のリクエストで終了しました。
真偽
31stopTestNowブール値テストが突然停止したかどうかの兆候は、シャットダウンボタンです。
スレッドグループの設定にもオプションがあります
エラー時に「今すぐテストを停止」。 「stopTestNow」列にある場合
true、それがまさに起こったことです。
スクリプトは現在のリクエストで終了しました。
真偽
32stopThreadブール値現在のスレッドが停止しているかどうか。
スレッドグループの設定には、「スレッドの停止」オプションがあります
エラー発生時。 stopThread列がtrueの場合、
これがまさに起こったことです。
スクリプトは現在のリクエストで終了しました。
真偽
33startNextThreadLoopブール値再生が開始されますか。
スレッドグループの設定には、オプション「次のスレッドループを開始」があります
エラー発生時。 startNextThreadLoop列がtrueの場合、
これがまさに起こったことです。
スクリプトは現在のリクエストで終了しました。
真偽
34isTransactionSampleEventブール値現在のイベントがトランザクション(TransactionController)であることの兆候。 つまり、グループ化要素にすぎません。真偽
35transactionLevelintネストレベルをリクエストします。
トランザクションコントローラー階層が使用されている場合
またはサブクエリにサブクエリがあり、
この列には、ネストのレベルがあります。
ルートクエリまたはルートトランザクションコントローラの場合は0。
親がルートであるサブクエリの場合は1。
36responseDataAsStringひも文字列形式の完全なエラーコンテンツ
発生した場合、成功== falseの場合、
responseDataには完全な応答本文が含まれます
37requestHeadersひもリクエストヘッダー
38responseDataひもエラーが発生した場合、エラーの全内容、
成功== falseの場合、responseDataには
base64エンコードされた応答本文
39responseHeadersひも応答ヘッダー
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プラグインのパフォーマンスの比較
CsvLogWriterSimpleDataWriter(CSV + XML)SimpleDataWriter(CSV)
継続時間(ミリ秒)、コール数継続時間(ミリ秒)、コール数継続時間(ミリ秒)、コール数
215、200023076、4000101、2000

結論:


プラグインへのリンク


github.com/pflb/Jmeter.Plugin.CsvLogWriter

Source: https://habr.com/ru/post/J308098/


All Articles