はじめに
Postmanとは、一言で言うと「APIの開発・テスト・管理を簡単にするためのコラボレーションプラットフォーム」です。
Webサービスやアプリを作る際、サーバーとデータのやり取りをする「API」が正しく動いているかを確認する必要があります。Postmanを使うことで、わざわざプログラムコードを書かなくても、直感的な画面操作だけでAPIのテストを行うことができます。
世界中の開発者やテスター(QAエンジニア)に愛用されている、非常に有名なツールです。
本記事では、Postmanでよく使われるAPIテストのサンプルScriptを紹介します。言語は全てJavaScriptになりますが、単純な検証であれば言語仕様を深く理解していなくても簡単に実装可能です。
事前準備
以降のコードの中で「jsonData」という変数が存在しますが、事前に以下のような形でパースしておき、それを使うようにしましょう。必ず必要となる処理のため、各サンプルには含めず事前準備として切り出して紹介しています。
// レスポンスをパースしておく
let jsonData;
try {
jsonData = pm.response.json();
} catch (e) {
jsonData = null;
}
サンプルScript集
サンプルScriptの中で使われる固定値は、実際にテストしたい値に読み替えるようにしてください。
ステータスコードをチェックする
pm.test("ステータスコードが 200 であること", function () {
pm.response.to.have.status(200);
});
ステータスコードの範囲をチェックする
pm.test("ステータスコードが 2xx の範囲であること", function () {
pm.expect(pm.response.code).to.be.within(200, 299);
});
ステータスコードが指定したコードのいずれか(or)をチェックする
pm.test("ステータスコードが 200 または 201 のどちらかであること", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 201]);
});
レスポンスタイムがxxx未満であることをチェックする
pm.test("レスポンス時間が 500ms 未満であること", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
Content-Type ヘッダーが存在し application/json を含むことをチェックする
pm.test("Content-Type ヘッダーが存在し application/json を含むこと", function () {
pm.response.to.have.header("Content-Type");
pm.expect(pm.response.headers.get("Content-Type")).to.include("application/json");
});
X-Request-Id ヘッダーが UUID 形式であることをチェックする
pm.test("X-Request-Id ヘッダーが UUID 形式であること(簡易チェック)", function () {
const val = pm.response.headers.get("X-Request-Id");
pm.expect(val).to.match(/^[0-9a-fA-F-]{8,}$/);
});
レスポンスボディに特定の文字列が含まれることをチェックする
pm.test("レスポンスボディに特定の文字列が含まれること", function () {
pm.expect(pm.response.text()).to.include("success");
});
レスポンスボディが空でないことをチェックする
pm.test("レスポンスボディが空でないこと", function () {
pm.expect(pm.response.text().length).to.be.above(0);
});
JSON レスポンスボディがパースでき、トップレベルに「data」を持つことをチェックする
pm.test("JSON ボディがパースでき、トップレベルに 'data' を持つこと", function () {
pm.expect(jsonData, "レスポンスが JSON であること").to.be.an("object");
pm.expect(jsonData).to.have.property("data");
});
data.user.id が期待する値であることをチェックする
pm.test("data.user.id が期待する値であること", function () {
pm.expect(jsonData.data.user.id).to.eql(12345); // 厳密等価
});
data.items は配列で長さが 3 であることをチェックする
pm.test("data.items は配列で長さが 3 であること", function () {
pm.expect(jsonData.data.items).to.be.an("array").that.has.lengthOf(3);
});
users 配列に特定の要素が含まれるであることをチェックする(deep include)
pm.test("users 配列に特定の要素が含まれる(deep include)", function () {
pm.expect(jsonData.users).to.deep.include({ id: 7, name: "Ken" });
});
user.name は文字列であることをチェックする
pm.test("user.name は文字列であること", function () {
pm.expect(jsonData.user.name).to.be.a("string");
});
user.age は数値で 18 より大きいことをチェックする
pm.test("user.age は数値で 18 より大きいこと", function () {
pm.expect(jsonData.user.age).to.be.a("number").that.is.above(18);
});
user.email がメール形式にマッチすることをチェックする
pm.test("email がメール形式にマッチすること", function () {
pm.expect(jsonData.user.email).to.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/);
});
roles が必要なメンバーを含むことをチェックする
pm.test("roles が必要なメンバーを含むこと", function () {
pm.expect(jsonData.user.roles).to.include.members(["admin", "editor"]);
});
レスポンスオブジェクトが期待オブジェクトと一致することをチェックする(deep include)
pm.test("レスポンスオブジェクトが期待オブジェクトと一致すること(deep equal)", function () {
const expected = { id: 1, name: "Sample", active: true };
pm.expect(jsonData.meta).to.deep.equal(expected);
});
エラーメッセージが含まれていないことをチェックする
pm.test("エラーメッセージが含まれていないこと", function () {
pm.expect(pm.response.text()).to.not.include("error");
});
不要なプロパティが存在しないことをチェックする
pm.test("不要なプロパティが存在しないこと", function () {
pm.expect(jsonData).to.not.have.property("internalFlag");
});
cookie がセットされていることをチェックする
// === Cookie 検証 ===
pm.test("cookie がセットされていること", function () {
const cookieVal = pm.cookies.get("session_id");
pm.expect(cookieVal).to.exist;
});
アクセストークンが環境変数に保存されていることをチェックする
pm.test("アクセストークンが環境変数に保存されていること", function () {
pm.expect(pm.environment.get("access_token")).to.exist;
});
以上です。
Postmanでは他にも様々なAssertion(Test)が可能です。詳細は公式ドキュメントを参照してみてください。