如何使用 Postman 验证响应正文中可能包含空值或字符串的节点?
How to verify if a node that might either contain a null or a string in the response body using Postman?
我需要验证 API 的响应正文中的特定节点是空值还是字符串。在邮递员测试中使用 ChaiJS 是如何完成的?
示例 API 响应正文:
[
{
"exercise_num": "1",
"expire_date": "2019-03-11T16:31:17.935Z",
"created_at": "2019-03-15T11:44:35.698Z"
},
{
"exercise_num": "2",
"expire_date": null,
"created_at": "2019-03-15T11:44:38.363Z"
}
]
我想验证上面示例 API 响应主体中的 expire_date 节点是否只包含 null 或字符串数据类型,它不会 return 任何其他数据类型如int等
我试过以下方法:
var jsonData = JSON.parse(responseBody);
pm.test('All expire_date contains either string or null', () => {
for (i = 0; i < jsonData.length; i++) {
if(jsonData[i].expire_date === null){
tests["expire_date is null"] = true;
}
else{
pm.expect(jsonData[i].expire_date).to.be.a('string');
}
}
});
测试通过。
我期待是否可以完成这样的事情:
pm.test('All expire_date contains string', () => {
for (i = 0; i < jsonData.length; i++) {
pm.expect(jsonData[i].expire_date).to.be.a('string' || null);
}
});
我相信 ||
运算符没有直接的方法,您可以检查数据类型。由于null
是javaScript中的一个object
类型,所以编写测试用例如下:
var jsonData = JSON.parse(responseBody);
pm.test('All expire_date contains string', () => {
for (i = 0; i < jsonData.length; i++) {
pm.expect(typeof jsonData[i].expire_date).to.be.oneOf(['string', 'object']);
}
});
这可能是一种简单的方法,可以用于简单的检查。但是,我建议您使用第二种方式,即使用最快的 JSON Schema Validator。
var Ajv = require('ajv'),
ajv = new Ajv({logger: console}),
schema = {
"properties": {
"expireDate": {
"type": ["string","null"]
}
}
};
var jsonData = JSON.parse(responseBody);
pm.test('All expire_date contains string', function() {
for (i = 0; i < jsonData.length; i++) {
pm.expect(ajv.validate(schema, {expireDate: jsonData[i].expire_date})).to.be.true;
}
});
如果您希望在多个请求中检查此项,请将架构置于集合级别。
我需要验证 API 的响应正文中的特定节点是空值还是字符串。在邮递员测试中使用 ChaiJS 是如何完成的?
示例 API 响应正文:
[
{
"exercise_num": "1",
"expire_date": "2019-03-11T16:31:17.935Z",
"created_at": "2019-03-15T11:44:35.698Z"
},
{
"exercise_num": "2",
"expire_date": null,
"created_at": "2019-03-15T11:44:38.363Z"
}
]
我想验证上面示例 API 响应主体中的 expire_date 节点是否只包含 null 或字符串数据类型,它不会 return 任何其他数据类型如int等
我试过以下方法:
var jsonData = JSON.parse(responseBody);
pm.test('All expire_date contains either string or null', () => {
for (i = 0; i < jsonData.length; i++) {
if(jsonData[i].expire_date === null){
tests["expire_date is null"] = true;
}
else{
pm.expect(jsonData[i].expire_date).to.be.a('string');
}
}
});
测试通过。
我期待是否可以完成这样的事情:
pm.test('All expire_date contains string', () => {
for (i = 0; i < jsonData.length; i++) {
pm.expect(jsonData[i].expire_date).to.be.a('string' || null);
}
});
我相信 ||
运算符没有直接的方法,您可以检查数据类型。由于null
是javaScript中的一个object
类型,所以编写测试用例如下:
var jsonData = JSON.parse(responseBody);
pm.test('All expire_date contains string', () => {
for (i = 0; i < jsonData.length; i++) {
pm.expect(typeof jsonData[i].expire_date).to.be.oneOf(['string', 'object']);
}
});
这可能是一种简单的方法,可以用于简单的检查。但是,我建议您使用第二种方式,即使用最快的 JSON Schema Validator。
var Ajv = require('ajv'),
ajv = new Ajv({logger: console}),
schema = {
"properties": {
"expireDate": {
"type": ["string","null"]
}
}
};
var jsonData = JSON.parse(responseBody);
pm.test('All expire_date contains string', function() {
for (i = 0; i < jsonData.length; i++) {
pm.expect(ajv.validate(schema, {expireDate: jsonData[i].expire_date})).to.be.true;
}
});
如果您希望在多个请求中检查此项,请将架构置于集合级别。