1. 導入:なぜPre-request Scriptsが重要なのか
API開発において、毎回手動で認証トークンを更新したり、送信用のタイムスタンプを計算したりするのは非常に非効率です。また、手作業による入力ミスはテストの信頼性を下げてしまいます。Postmanの「Pre-request Scripts」を活用すれば、リクエスト送信直前にJavaScriptを実行して、これらをすべて自動化できます。これにより、複雑な認証や動的なデータが必要なAPIに対しても、迅速かつ正確なテストが可能になります。
2. 基礎知識:Pre-request Scriptsとは
Pre-request Scriptsは、リクエストが送信される「前」に実行されるJavaScriptコードです。Postmanの環境変数やコレクション変数と連携することで、リクエストのヘッダーやボディ、クエリパラメータを動的に書き換えることができます。
主な用途
・現在時刻の動的生成(ISO形式など)
・リクエストボディに基づいたハッシュ値(HMAC等)の計算
・外部APIから取得した認証トークンの自動セット
・テストごとのユニークなID(UUID)の生成
3. 実装・解決策:自動化のステップ
基本的な手順は以下の通りです。
1. Postmanで対象のリクエストを開く。
2. 「Pre-request Script」タブを選択する。
3. 必要となるロジックをJavaScriptで記述する。
4. 設定した変数をリクエストのヘッダーやボディに{{変数名}}の形式で埋め込む。
4. サンプルプログラム:タイムスタンプと署名生成の例
以下は、リクエストのたびに現在時刻を生成し、それを元にした簡易的なハッシュ値を生成してヘッダーにセットするコード例です。
// 1. 現在時刻をISO 8601形式で取得して変数に保存
const timestamp = new Date().toISOString();
pm.environment.set("request_timestamp", timestamp);
// 2. 秘密鍵とタイムスタンプを使って簡易的な署名を生成
const secretKey = "my-secret-key";
const signature = CryptoJS.HmacSHA256(timestamp, secretKey).toString();
// 3. 生成した署名を環境変数にセット(リクエストヘッダーで利用可能になります)
pm.environment.set("request_signature", signature);
// コンソールで確認するためのログ出力
console.log("生成されたタイムスタンプ: " + timestamp);
console.log("生成された署名: " + signature);
このコードを保存後、リクエストヘッダーの「Value」欄に {{request_timestamp}} や {{request_signature}} と記述するだけで、送信のたびに最新の値が適用されます。
5. 応用・注意点:現場で陥りやすいバグを回避する
・変数のスコープを意識する
pm.environment.set は環境全体に影響します。特定のテストケース内だけで完結させたい場合は、pm.variables.set を使用して一時的な変数として扱うのが安全です。
・外部ライブラリの利用
Postmanは CryptoJS などの強力な暗号化ライブラリを標準で内蔵しています。自前で実装する前に、利用可能なライブラリを確認することで開発工数を大幅に削減できます。
・非同期処理への対応
Pre-request Script内での非同期処理(pm.sendRequestなど)は便利ですが、完了を待たずにリクエストが送信されると失敗の原因になります。複雑な処理を行う際は、同期的に実行されるように記述を工夫しましょう。
これらを使いこなすことで、APIテストの自動化レベルを一段階引き上げることができます。ぜひ日々の開発に取り入れてみてください。

コメント