アサーション
後処理Scriptは、Requestを送信した後に実行されるコードスニペットです。主に、Reuqestによって返された結果が正しいかどうかをアサートする場合と、返された結果データを環境変数などに書き込む場合などに使用されます。
例
Requestによって返された結果が正しいかどうかを判断します。
// pm.response.to.have Example
pm.test("Return status code 200", function() {
pm.response.to.have.status(200);
});
// pm.expect() Example
pm.test("The current environment is the production environment", function() {
pm.expect(pm.environment.get("env")).to.equal("production");
});
// response assertions Example
pm.test("No error in return result", function() {
pm.response.to.not.be.error;
pm.response.to.have.jsonBody("");
pm.response.to.not.have.jsonBody("error");
});
// pm.response.to.be* Example
pm.test("No error in return result", function() {
// assert that the status code is 200
pm.response.to.be.ok; // info, success, redirection, clientError, serverError, are other variants
// assert that the response has a valid JSON body
pm.response.to.be.withBody;
pm.response.to.be.json; // this assertion also checks if a body exists, so the above check is not needed
});
返されたデータを環境変数に書き込みます。
// Get return data in JSON format
var jsonData = pm.response.json();
// Write the value of jsonData.token into an environment variable
pm.environment.set("token", jsonData.token);
ResponseのBodyに指定された文字列(string)が含まれているかどうかを確認します。
pm.test("Body matches string", function() {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
ResponseのBodyに指定された文字列(string)になっているかどうかを確認します。
pm.test("Body is correct", function() {
pm.response.to.have.body("response_body_string");
});
Jsonの出力値を確認します。
pm.test("Your test name", function() {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
HeaderにContent-Typeが設定されているかどうかを確認します。
pm.test("Content-Type header is present", function() {
pm.response.to.have.header("Content-Type");
});
RequestのResponse 時間は200ミリ秒より少ないことを確認します。
pm.test("Response time is less than 200ms", function() {
pm.expect(pm.response.responseTime).to.be.below(200);
});
HTTPステータスコードが200であることを確認します。
pm.test("Status code is 200", function() {
pm.response.to.have.status(200);
});
HTTPステータスコード名に文字列が含まれているかどうかを確認します。
pm.test("Status code name has string", function() {
pm.response.to.have.status("Created");
});
POST Requestのステータスコードが正しいかどうかを確認します。
pm.test("Successful POST request", function() {
pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});
アサーションライブラリの使用方法
Apidogでは、ChaiJSがアサーションライブラリとして内蔵されています。 以下は、一般的に使用されるアサーションテストScriptの例です。より多くの例については、ChaiJS expect BDD libraryドキュメントを参照してください。
ターゲットの文字列に別の文字列を含まれるかをアサートします。
pm.test("Assert that the target string contains another string", function() {
pm.expect("foobar").to.have.string("bar");
});
左側の値と右側の値が「型まで含めて」(===)同じかをアサートします。
const TEN = 10;
pm.test("Check whether number is equal to 10", function() {
pm.expect(TEN).to.equal(10);
});
deepフラグが設定されている場合、アサーションのターゲットは当該値になります。
pm.test("The assert target is the value", function() {
pm.expect(data1).to.deep.equal(data2);
});
deepフラグを設定してequalとpropertyを使用してアサーションをする場合、そのフラグは、後続のアサーションがオブジェクト対象の比較ではなく、キーと値のペアの再起的な比較にします。
深さが特定値に等しいことをアサートします、deep.equal(value)の略語に相当
pm.test("Check response value", function() {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
現在の環境をアサートします。
pm.test("Check whether environment is production", function() {
pm.expect(pm.environment.get("env")).to.equal("production");
});
データ構造(Schema)をアサートします。
pm.test("Check whether target is string", function() {
pm.expect("Postman").to.be.a("string");
});
pm.test("Check whether target is an object", function() {
pm.expect({ a: 1 }).to.be.an("object");
});
pm.test("Check whether target is undefined", function() {
pm.expect(undefined).to.be.an("undefined");
});
ご注意:
- 他のアサーションをする前に、 .aメソッドを使用してテンプレートのデータ型を確認します。
- データ型は大文字と小文字が区別されます。
配列(array)が空かどうかを確認します。
pm.test("Check whether array is empty", function() {
pm.expect([]).to.be.empty;
});
pm.test("Check whether string is empty", function() {
pm.expect("").to.be.empty;
});
.aメソッドの使用後、配列(array)が空かどうかを確認します。
pm.test("Check whether array is empty", function() {
pm.expect([]).to.be.an("array").that.is.empty;
});
ターゲットオブジェクトのキー値をアサートします。
pm.test("Check whether object contains all provided keys", function() {
pm.expect({ a: 1, b: 2 }).to.have.all.keys("a", "b");
});
pm.test("Checking if object contains any ONE of the keys", function() {
pm.expect({ a: 1, b: 2 }).to.have.any.keys("a", "b");
});
pm.test(
"Check whether object contains any NONE of the provided keys",
function() {
pm.expect({ a: 1, b: 2 }).to.not.have.any.keys("c", "d");
}
);
ターゲットオブジェクトに指定の属性が含まれているかどうかをアサートします。
pm.test("Check whether object contains the property", function() {
pm.expect({ a: 1 }).to.have.property("a");
});
ご注意:
- ターゲットオブジェクトがobject、set、array、mapのいずれかである必要があります。
- .keysの前に、.allか.anyがない場合、デフォルトとして.allにします。
- 一部のデータ型のターゲットオブジェクトがのみ.Keysメソッドを使用できるため、まず.aメソッドでデータ型をアサートすることをお勧めします。
pm.test("Check whether object contains all the keys", function() {
pm.expect({ a: 1, b: 2 })
.to.be.an("object")
.that.has.all.keys("a", "b");
});
ターゲットオブジェクトの 長さ(length)をアサートします。
pm.test("Check the length of the target", function() {
pm.expect("foo").to.have.lengthOf(3);
});
pm.test("Check the size of the target", function() {
pm.expect([1, 2, 3]).to.have.lengthOf(2);
});
ターゲットオブジェクトのメンバー(members)をアサートします。
pm.test(
"Check whether the target has same members as the array set",
function() {
pm.expect([1, 2, 3]).to.have.members([2, 1, 3]);
}
);
ご注意:
- デフォルトとして、 .membersは厳格比較を使用します。
- メンバーの順序は結果には影響しません。
ターゲットオブジェクトに指定のアイテムが含まれているかどうかをアサートします。
pm.test(
"Check whether the target array includes the number provided",
function() {
pm.expect([1, 2, 3]).to.include(2);
}
);
pm.test(
"Check whether the target object includes the properties provided",
function() {
pm.expect({ a: 1, b: 2, c: 3 }).to.include({ a: 1, b: 2 });
}
);
.Includeを使用する前に、データ型を判断するために.aメソッドを使用することをお勧めします。
例:
pm.test(
"Check whether the target is an array that includes the number specified",
function() {
pm.expect([1, 2, 3])
.to.be.an("array")
.that.includes(2);
}
);