PostmanのPre-requestとPost-responseは、APIテストにおいて重要なスクリプト機能です。これらを効率的に活用することで、テスト自動化の精度が向上し、作業の効率化も実現できます。この記事では、Pre-requestとPost-responseの基礎から応用的な使い方、さらに具体的なスクリプト例や活用のポイントまで徹底解説します。
1. Pre-requestの便利なスクリプト例
Pre-requestスクリプトは、リクエストを送信する前に実行されるスクリプトです。これを活用すれば、リクエスト前の準備を自動化し、効率的なAPIテストが可能になります。以下の例を見ていきましょう。
1.1. JWTトークンの自動生成
多くのAPIでは認証が必要です。特にJWTトークンを使用する場合、このスクリプトでトークンを毎回自動生成することができます。
const header = {
"alg": "HS256",
"typ": "JWT"
};
const payload = {
"sub": "user@example.com",
"name": "John Doe",
"admin": true
};
const secret = "your-256-bit-secret";
const token = jwt.sign(payload, secret, { algorithm: 'HS256', header: header });
pm.environment.set("jwt_token", token);
ポイント:
- セキュリティ管理: トークン生成に使うシークレットキー(
secret
)は、セキュリティ上、安全なストレージ(例:Postmanの環境変数や暗号化されたVault)で管理しましょう。 - 動的なペイロード:
payload
の値をAPIのテストシナリオに応じて動的に変更することで、さまざまなユーザーパターンを簡単に再現できます。
1.2. 現在のタイムスタンプを設定
APIにタイムスタンプが必要な場合、以下のスクリプトを使うと便利です。
var timestamp = Math.floor(Date.now() / 1000);
pm.environment.set("current_timestamp", timestamp);
ユースケース例:
- 認証トークンの有効期限(
exp
フィールド)に使用。 - 時間依存のAPIテスト(例:一定期間内のデータ取得)に活用。
1.3. ランダムなデータの生成
ランダムなデータを生成してAPIの負荷テストや異常値テストを行う際に便利です。
// ランダムな文字列
var randomString = Math.random().toString(36).substring(7);
pm.environment.set("random_string", randomString);
// ランダムなUUID
const uuid = require('uuid');
pm.environment.set("random_uuid", uuid.v4());
補足: ランダムなデータ生成を組み合わせることで、予期せぬエラーやバグを発見するテストケースを作成できます。
2. Post-responseの便利なスクリプト例
Post-responseスクリプトは、リクエストのレスポンスを受け取った後に実行されます。これにより、APIの動作確認やレスポンスデータの活用が効率化します。
2.1. ステータスコードの確認
ステータスコードをチェックする基本的なスクリプトです。
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
ベストプラクティス:
- エラーステータス(例:
400
,404
,500
など)に対するテストも事前に用意し、APIのエラーハンドリングを検証しましょう。
2.2. レスポンスデータの検証
レスポンスに含まれる特定のフィールドや値が期待通りかをチェックできます。
pm.test("Response has user_id", function () {
var jsonData = pm.response.json();
pm.expect(jsonData).to.have.property('user_id');
});
2.3. レスポンスデータを次のリクエストに利用する
以下の例では、レスポンスデータからuser_id
を抽出し、後続のリクエストで利用できるように設定します。
var jsonData = pm.response.json();
pm.environment.set("user_id", jsonData.user_id);
Tip: データをチェーン化することで、より複雑なテストシナリオを簡単に構築できます。
2.4. レスポンスタイムの確認
レスポンスが一定の時間以内に返されるかどうかをテストします。
pm.test("Response time is less than 500ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
3. Pre-requestとPost-responseの応用的な使い方
3.1. テストスイートの構築
複数のリクエストを連携させ、以下のようなテストスイートを構築できます。
- Pre-request: 各リクエストに必要なトークンや動的変数を生成。
- Post-response: 各リクエストの結果を次のリクエストに引き継ぐ。
3.2. カスタムライブラリの活用
Postmanでは、require
を使ってNode.jsライブラリをインポートできます。たとえば、暗号化ライブラリを使って安全なトークン生成を行うことも可能です。
const crypto = require('crypto');
const hash = crypto.createHash('sha256').update('example').digest('hex');
pm.environment.set("hash_value", hash);
4. 使い分けのポイント
PostmanでAPIテストを行う際には、Pre-requestとPost-responseを組み合わせることで、テストの準備と検証を効率的に行うことができます。Pre-requestではリクエスト前のデータ準備を自動化し、Post-responseではレスポンスの正確性やパフォーマンスを検証できます。
目的 | Pre-request | Post-response |
---|---|---|
リクエスト前にトークンやデータを生成する | ✔ | ✘ |
環境変数やグローバル変数を設定する | ✔ | ✘ |
ランダムなデータを生成する | ✔ | ✘ |
リクエスト後にレスポンスを検証する | ✘ | ✔ |
レスポンスのデータを変数に保存する | ✘ | ✔ |
APIのパフォーマンステストを行う | ✘ | ✔ |
5. より高機能なテストを作るためのヒント
- エラーパターンを意識したテスト:
正常系だけでなく、異常系(例:無効なトークン、不正な入力データ)のテストも設定することで、APIの堅牢性を確認できます。 - CI/CDパイプラインとの連携:
Postmanのスクリプトは、新しいAPI変更を即座に検証するためにCI/CDツール(例:Jenkins、GitLab CI)と統合するのが理想的です。 - パフォーマンスモニタリング:
レスポンスタイムの測定や負荷テストのスクリプトを追加して、APIのパフォーマンスを監視する習慣をつけましょう。
6.まとめ
PostmanのPre-requestとPost-responseは、APIテストを効率化する強力なツールです。スクリプトの使い方次第で、複雑なテストシナリオや動的なデータ生成が簡単に実現できます。この記事を参考に、より高度なテスト環境を構築してみてください!