JMeter:レスポンスデータで結果を判定する

こんにちは。
クラウド事業本部クライアントサービス部の松岡です。
テストやインフラ構築などを担当しています。

今回はJMeterの小ネタです。
jm
レスポンスデータを使って結果を判定させる方法を共有します。
この記事は「ネクストスケープ クラウド事業本部 Advent Calendar 2017」の 12/12 の記事です。

WebアプリやAPIの負荷テストには、もっぱらJMeterを使っています。
JMeterはそのまま使っても、HTTP/HTTPSレスポンスのステータスが200なら成功・200以外なら失敗と判定してくれる便利なツールですが、
最近はJSONなどのレスポンスデータの中に結果ステータスを入れてくるアプリも増えてきました。
この場合、200が返ってきても中身がエラーという事も考えられます。
しかし、JMeterでは設定次第で、結果ステータスの中身も判定ができるようになります。
今回はそのJmeterの設定について、ご紹介します。

テスト用のAPI

テスト用にシンプルなAPIを作りました。
リクエストを投げると、レスポンスには固定のJSON
{"Status":0,"hoge":"hoge"}
を返します。


JMeterのスクリプト作成

レスポンスデータ(JSON)のStatusが0なら成功、というスクリプトを作ります。

JMeterツリー

構成はシンプルで、レスポンスを取得するためのHTTPリクエストとアサーションだけです。
スレッドグループの最後にアサーションを配置することで、アサーション結果がテスト結果に反映されます。

HTTPリクエストではAPIを叩いています。

HTTPリクエスト

「${domain}」「${port}」といった変数は全体のテスト計画で設定しています。
※HTTPヘッダマネージャは環境や案件に依存するヘッダ情報を設定しています。

アサーションでは、
・レスポンスデータのテキストに「{"Status":0」が含まれていれば成功
となるように設定しています。
具体的な設定は以下を参照してください。テストパターンには正規表現も使えます。

アサーション


テストの実行

作成したスクリプトを流します。
今回は比較用に、以下の3つのスクリプトを流します。
・レスポンスの確認_1:HTTPのレスポンスコードが200なら成功
・レスポンスの確認_2:レスポンスデータが「{"Status":0」なら成功
・レスポンスの確認_3:レスポンスデータが「{"Status":1」なら成功

JMeterツリー2

テスト用のAPIは必ず「{"Status":0」を返すので、3つ目のスクリプトがエラーになる想定です。

レスポンスの確認_2のアサーションです。

アサーション

レスポンスの確認_3のアサーションです。

アサーション

実行結果は以下のようになります。

結果ツリー

レスポンスの確認_1ではレスポンスが200で返ってきたので成功になりました。

レスポンス1

レスポンスの確認_2ではレスポンスデータの内容がアサーションの「{"Status":0」と合致したので成功になりました。

レスポンス2

レスポンスの確認_3のHTTPレスポンスコードは200ですが、レスポンスデータの内容がアサーションの「{"Status":1」と合致しないので失敗となりました。
テスト結果の「アサーション」の詳細にも結果が合致しない旨が記載されています。

レスポンス3



APIを逆にして実行

せっかくなので、比較用にレスポンスのStatusが1になるAPIを作りました。
リクエストを投げると、レスポンスには固定のJSON
{"Status":1,"hoge":"hoge"}
を返します。

APIを逆にして、先ほどの3つのスクリプトを流します。
今回のAPIは必ず「{"Status":1」を返すので、2つ目のスクリプトがエラーになる想定です。

実行結果は以下です。
想定通り、2つ目のスクリプトがエラーになっています。

実行結果

レスポンスの確認_2のHTTPレスポンスコードは200ですが、レスポンスデータの内容がアサーションの「{"Status":0」と合致しないので失敗となりました。
これも想定通りです。

実行結果詳細



いかがでしたでしょうか。

シンプルな小ネタですが、JSONやXMLを使用する案件でお役に立てば幸いです。
それではまた。

ネクストスケープ企業サイトへ

NEXTSCAPE

検索する

タグ

メタデータ

投稿のRSS