NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

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

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

f:id:nextscape_blog:20210911161301g:plain


レスポンスデータを使って結果を判定させる方法を共有します。
この記事は「ネクストスケープ クラウド事業本部 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なら成功、というスクリプトを作ります。

f:id:nextscape_blog:20210911161744g:plain



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

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

f:id:nextscape_blog:20210911161835g:plain

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

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

f:id:nextscape_blog:20210911161904g:plain


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

f:id:nextscape_blog:20210911162038g:plain

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

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

f:id:nextscape_blog:20210911162106g:plain

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

f:id:nextscape_blog:20210911162137g:plain

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

f:id:nextscape_blog:20210911162213g:plain

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

f:id:nextscape_blog:20210911162234g:plain

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

f:id:nextscape_blog:20210911162312g:plain

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

f:id:nextscape_blog:20210911162431g:plain

 

APIを逆にして実行

 

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

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

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

f:id:nextscape_blog:20210911162453g:plain

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

f:id:nextscape_blog:20210911162512g:plain

 

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

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