トレタ開発者ブログ

飲食店向け予約/顧客台帳サービス「トレタ」、モバイルオーダー「トレタO/X」などを運営するトレタの開発メンバーによるブログです。

Postmanを使ってAPIテストを行うために最低限理解しておきたい3つのこと

この記事は トレタ Advent Calendar 2019 の17日目です。

はじめまして!QAエンジニアの @gonkm です。先週末17年ぶりに再結成を果たしたバンドのライブに参加して筋肉痛です。

トレタでは、今年ローンチしたToreta nowとトレタの予約台帳のオプション機能のQAを担当しています。本日はToreta nowのテストでよく使っているGUIのAPIクライアントツールであるPostmanについて、最低限理解しておきたい3つのことを書きます。

1. Testsを使ってレスポンスの結果を変数にセットする

APIテストを行っていると、レスポンスの結果を次のリクエストのパラメータとして扱いたいことが多いです。
Postmanではレスポンスが返ってきた後に実行されるTestsという処理がありますので、下記のように記述することで、Postmanの環境変数に値をセットすることが可能です。

let data = JSON.parse(responseBody)

pm.environment.set("starts_from_at", data.reservable_times.starts_time);

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

2. Pre-request scriptでテストの前の事前処理を行う

これで {{starts_from_at}} という変数を作成できましたが、実際に次に実行するテストでは、この1時間後の値である {{starts_to_at}} という値が必要になります。
Postmanではテスト実行前に実行されるPre-request scriptという処理がありますので、これを使って1時間後の値を作成してみます。

let  an_hour_ago = pm.environment.get("starts_from_at"); 

an_hour_ago = new Date(an_hour_ago);

an_hour_ago.setHours(an_hour_ago.getHours() + 1);

pm.environment.set("starts_to_at", an_hour_ago);

このとおり starts_to_atstarts_from_at から1時間後の値をセットすることができました。

3. テスト実行時に外部ファイルから値を渡し、変数をセットする

テストによっては実行するIteration毎に値を変えたい場合があります。それに伴い、期待する結果が変わる場合もあるでしょう。
前述のPre-request scriptやTestsを使って頑張ることも可能ですが、PostmanでもData-driven testingをサポートするための外部ファイルの取り込み機能があるので、それを使います。

この機能を使って境界値確認のテストを行ってみましょう。
まず下記のようなCSVを用意します。seatsにはテスト条件となる値を、expected_status_codeにはテスト結果として期待するstatus codeを記述しました。
それぞれはPostman内で {{seats}}, {{expected_status_code}} としてパラメータにセットしておきます。

seats,expected_status_code
0,400
1,200
4,200
99,404
100,404

次にPostmanの実行モジュールになるCollectionRunnerを起動し、 Data からcsvファイルをインポートします。
レコード数によってIterationも自動でセットされるので大変気がきいてます。ナイスですね。

f:id:gonkm:20191217082430p:plain

実際の実行結果は以下の通りです。今回はTestsでのstatus_code チェックに {{expected_status_code}} を使っているので、seats の値によって期待の異なるテストを実行することができました。

f:id:gonkm:20191217082332p:plain

最後に

弊社では監視にDatadogを使っているのですが、PostmanProだとDatadogのSynthetics API TestとIntegrationが可能なようなので来年はテストだけでなく外形監視にも使っていければと思っています。

他にもToreta nowではXCUITestを使ったUIテストの自動化を実施したりしています。この先、Androidのテストの自動化やsnapshotテストの導入、アジャイル開発でのQAプロセスの整備など、やりたいことがたくさんあるのですか、如何せん人が足りていません!ご興味のある方は下記よりご応募頂けるととってもうれしいです。よろしくお願いします!

© Toreta, Inc.

Powered by Hatena Blog