
Postman で API テストを書き CI で自動実行する
こんにちは、けんにぃです。ナビタイムジャパンでサーバーサイドの開発やマネージメントを担当しています。
今回は Postman で API テストを実装し、それを自動実行する方法についてまとめようと思います。
Postman とは
Postman は Web API をテストするためのテストツールです。リクエストをフォルダで整理し、GUI 上で API を実行して結果を確認することができます。

当社でも Postman でリクエストを管理して調査用に使用している人をよく見かけます。でも Postman はリクエストをフォルダ管理して GUI 上で API を実行するだけのツールではないのです。
Postman をただのリクエスト管理ツールとして使うなんてもったいない・・・!!
ということで Postman の便利な使い方を解説していこうと思います。
Postman はテストが書ける
Postman には JavaScript でテストを記述する機能が備わっています。

画像内のテストコードは次のように書かれています。
pm.test("ステータスコードが 200 であること", () => {
pm.response.to.have.status(200);
});
pm.test("ボディの URLが正しいこと", () => {
const json = pm.response.json();
pm.expect(json.url).to.be.equal("https://httpbin.org/get");
});
構文は JavaScript ですが、そんなに複雑な構文を使うわけではないので簡単にテストを書くことができます。リクエストを送信するとテストも自動で実行されます。
ちなみに単にテストを書くだけであれば別に Postman を使わなくても書こうと思えば書けます。リクエストの作成から実行まで全部 JavaScript で書き、ターミナル上でテストを実行することも可能です。しかし結果を確認する際は、視認性を考慮すると GUI があるほうが便利だと思います。
Postman の素晴らしい点はリクエストの作成やレスポンスの確認は GUI 上で行い、テストの記述だけソースコードにすることで自由な形式でテストを書けるようにしておくという使い分けをしているところです。
複数のリクエストで共通で実行したいテストを書くこともできます。

フォルダやコレクション(ツリーの最上位の部分)に対してテストを書くと、配下にあるすべてのリクエストに対してテストが実行されます。
Postman はターミナル実行もできる
GUI の視認性は人にとってはありがたいですが、自動で定期的にテストを実行したいといったケースではターミナル上で実行できるようになっている方が便利です。
Postman はそんなニーズにも答えてくれます。Newman というツールを使います。Newman は Postman のプロジェクトが開発している CLI 版の Postman です。
使い方は、まず GUI 上で作成したリクエストをファイルにエクスポートします。

エクスポートすると *.postman_collection.json という名前のファイルが保存されます。
次に Newman をインストールしてリクエストを流します。
$ npm install newman
$ npx newman run (リクエスト).postman_collection.json
するとこんな感じでテストが実行されます。

色がついていてとても見やすいです。
Newman には JUnit 形式の XML でレポートを出力する機能も備わっています。下記のようにオプションを指定すると newman というディレクトリ配下に XML が出力されます。
$ npx newman run (リクエスト).postman_collection.json -r cli,junit
Jenkins は JUnit 形式の XML をテーブル表示するプラグインを持っているため、この XML を Jenkins で下記のように表示することができます。

このように Postman のリクエストは CI で実行可能な API テストとして使えるということです。Postman でリクエストを管理している方は結構多いと思われますので、ぜひ API テスト化して CI で自動実行させてみてはいかがでしょうか。
まとめ
Postman は単なるリクエスト管理ツールではない
Postman は GUI でも CLI でも実行できる柔軟性を持つ
Postman の利用者は多いので API テストに流用できる
最後までお読みいただきありがとうございました。