API テストは、使えるツールが cURL しかなかった頃と比べて大幅に進歩しています。 現在では、Postman の使いやすいインターフェイスで簡単にリクエストを作成し、E2E (エンドツーエンド) テストを快適に行えるようになりました。 Postman はあらゆる機能が備わったコラボレーション プラットフォームであり、API の開発とテストにお勧めです。

このチュートリアルでは、Postman の概要や Postman のコマンドライン ユーティリティである Newman を使用して API テストを実行する方法と、このテストを自動化する方法について説明します。

Postman とは?

Postman とは、APIを開発・テストするためのコラボレーションプラットフォームです。Postmanでは、Tokenなどを設定し、APIのエンドポイントにリクエストを投げ込めば Response(レスポンス)を確認することができます。現在 Postmanには、HTTP や REST、SOAP、GraphQLなどのリクエストテストや、API design、API documentation、API detection、Mock Server、Monitors、Workspaces などの機能が存在します。Postmanを利用することによってAPI開発が簡略化され作業効率の向上を実現することができます。

前提条件

このチュートリアルを進めるには、いくつかの準備が必要です。

  1. JavaScript の基礎を理解する
  2. デスクトップ版 Postman をシステムにインストールする (ダウンロードはこちら)
  3. CircleCI アカウントを用意する
  4. GitHub アカウントを用意する

今回は、こちらの記事で開発およびデプロイ済みの API をテストします。 これは、ユーザー アカウントの作成用エンドポイントとフェッチ用エンドポイントで構成されたシンプルな Node.js API です。 前述の記事では、この API を https://my-adonis-api-app.herokuapp.com というアドレスにデプロイしました。 こちらにあるソース コードを、記事 (段落冒頭のリンク) の手順に従ってデプロイしてください。

すべてのインストールとセットアップが済んだら、チュートリアルを始めましょう。

Postman の環境をセットアップする

API テスト用の自動テスト パイプラインをセットアップするには、Postman で環境を作成する必要があります。 環境のスコープを設定しておくと、ポストマン全体や環境間での変数の衝突を防止できるので、おすすめです。

デスクトップ版 Postman を開きます。 インターフェイス右上隅にある [Manage Environments (環境の管理)] 歯車アイコンをクリックします。 [Manage Environments (環境の管理)] ダイアログで [Add (追加)] をクリックします。

注: Postman の UI は、チュートリアルのスクリーンショットとは若干異なる場合がありますが、必要なツールは説明のとおりの場所にあります。

[Add Environment (環境の追加)] ダイアログで、環境の名前を入力します。

以下のように、環境変数 api_url を入力します。 API のベース URL として https://cci-gwp-adonis-api.herokuapp.com と入力します (末尾のスラッシュなし)。 [CURRENT VALUE (現在の値)] には、[INITIAL VALUE (初期値)] の値がコピーされます。 このチュートリアルでは、これらの値は同一のままにしてください。

環境の作成 - Postman

[Add (追加)] をクリックして、新しい環境を作成します。 インターフェイス右上のドロップダウンで、作成した新しい環境を選択します。

API テスト用に Postman コレクションを作成する

次のステップは、テストする API のユーザー エンドポイント用に Postman のコレクションを作成することです。 Postman のコレクションとは、API リクエストのコンテナのようなものです。 一般には、特定のエンティティに関連するリクエストをグループ分けするために使用します。

新しいコレクションを作成するため、インターフェイスの左サイド バーにある [Collections (コレクション)] タブをクリックします。 次に、[New Collection (新規のコレクション)] をクリックします。

コレクションの作成ボタン - Postman

[New Collection (新規のコレクション)] ダイアログで、作成するコレクションの名前を入力します (今回は Users)。 コレクションには、用途を把握しやすいように説明をつけることもできます。

コレクションの作成 - Postman

[Create (作成)] をクリックしてコレクションの設定を完了します。 新しいコレクションが、[Collections (コレクション)] タブの下の左サイド バーに表示されます。

コレクションにリクエストを追加する

これで、コレクションにリクエストを追加できるようになりました。 今回のテスト対象の API は、2 つのエンドポイントで構成されています。

  • {{api_url}}/user/get (GET): ユーザー プロファイルのリストをフェッチします。
  • {{api_url}}/user/create (POST): 新しいユーザー プロファイルを作成します。

新しいリクエストを追加するために、下図のとおりコレクションの横に表示されるフライアウト メニューをクリックします。

リクエストの追加 - Postman

[Add requests (リクエストの追加)] をクリックします。 {{api_url}}/user/get エンドポイントへのリクエストを下図のとおり作成し、[Save to Users (Users に保存)] をクリックします。 Users には、先ほど作成したコレクションの名前が入ります。

リクエストの追加 - Postman

新しいリクエストのタブが一覧に加わりました。 現在の環境用に作成した api_url 変数を使用して、アドレス バーにリクエストのエンドポイントを入力します ({{api_url}}/user/get)。 リクエストのメソッドとして [GET] を選択します。 下図のようにリクエストを実行します。

リクエストの追加 - Postman

Postman からユーザーの配列が返されます。 [Save (保存)] をクリックします。

今度は、{{api_url}}/user/create エンドポイントへのリクエストを下図のとおり作成します。 これは POST リクエストであり、usernameemailpassword が必須です。

リクエストの追加 - Postman

リクエストの保存をお忘れなく。

API リクエストのテストを作成する

準備が完了したので、テストをいくつか追加しましょう。

左サイド バーで {{api_url}}/user/get リクエストが選択されていることを確認してください。 選択されていない場合は、このリクエストをクリックして選択してください。 [Tests (テスト)] タブをクリックして、以下のとおり入力します。

pm.test("リクエストはステータス コードが 200 で成功", function () {
  pm.response.to.have.status(200);
});

pm.test("配列が返されるかテスト", function () {
  var jsonData = pm.response.json();
  pm.expect(jsonData).to.be.an("array");
});

テスト 1 の追加 - Postman

今追加した Postman のテストは、Chai アサーションです。

上記コードの最初のテストでは、リクエストがステータス コード 200 で無事に完了するかどうかを確認しています。 2 つ目のテストでは、リクエストから返されたデータが配列であるかどうかを確認しています。このチュートリアルでは、ユーザー プロファイルの配列が返されるはずです。

またリクエストを保存して実行しましょう。 合格したテストの情報が [Test Results (テスト結果)] タブに表示されます。

テスト 1 の実行 - Postman

次に、{{api_url}}/user/create エンドポイントへの POST リクエストについてのテストを追加します。 このエンドポイントのテストは、先ほどのテストよりも複雑です。 この API では、リクエストの usernameemail パラメーターについて重複確認を実施するためです。 パラメーターをハードコーディングしてしまうと、2 回目以降のリクエストが必ず失敗することになってしまいます。

こうした場合でも、Postman の Pre-request Script (プレリクエスト スクリプト) を使用すれば問題ありません。 プレリクエスト スクリプトは、リクエストの送信前に実行されます。 このスクリプトを使って、リクエスト用にランダムなユーザー名とメール アドレスを動的に生成しましょう。

リクエストをクリックして読み込み、[Pre-request Script (プレリクエスト スクリプト)] タブをクリックします。 以下のスクリプトを追加します。

let random = +new Date();

pm.globals.set("username", `${random}-user`);
pm.globals.set("email", `${random}-user@test.com`);

プレリクエスト スクリプト - Postman

上記のスクリプトでは、リクエストの送信の度に、現在のタイムスタンプを使用してランダムなユーザー名とメール アドレスを作成します。 ランダムな usernameemail は、リクエスト インスタンスのグローバル変数として設定しています。 リクエスト本文の usernameemail を、下図のように動的な値に置き変えてください。

動的パラメーター - Postman

これで、リクエストごとに、usernameemail で動的パラメーターが使用されるようになりました。 このリクエストの [Tests (テスト)] ウィンドウに、以下のコードを追加します。

pm.test("ユーザー作成が成功", function () {
  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]);
});

pm.test("応答メッセージを確認", function () {
  var jsonData = pm.response.json();
  pm.expect(jsonData.message).to.eql("User Successfully created");
});

上記コードの最初のテストでは、ステータス コードが 200201202 であれば応答が成功したとみなします。 つまり、POST リクエストの成否を判断します。 2 つ目のテストでは、返された json 応答のメッセージが、想定される成功メッセージと一致するかどうかを確認します。

リクエストを実行すると、下図のようにテストが成功するはずです。

テスト結果 2 - Postman

テスト自動化プロジェクトをセットアップする

ここまでは、Postman の便利な GUI を使用してリクエストを作成してきましたが、このチュートリアルのゴールは、テストの実行とテスト結果の生成を自動化することです。 ここからは、テスト自動化プロジェクトをセットアップしましょう。

まずは、ローカル マシンの任意の場所にプロジェクト用フォルダーを作成します。

mkdir postman-api-testing

リクエストを保存してから、 コレクションのコンテキスト メニューの [Export (エクスポート)] をクリックします。

コレクションのエクスポート - Postman

Users.postman_collection.json という名前のファイルがダウンロードされます。

このチュートリアルで作成した Postman の環境もエクスポートしましょう。 [Manage Environments (環境の管理)] アイコンをクリックし、ポップアップ ダイアログから環境をダウンロードします。 My-Remote-API-Testing.postman_environment.json という名前のファイルがダウンロードされます。

注: ファイル名を変える場合は、一貫性を保つように注意するか、チュートリアル内のサンプル ファイルの名前を変更して使用してください。

これら 2 つのファイルをプロジェクト フォルダーのルートに配置します。

プロジェクトと CircleCI を連携させる

初めに、プロジェクトを GitHub にプッシュします。

次に、CircleCI ダッシュボードの [Projects (プロジェクト)] ページに移動して、プロジェクトを追加します。

プロジェクトの追加 - CircleCI

[Set Up Project (プロジェクトをセットアップ)] をクリックします。

設定ファイルの追加 - CircleCI

セットアップ ページで、表示されたサンプルを無視して設定ファイルを手動でセットアップするため、[Use Existing Config (既存の設定ファイルを使用する)] をクリックします。 パイプラインの設定ファイルをダウンロードするのか、ビルドを開始するのかを確認するメッセージが表示されます。

ビルドに関するプロンプト - CircleCI

[Start Building (ビルドの開始)] をクリックします。 設定ファイルのセットアップがまだのため、このビルドは失敗します。 これについては、次のステップで実行します。

Newman Orb を使用してテスト プロセスを自動化する

このチュートリアルの最後のステップは、テスト自動化スクリプトを作成することです。 このスクリプトでは、Postman の CLI 版である Newman を使用して、エクスポートした環境でコレクションを実行します。 幸い、CircleCI には Newman 用 Orb があります。 Orb とは、さまざまな定型コードを抽象化したパッケージです。 Orb を使用することで、API で共通のコマンドを呼び出したり、Newman、Heroku といったツールや環境を使用したりしやすくなります。

newman はサードパーティ製 Orb なので、使用するには CircleCI アカウントの設定で許可する必要があります。 このために、お使いの CircleCI アカウントの [Organization Settings (組織設定)] に移動します。 左サイド バーの [Security (セキュリティ)] をクリックします。 ビルドでのサードパーティ製 Orb の使用を許可するため、[Orb Security Settings (Orb のセキュリティ設定)] ページで [Yes (はい)] を選択します。

セキュリティ設定 - CircleCI

設定ファイルを作成する

プロジェクトのルートに .circleci という名前のフォルダーを作成し、その中に config.yml という名前の設定ファイルを追加します。 このファイルに、以下のコードを貼り付けます。

version: 2.1
orbs:
  newman: postman/newman@0.0.2
jobs:
  build:
    executor: newman/postman-newman-docker
    steps:
      - checkout
      - newman/newman-run:
          collection: ./Users.postman_collection.json
          environment: ./My-Remote-API-Testing.postman_environment.json

上記のスクリプトでは、newman/newman-run コマンドを呼び出して、Postman の Newman Orb を読み込み、指定した environmentcollection を実行しています。 シンプルですね。

変更をコミットしてからリモート リポジトリにプッシュし、パイプラインのビルドをトリガーしましょう。

ビルド成功 - CircleCI

テスト結果を確認するために、ビルドをクリックして、[Test (テスト)] タブを展開します。

テスト結果 - CircleCI

想定どおり、Newman がコレクションを実行し、その後テストの実行の詳細に関するレポートが生成されています。

うまく行きましたね!

まとめ

テスト プロセスを手動で処理していると、すぐに複雑化し、ミスが起こりやすくなってしまいます。 Postman の GUI は、API 開発者ならば必須のツールキットとなっています。 このチュートリアルでご紹介したとおり、CircleCI の自動パイプラインと newman Orb を活用すれば、API テストのプロセスをさらに発展させることができます。

Happy coding!


Fikayo Adepoju は、Web とモバイル テクノロジー、DevOps に精通した LinkedIn Learning (Lynda.com) 講師、フルスタック開発者、テクニカル ライター、テクニカル コンテンツ クリエイターです。スケーラブルな分散アプリケーション開発については 10 年以上の経験を持っています。 CircleCI、Twilio、Auth0、The New Stack のブログで 40 以上の記事を執筆するほか、個人の Medium ページでも情報を発信しており、役立つ知識を多くの開発者に広めることに専心しています。 また、Udemy で動画形式のコース (英語) も開講しています。ぜひご覧ください。

さんの他の投稿を読む Fikayo Adepoju