---
title: Postmanを利用した正式版反映前のリグレッションテスト
description: 正式版の反映前後でAPIレスポンスが変化していないかを確認するため、Postmanを利用してリグレッションテストを行う方法を説明します。
---

## 概要
正式版の反映前後でAPIレスポンスが変化していないかを確認するため、Postmanを利用してリグレッションテストを行う方法を説明します。  
APIのレスポンスが変わる場合はSlackコミュニティ等でお知らせがされますが、対象のエンドポイントや使い方をしている箇所がないか確認するのにご活用ください。

### 前提条件
- 主にProject Managerを対象としています。クライアント案件サイトのAPIレスポンスが以前と変化していないことを最低限確認するためのテストです。
- Postmanのアプリケーションを利用して、ローカル環境から手動でテストを実行します。
- 静的アクセストークンのAPI (GETメソッド) のみを対象としています。

:::caution
- Postmanはテスト用のコレクションファイルや実行ログを日本国外(USまたはEU)に保管します。テスト実施可否を事前にクライアントへ確認し、必ず許可を得てください。  
  - [Security at Postman](https://www.postman.com/trust/security/)  
- 機密情報や個人情報を含むサイトは絶対に対象としないでください。必要な場合は、それらを全てダミーデータに置き換えたテスト用の環境を別途用意してください。 
::: 

### テスト実施のフロー
以下の流れで、正式版反映直前のRC版に対してテストを実行し、APIレスポンスに変化がないかを事前に確認します。

1. 正式版環境のAPIが返すレスポンスデータをすべて取得・保存する
2. RC版にバージョンを切り替える
3. 各APIに対してリクエストし、1の時点で保存していたAPIレスポンスと比較する

## 事前準備
まずは以下のURLからPostmanに登録します。
- https://identity.getpostman.com/signup

![Image from Gyazo](https://t.gyazo.com/teams/diverta/d68f157349ff14da2f87afbe9ecedd5a.png)

<!--ENキャプチャ-->
<!--
![Image from Gyazo](https://t.gyazo.com/teams/diverta/f291cdf6ced86f5caf55cf9f26f33bf6.png)
-->

登録ができたらPostmanでワークスペースの作成します。  
[ワークスペースの作成]をクリックします。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/aad2151ef6e65d392c6148eae4269ec5.png)

<!--ENキャプチャ-->
<!--
[Image from Gyazo](https://t.gyazo.com/teams/diverta/0f47af560e28e296d09e64d3ace290de.png)
-->

[空のワークスペース]を選択し、次へ進みます。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/b549d468be41f8067e8fa54c0d473764.png)

<!--ENキャプチャ-->
<!--
![Image from Gyazo](https://t.gyazo.com/teams/diverta/ddd4b5de83b4ecca7eb20e72f2863e0e.png)
-->

プロジェクト名を入力し、Internal (非公開) が選択された状態で、ワークスペースを新規作成します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/dd8363e3db2b8a151ef9ab5a0dd71e53.png)

<!--ENキャプチャ-->
<!--
![Image from Gyazo](https://t.gyazo.com/teams/diverta/80ee275e68176771d31378511f9d720a.png)
-->

以降は、以下のURLからPostmanのアプリケーションをダウンロードしてデスクトップ版のPostmanを使用します。
- https://www.postman.com/downloads/

:::tip
ブラウザ版で進めることもできますが、その場合はCORSポリシーに従う必要があるため、Kuroco側のCORS設定に以下の追加が必要です。
- `CORS_ALLOW_ORIGINS`に`https://プロジェクト名.postman.co`を追加
- `CORS_ALLOW_HEADERS`に以下を追加
  - X-RCMS-API-ACCESS-TOKEN
  - User-Agent
  - Cache-Control
  - Postman-Token

:::

## テスト作成方法
### KurocoのAPIをOpenAPI形式でエクスポート
Kurocoの管理画面でテスト実行対象APIのエンドポイント一覧画面を開き、[OpenAPIエクスポートする] を選択します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/8b01423198d65c8e27d606257e96c9fa.png)

出力形式に [JSON] を選択し、`openapi.json` (APIの定義ファイル) をダウンロードします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/b3683c7c734bb590b14385d58591c1ce.png) 

### Postmanコレクションファイルの作成
エクスポートしたAPIの定義を利用して、Postmanのコレクションファイル（実行するテストをまとめたファイル）を作成します。

API定義からPostmanコレクションファイルを作成するためのスクリプトを準備していますので、
Node.jsスクリプトを実行できる環境で、`openapi-to-postmanv2@^5.0.0`のをインストールし、以下のスクリプトを実行してください。  
https://gist.github.com/sakaguchi-diverta/2fbedcc430366126fea46d0f5a127a23

:::caution
スクリプトの内容や配置先は今後変更する可能性があります。
:::

スクリプト実行の詳細説明は省略します。  
AIエージェントに作業や解説を依頼しても構いません。  
弊社ではDevinに実行を依頼することでPostmanコレクションファイルを生成しました。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/729b3181ca220a218b94576bd481efec.png)

実行が完了すると、Postmanのコレクションファイル`postman_collection.json`が出力されます。

### Postmanコレクションのインポートと調整
Postmanのワークスペースに戻り、[インポート]を選択し、先ほど出力した`postman_collection.json`をアップロードします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/1666c94bed7c35f5ee66c92405485951.png)

<!--ENキャプチャ-->
<!--
![Image from Gyazo](https://t.gyazo.com/teams/diverta/151979d2599723fac774c789af006c17.png)
-->

インポートが完了すると、以下のように「サンプル保存」と「テスト」に分かれたフォルダ内に、各エンドポイントへのリクエスト情報が保存されます。

「サンプル保存」のフォルダで正式版のレスポンスを取得・保存し、「テスト」のフォルダでRC版のレスポンスを取得して正式版のレスポンスと比較しますので、
テスト実行対象から除外したいエンドポイントがある場合は、「テスト」フォルダから削除します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/0d18c73f0756132b736cf57e96f9cf30.png)

<!--ENキャプチャ-->
<!--
![Image from Gyazo](https://t.gyazo.com/teams/diverta/b4bca1163f2742cf96db905245b529ab.png)
-->

詳細取得用のエンドポイント (details) の場合、ID/Slugの指定箇所が変数になっています。
以下のようにパス変数の箇所をテスト実行対象のIDに置き換えて、保存し直します。(サンプル保存のフォルダ、テストのフォルダの両方)

![Image from Gyazo](https://t.gyazo.com/teams/diverta/3622dc24316529cb9338a3463d508365.png)

<!--ENキャプチャ-->
<!--
![Image from Gyazo](https://t.gyazo.com/teams/diverta/ad4c0a558d677540f28accf08eb4b1ce.png)
-->


テスト実行時に比較対象から無視したい項目がある場合は、テストファイルのエンドポイントを選択し、[スクリプト]タブの ignore_keysに対象の項目名 (APIレスポンスのキー) を追記し、保存ます。

例:

```
const ignore_keys = [
    "update_ymdhi",
    "ymd"
];
```

![Image from Gyazo](https://t.gyazo.com/teams/diverta/c2ea9da755b67b3db36c6988633efe75.png)

<!--ENキャプチャ-->
<!--
![Image from Gyazo](https://t.gyazo.com/teams/diverta/57f54e2ee2b3814e63961d1a02129a03.png)
-->

### アクセストークンの保存
最後にAPIのアクセストークンを保存します。保存先としてPostman Vault(機密情報をローカル環境で管理するための領域)を利用します。

Postmanのフッターメニューから [Vault]を選択し、APIの静的アクセストークンを`RCMS_API_STATIC_TOKEN`として保存します。

:::note
`X-RCMS-API-ACCESS-TOKEN`ではないのでご注意ください。
:::

![Image from Gyazo](https://t.gyazo.com/teams/diverta/dca9b0bdbb143f7fdae88973201ad343.png)

<!--ENキャプチャ-->
<!--
![Image from Gyazo](https://t.gyazo.com/teams/diverta/edd9c616b8cefb10cfacf3da3695f46e.png)
-->

## テスト実行方法
### Kuroco正式版のサンプル保存
テスト実行対象のKurocoサイトを正式版に切り替えます。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/03cd5565be777629bc81453674bd9f36.png)

Psotmanで、[サンプル保存] のフォルダを選択し[実行] をクリックします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/206e3822a2e514924efa17488d963da0.png)

続けて、オレンジ色の実行ボタンをクリックし、サンプル保存リクエストを実行します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/3eb0e47d7421d5662a1eaeb994f63e73.png)

リクエストが実行され、200のレスポンスが返ってきていることを確認します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/568e757a84214d49d6529c80ca73355a.png)
 
実行完了後にコレクションの最上位のフォルダを選択し、[変数] タブを選択すると、先ほど取得したAPIレスポンスが変数内に保存されていることを確認できます。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/b44c119ad2bafcbcae18e16812edf4a2.png)

### KurocoRC版のサンプル保存
テスト実行対象のサイトをRC版に切り替えます。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/e09fdaa72af1b9c240123e8c84bcc6f7.png)

サンプル保存時と同様に、[テスト] フォルダを選択してリクエストを実行します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/c93414f79c969dd5140611aaf83594ef.png)

実行完了後、結果を確認します。レスポンスに変化があった場合はFAILが、変化がなかった場合はPASSが出力されます。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/89a02f9446a34b852f56361cfa6c2965.png)

<!--ENキャプチャ-->
<!--
![Image from Gyazo](https://t.gyazo.com/teams/diverta/4106a7f93069a84babd5ca3bc6969c95.png)
-->

FAILになった項目は正式版のレスポンスと比較します。  
今回の場合は画像に付く一時トークンの値が異なるためFAILになっていることが分かりました。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/94967cbd110eb1585f990dd76088bf1f.png)

Postmanを利用した正式版反映前のリグレッションテストの説明は以上になります。