
はじめに
確かに、JMeterで標準リスナーを使用するすべての人は、次の制限に直面しました。
- 標準リスナーは、テスト計画で規定されているすべてのサブクエリに関する詳細な情報を受信できません。
- 標準リスナーはXML形式で情報を出力するため、ExcelとPandasを使用したログの詳細な分析が複雑になります。
これらの制限を回避するために、新しい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つのフラグを使用して追加データのリストの出力を構成できます。
- 追加パラメーター-追加パラメーター(ログ形式テーブルの22〜35行)。
- 応答データ-エラーテキスト(ログ形式テーブルの36〜39行)。
- ユーザー変数-ユーザー変数(出力の場合、-Jsample_variablesスイッチを使用してJMeterを実行する必要があります)。
記録されたデータの詳細なリストは、コードにハードコーディングされています。 ただし、図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 |
結論:
- CsvLogWriterは、SimpleDataWriter(最大詳細のXML)よりも10倍高速です。
- CsvLogWriterは、SimpleDataWriter(最大詳細のCSV)より2倍遅いです。
- SimpleDataWriter(最大粒度のXML)はSimpleDataWriter(最大粒度のCSV)よりも20倍遅いです。
プラグインへのリンク
github.com/pflb/Jmeter.Plugin.CsvLogWriter