JMeterでWARNレベルのログを出力する。
背景
JMeterは「アサーションコンポーネント」と「リスナーコンポーネント(シンプルデータライタなど)」「シンプルデータライタ」をつかってHTTPリクエストのテスト結果をログ出力できます。
しかし、JMeterのコンポーネントには以下のデフォルト動作があります。
HTTPリクエスト
- 20X以外のレスポンスが返ってきた場合、エラーとなる。そのため、以降のテストが実施できない。
シンプルデータライタ
- HTTPリクエストがエラーになった場合、エラーログへ出力される。成功した場合、成功ログへ出力される。
- エラーの場合は、アサーションコンポーネント(BSF Assertionなど)により任意の文字列を出力できるが、成功の場合は任意の文字列を出力できない。
よって、以下のことをやりたい場合は少し工夫が必要です。
例えば「失敗じゃないけど、20X以外レスポンスが返ってきた場合WARNレベルのログを出力しときたい」などのときです。
手法
HTTPリクエストで20X以外のレスポンスが返ってきても、以降のテストを実施できるようにする。
HTTPリクエスト後に「アサーション」を追加し、”Ignore Status”にチェックを入れます。これよりHTTPリクエストで20X以外のレスポンスが返ってきても、以降のテストフローが流れるようになります。※注意)この設定にするとテストパターンに何も指定していないため、このHTTPリクエストは必ず成功扱いになります。
アサーションが成功したときに、任意の文字列をログ出力するようにする
上記の対応でHTTPリクエストが成功するようになると、ログ出力が制限されます。(アサーションは失敗したときにどうするかしか記述できない。他の方法(JavaScriptなど)でできるとは思うが。。。)
例えば、「200以外だったら、"WARN"っていう文字列を出力したい(´Д`)」という時があります。そのような場合は以下のような「BSF Assetion」を追加することで実現できます。
※注意)上記の”Ignore Status”のアサーションよりも前に置く必要があります。後ろに置くと、20X以外でテストが終了してしまいます。
説明をすると、
AssertionResult.setFailure(true);で、アサーション自体をエラーにします。この一文はログ出力とは関係ないですが、JMeter上でエラーのマーク(結果が赤くなる)が付いて分かりやすいのでつけておきます。
AssertionResult.setFailureMessage("任意の文字列);で、ログ出力に任意の文字列が出力できます。
ログ出力はいつもどおり「成功」のときに出す。
ログ出力については、「シンプルデータライタ」を使用して出力します。実際に実行してみる
存在しないサイト(Goooooogle.com)にアクセスしたのち、存在するサイト(Google.com)にアクセスするというテストシーケンスで動作を確かめてみます。本来ならば、存在しないサイトへHTTPリクエストに失敗して、テストが終了してしまいます。
実行してみると、
エラーになっても、以降のテストが実行されています。
ログについても、指定した文字列が出力先に出力されています。
- ファイル:
- ファイルの中身: