この記事は トレタ 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_at
に starts_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も自動でセットされるので大変気がきいてます。ナイスですね。
実際の実行結果は以下の通りです。今回はTestsでのstatus_code チェックに {{expected_status_code}}
を使っているので、seats
の値によって期待の異なるテストを実行することができました。
最後に
弊社では監視にDatadogを使っているのですが、PostmanProだとDatadogのSynthetics API TestとIntegrationが可能なようなので来年はテストだけでなく外形監視にも使っていければと思っています。
他にもToreta nowではXCUITestを使ったUIテストの自動化を実施したりしています。この先、Androidのテストの自動化やsnapshotテストの導入、アジャイル開発でのQAプロセスの整備など、やりたいことがたくさんあるのですか、如何せん人が足りていません!ご興味のある方は下記よりご応募頂けるととってもうれしいです。よろしくお願いします!