3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PostmanのCollection RunnerでWebAPIのテストを自動化する

Last updated at Posted at 2020-10-06

はじめに

WebAPIを叩いて動作確認するときに、 Postman を使っている方は多いと思います。
しかしながらWebAPIをパラメータを変更しながら挙動の変化を調べるテストを記述したい場合にどうすればいいでしょうか。

Tests タブにJavaScriptを書くやり方

テストしたいAPIのキーを追加し、 Tests タブにテスト内容をJavaScriptで記述するというやり方があります。
もちろんこのやり方で理屈上はテストを記述できるのですが、WebAPIをパラメータを変えながら何度も実行したい場合にいちいちパラメータを変更したJavaScriptを書いて順に実行するというのはあまりにも生産性が悪すぎます。

同じWebAPIをパラメータを変更しながら何度も実行する

Postmanでは COLLECTION RUNNER という仕組みがあり、指定したCollectionのWebAPIをパラメータを変更しながら順に実行することができます。パラメータは JSONまたはCSVが指定でき、 Data File のところで Select File ボタンを押すことでローカルファイルを指定できます。

JSON形式も試してみましたが、記述内容が冗長になり手作業で必要な量の入力パターンを記述することが難しいと感じました。パラメータを変更しながら同じWebAPIを何度も実行したい場合は CSV 形式がおすすめです。

COLLECTION RUNNERのCSVの内容

ここでいう CSV は以下のような意味を持ちます。

設定例:

Resource VarB VarC
/products a 1
/users b 2
/purchases c 3

意味:

  • 1行目:
    • 各カラムは Collection変数
  • 2行目以降:
    • 各カラムはCollection変数の値

Collection変数 と何でしょうか。みなさんはPostmanを運用するときにWebAPIの実行環境を切り替えたりするために Environment変数 を設定していると思います。Collection変数はEnvironment変数と同じで、WebAPIに プレースホルダ を書くと実行時に置き換えてくれます。

例えば URI:

と指定したWebAPIがCollectionの中に書いてあるとしましょう。
このWebAPIを実行すると、 Resource='/products' の場合は

に置き換えられます。これはURL欄だけでなく、HeadersやBodyタブでも同様に展開されます。

Environment変数との違いは変数の寿命で、Collection変数は COLLECTION RUNNER 実行時のみ有効で、実行するたびに初期化されます。

例えば

と設定している場合、 COLLECTION RUNNER で上に書いたCSVを指定して実行すると、以下のAPIが順に実行されます。

これで 一気にWebAPIを3個実行できるようになりました。もちろん50行書けば50回です。

WebAPIのバリデーションチェック用の自動テスト例

私の場合、開発現場ではWebAPIのバリデーションチェック、および登録、更新、削除を順に実行した生成破壊テストをPostmanで記述しています。

バリデーションチェック用の場合、各WebAPIについてバリデーションエラーが発生するパターンを網羅的に実行することになります。

例えば WebAPIの Body をこのように記述しておくことで、色々なテストをCSVだけで記述できるようになります。

{ {{prefix}} {{param}}:{{value}} {{suffix}} }

prefix にはWebAPIの必須パラメータを固定で入れておきます。
param はそのCSVレシピの行で動作確認したいJSONパラメータ。
value は入力エラーとなるような入力値を指定します。
suffix は通常空欄で良いですが、paramが JSONのサブオブジェクトの場合は } などの終端記号をここに書きます。

注意すべきは valueの扱いで、プレースホルダはCSVに書かれているとおりに置き換えられるため、

{ param1:"abc" }

などと指定したい場合は、 valueは abc ではなく "abc" と入力する必要があります。つまりCSV上では """abc""" です。

色々と応用が効くと思うので試してみてください。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?