JMeterでRESTfulなAPIをテストする

こんにちわ。青柳です。
今回は、WAOの連載はお休みして、JMeterに関する記事を書きます!WAOの記事は、次回以降で執筆しますので、お楽しみに!!

さて、皆さんは、WebAPIをテストする時、どんなツールを利用されますか?
私は、chrome拡張機能のAdvanced REST clientをよく利用します。
Advanced REST clientは、開発中の動作確認にはとても便利なのですが、複数のパラメータを組み合わせるパターンの試験を連続で行いたい場合に不便を感じていました。Advanced REST clientでは、テストの度にパラメータを手動で変更する必要があったからです。
そんな時、私が利用したのがJMeterです!!

JMeterは、パフォーマンス計測用のアプリケーションとして有名なツールのひとつです。
JMeterについて書かれたサイトはたくさんあるので、インストール方法や基本的な使い方はそれらのサイトをご覧ください。
公式サイト:http://jmeter.apache.org/

JMeterは、パフォーマンス計測ツールとしての利用以外でも以下のようなことが出来るので、WebAPIの回帰テストがとても楽になるのです。
準備に多少時間を要してでも、やる価値はあると思っています!

  • WebAPIに引き渡すパラメータ等を外部ファイルで設定出来る
    →呼び出しの度にパラメータを手動で変えなくてよいのがステキ
  • レスポンスをファイルに保存出来る
    →エビデンスとしてそのまま利用出来るのがステキ
  • レスポンスから正規表現を利用して結果の一部を抽出し、別APIのパラメータとして利用できる
    →連続した別APIのテストが可能なのがステキ

サンプルWebAPIの仕様

JMeterのシナリオの説明の前に、サンプルとして利用するWebAPIの仕様を簡単に説明します。
(シナリオテスト用のAPIなので、仕様に深い意味はありません)
実行するAPIは2つです。
※JMeterのシナリオをテンプレートとして公開しますが、サンプルAPIのソースコードの公開は行いません。JMeter利用時に自身のWebAPIの仕様に合わせて、シナリオを修正してご利用ください。
※今回は、サンプルAPIをローカルのtomcatに配置してJMeterを実行します。

1.サーバ日時取得API
Represents
APサーバの日時をUNIX時間で取得するAPIです。
Request
GET http://localhost:8080/api/1.0/serverTime
Response
{"serverTime":1403521397}

2.hoge情報取得API
Represents
idを指定してhoge情報を取得するAPIです。
Request
POST http://localhost:8080/api/1.0/hoge/{id}
HTTP Header
1で取得したサーバ日時を設定します
Response
{"id":1,"name":"fuga1"}

JMeterシナリオ

以下のJMeterのシナリオをダウンロードし、JMeterで開いてください。
JMeterのサンプルシナリオ

hoge
ポイントだけ説明します!

  1. HTTPリクエスト-${no}_サーバ日時取得
    サーバ日時取得APIを呼び出し、正規表現抽出を利用してレスポンスからserverTimeを取得しています。

  2. HTTPリクエスト-${no}
    1.で取得したサーバ日時をHTTPヘッダにセットしてAPIを呼び出しています。
    結果をファイルに保存するとともにレスポンスの応答コード、レスポンスを確認し結果を表示しています。

  3. API Config
    APIの物理名、論理名を変数で定義しています。
    複数のAPIのシナリオを作成する必要がある場合、ユーザ定義変数を利用すると、変更点が少なくなりメンテナンスが楽です。

  4. CSV Data Set Config
    テスト番号,応答コード,応答レスポンス,パラメータを外部ファイルで定義しています。

  5. Env Set Config
    外部ファイルで定義したプロトコル,サーバ名,ポートを読み込んでいます。
    環境依存の設定を外部ファイルとすることで異なる環境のテストを行う際にシナリオの変更が不要となります。



テストを実行し、結果を確認します!
assertion
「Test failed」がなければ、テスト成功です。
上記の例では、テスト番号「010-100」のテストのレスポンスが期待値と異なっている為、「Test failed」となっています。

それでは、ステキなJMeterライフを!!

コメントを残す

メールアドレスが公開されることはありません。

ABOUTこの記事をかいた人

主に、WEBサイトやスマホアプリの開発に従事していましたが 2013年からWebサイト構築を容易に行えるミドルウェアの研究開発を行っています。 2014年10月リリース予定です!乞うご期待!!