Postman Package Library と Package
2024年12月のQiita AdventcalenderでPostman Collectionで設定されているAPIコールに対して、呼び出し前のリクエストの操作と呼び出し後のレスポンスの操作が可能となるスクリプトの機能を紹介しました。
汎用的に繰り返し使われるものは都度都度スクリプトをコピーするよりも、まとめておいて再利用した方が効率的です。それを実現させるのがPackage Libraryです。
再利用したいスクリプトをPackageとしてまとめて、それを管理するのがPackage Libraryという関係です。
Package Library とは
よく使用されるスクリプトやテストを チーム内のパッケージとして保存し、再利用を簡単にする機能です。スクリプトやテストを 1 か所で管理し、個人、プライベート、およびチームのワークスペースで再利用することができます。
さっそくやってみる
1.環境構築
まずは前回の記事で、呼び出し前のリクエストの操作と呼び出し後のレスポンスの操作をJavaScriptで行うところまで再現しておきます。
// 任意のヘッダーを設定する(例えば Content-Type)
pm.request.headers.add({ key: 'Content-Type', value: 'application/json' });
// 現在時刻を取得(ISO形式)
const currentDate = new Date().toISOString(); // 例: 2024-12-25T12:34:56.789Z
// リクエストボディを設定(例: JSON形式)
const requestBody = {
name: "John Doe",
email: "john.doe@example.com",
timestamp: currentDate // 現在時刻を追加
};
// リクエストのボディを設定
pm.request.body.update({
mode: 'raw',
raw: JSON.stringify(requestBody)
});
// ログで確認
console.log("Pre-request Script executed, sending data:", requestBody);
// レスポンスをテキストとして取得
const responseText = pm.response.text();
// 現在時刻を取得(ISO形式)
const currentDate = new Date().toISOString(); // 例: 2024-12-25T12:34:56.789Z
// レスポンスの内容と現在時刻をログに出力
console.log("Response received at " + currentDate + ":", responseText);
2. Package Library の作成
次にpre-request
のスクリプト画面の右側にある<
をクリックします。
Open package library
をクリックします。
Create Package
をクリックし、pre-quest
と名前を付けます。その後pre-request
のソースをコピーします。
(ソースは前画面から引き継いで自動でコピーされないので注意してください)
作成
ボタンをクリックするとパッケージが作成されます。
同様の手順でpost-response
も作成可能です。ここで一つ注意点ですが、一つのPackageに挿入可能なスクリプトは1つだけです。 したがってpost-response
は別のPackageとして作成する必要があります。
3. Packageの再利用
テスト用に再利用を行うAPIコールをコレクションの中で作成します。
スクリプトタブのpre-request
で、Package Libraryからpre-request
を選択します。
以下のスクリプトが挿入されます。
const preRequest = pm.require('@kameman-6657/pre-request');
先ほどのスクリプトがコピーされるのはなく、Packageを呼び出すスクリプトになっています。実行してみると以下の通りpre-request
のスクリプトが正しく実行されていることがわかります。
POST / HTTP/1.1
Host: reusepackage.requestcatcher.com
Accept: */*
Accept-Encoding: gzip, deflate, br
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 89
Content-Type: application/json
Postman-Token: 6c208d56-6934-467f-9817-a6483eb39010
User-Agent: PostmanRuntime/7.43.0
{"name":"John Doe","email":"john.doe@example.com","timestamp":"2025-01-09T06:17:30.484Z"}
今回のサンプルのように、パッケージに JavaScript コードまたはpmオブジェクト インスタンスのみが含まれ、呼び出し可能な関数やオブジェクトが含まれていない場合はよりシンプルに以下の記載のみでも呼び出し可能です。
pm.require('@kameman-6657/pre-request');
一方関数等を呼び出したい場合は以下のような記載になります。
const preRequest = pm.require('@kameman-6657/pre-request');
prerequest.functionName();
この場合Packageに含めるスクリプトでは以下のように関数をexportしておく必要があります。
// 1. 任意のヘッダーを設定する関数
function setHeader(key, value) {
pm.request.headers.add({ key: key, value: value });
}
// 2. 現在時刻を取得する関数
function getCurrentTimestamp() {
return new Date().toISOString();
}
// 3. リクエストボディを設定する関数
function setRequestBody(name, email) {
const currentDate = getCurrentTimestamp(); // 現在時刻を取得
const requestBody = {
name: name,
email: email,
timestamp: currentDate // 現在時刻を追加
};
pm.request.body.update({
mode: 'raw',
raw: JSON.stringify(requestBody)
});
return requestBody; // リクエストボディを返す
}
// メイン処理
function main() {
// 任意のヘッダー設定(Content-Type)
setHeader('Content-Type', 'application/json');
// リクエストボディの設定
const requestBody = setRequestBody("John Doe", "john.doe@example.com");
// ログで確認
console.log("Pre-request Script executed, sending data:", requestBody);
}
function main2() {
// 任意のヘッダー設定(Content-Type)
setHeader('Content-Type', 'application/json');
// リクエストボディの設定
const requestBody = setRequestBody("kameman", "kameman@example.com");
// ログで確認
console.log("Pre-request Script executed, sending data:", requestBody);
}
module.exports = {
main,main2
}
Discussion