Postman、APIなどのテストで使っている方も多いと思います!
すばらしいツールです。いつもお世話になっております!!😿
さて、先日Postmanさんのやっているイベントに行きまして紹介されていた
「APIのテストを自動で作成する」
というのを実践でやってみましたので、手順など含めて書いておきます。
例として、次のようなJSONをPostするとします。
{
"id": "abc",
"company_id": 123,
"requestor_id": "0",
"events": [
{
"id": "def",
"type": "add",
"object": {
"type": "Route",
"company_id": 123,
"date": "2023-12-07"
}
}
]
}
上記のPostは本来あるべきdriver_idが欠損しているので、失敗して次のようなレスポンスが返ってくるとします。
{
"id": "1234",
"request_id": "abc",
"status": "failed",
"error_infos": [
"driver_idがありません。"
]
}
一旦、Postmanから最初のリクエストをPostします。
一旦、送信してResponseが返ってきますと、「Postbot」というのが立ち上がります。立ち上がらない場合は、右下のPostbotというところをクリックしても立ち上がります。
で、Postbotのメニューに「Test for response」というのがありますので、それをクリックすると、テストを作ってくれます。
そして、テスト というタブをクリックすると、なんとこれでテストができています。ありがたすぎるー!!
とはいっても、これが完璧なわけでもなく、エラーメッセージなどのテストはなかったため、追加します。
Postbotさんが提案してくれる 「Add more tests」 というリンクをクリックしてみると、次のテストまで作ってくれます。
pm.test("Error_infos array contains only strings and no null or undefined values", function () {
const responseData = pm.response.json();
pm.expect(responseData.error_infos).to.be.an('array');
responseData.error_infos.forEach(function(error) {
pm.expect(error).to.be.a('string');
pm.expect(error).to.not.equal(null);
pm.expect(error).to.not.equal(undefined);
});
});
ぴええええ 何から何までお世話になっています!
しかし、まぁいうなればエラーメッセージのテストをしておきたいのですが、それは自分で追加する必要がありそうです。
なので、上記のテストに自分で追加します。
pm.expect(responseData.error_infos).to.be.an('array');
responseData.error_infos.forEach(function(error) {
pm.expect(error).to.be.a('string');
pm.expect(error).to.not.equal(null);
pm.expect(error).to.not.equal(undefined);
pm.expect(error).to.equal('driver_idがありません。'); // 追加
});
でも、自分で一から書くよりずっと楽ですよね!
テストを更新したら、テストが合格するか試したいですよね!
そしたら、次のテスト結果にあるぐるっと回るようなアイコンをクリックします。
これで、再度テストが試せて想定通りの動作をしていることがわかりました。
で、このテストは今後「送信」をクリックすると、自動で実行してくれるのでテストが失敗したか成功したか、常に把握することができます。
ちなみに、私はPostmanさんのMeetupというオフラインのイベントに行って上記の説明を教えて頂き、なんとタダで東京駅のおしゃれな夜景を見ながらおいしいご飯とお酒も頂いちゃいました!!しかもPostmanロゴのかわいいTシャツも!!!!(泣)
なんでそんなに気前がいいんですか(号泣)
もはや自分が乞食で恥ずかしいレベル(*ノωノ)
他のエンジニアさんとも交流が持てますし、オススメでしかありません!
↓にワークショップのリンクを貼っておきますので、興味がある方はぜひどうぞ。
https://postman.connpass.com/