こんにちは。
クラウド事業本部クライアントサービス部の松岡です。
テストやインフラ構築などを担当しています。
今回はJMeterの小ネタです。
レスポンスデータを使って結果を判定させる方法を共有します。
この記事は「ネクストスケープ クラウド事業本部 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なら成功、というスクリプトを作ります。
構成はシンプルで、レスポンスを取得するためのHTTPリクエストとアサーションだけです。
スレッドグループの最後にアサーションを配置することで、アサーション結果がテスト結果に反映されます。
HTTPリクエストではAPIを叩いています。
「${domain}」「${port}」といった変数は全体のテスト計画で設定しています。
※HTTPヘッダマネージャは環境や案件に依存するヘッダ情報を設定しています。
アサーションでは、
・レスポンスデータのテキストに「{"Status":0」が含まれていれば成功
となるように設定しています。
具体的な設定は以下を参照してください。テストパターンには正規表現も使えます。
テストの実行
作成したスクリプトを流します。
今回は比較用に、以下の3つのスクリプトを流します。
・レスポンスの確認_1:HTTPのレスポンスコードが200なら成功
・レスポンスの確認_2:レスポンスデータが「{"Status":0」なら成功
・レスポンスの確認_3:レスポンスデータが「{"Status":1」なら成功
テスト用のAPIは必ず「{"Status":0」を返すので、3つ目のスクリプトがエラーになる想定です。
レスポンスの確認_2のアサーションです。
レスポンスの確認_3のアサーションです。
実行結果は以下のようになります。
レスポンスの確認_1ではレスポンスが200で返ってきたので成功になりました。
レスポンスの確認_2ではレスポンスデータの内容がアサーションの「{"Status":0」と合致したので成功になりました。
レスポンスの確認_3のHTTPレスポンスコードは200ですが、レスポンスデータの内容がアサーションの「{"Status":1」と合致しないので失敗となりました。
テスト結果の「アサーション」の詳細にも結果が合致しない旨が記載されています。
APIを逆にして実行
せっかくなので、比較用にレスポンスのStatusが1になるAPIを作りました。
リクエストを投げると、レスポンスには固定のJSON
{"Status":1,"hoge":"hoge"}
を返します。
APIを逆にして、先ほどの3つのスクリプトを流します。
今回のAPIは必ず「{"Status":1」を返すので、2つ目のスクリプトがエラーになる想定です。
実行結果は以下です。
想定通り、2つ目のスクリプトがエラーになっています。
レスポンスの確認_2のHTTPレスポンスコードは200ですが、レスポンスデータの内容がアサーションの「{"Status":0」と合致しないので失敗となりました。
これも想定通りです。
いかがでしたでしょうか。
シンプルな小ネタですが、JSONやXMLを使用する案件でお役に立てば幸いです。
それではまた。