我有一个简单的api GET请求,响应主体如下所示。我正在使用Postman API自动化,我想验证响应,并使用Postman测试检查是否满足以下条件。
- 响应数组大小应始终为2
- 在每个数组项中,"build.time"值应该是日期时间
- 在每个数组项中,"build.eartifact"值应该等于"main_component">
- 第一个数组项的"build.name"值应等于"web应用程序">
- 第二个数组项的"build.name"值应等于"background">
[
{
"build.time": "2020-01-24 02:07:03 UTC",
"build.artifact": "main_component",
"build.name": "web app",
"build.version": "1.0.0"
},
{
"build.time": "2019-07-10 15:26:18 UTC",
"build.artifact": "main_component",
"build.name": "back-end",
"build.version": "1.0.1"
}
]
我很难绕过这种UTC格式,所以我只是将其转换为字符串。完成了任务,但不适合所有情况。
// Import moment.js for date validation
var moment = require('moment');
// Load response into object
const jsonData = pm.response.json();
// Test HTTP status code
pm.test("Check if HTTP status code is 200", () => {
pm.response.to.have.status(200);
});
// Check if response contains an array
pm.test("Check if response contains an array", () => {
pm.expect(jsonData).to.be.an("array");
});
// Response array size should always be 2
pm.test("Check if response array size is 2", () => {
pm.expect(Object.keys(pm.response.json()).length).to.eql(2);
});
// In each of the array item, the “build.time” value should be a date time.
pm.test("Check in each of the array item, the “build.time” value is of type datetime",
() => {
pm.expect(jsonData[0]).to.have.property("build.time");
pm.expect(jsonData[1]).to.have.property("build.time");
});
// In each of the array item, the “build.time” value should be a date time.
// Get full timestamp
var timestamp = jsonData[0]["build.time"];
// Get time
var time = timestamp.substring(0,19);
// Get timezone
var timezone = timestamp.toString().substring(20);
// Test the time format
pm.test("Check in each of the array item, the “build.time” value is of type datetime",
() => {
pm.expect(moment(new Date(time)).format("YYYY-MM-DD HH:mm:ss") == time);
});
pm.test("Timezone is valid", () => {
pm.expect(timezone).eql("UTC");
});
// In each of the array item, the “build.artifact” value should be equal to
“main_component”.
pm.test("Check in each of the array item, the “build.artifact” value equals
“main_component”", () => {
pm.expect(jsonData[0]["build.artifact"]).to.eql("main_component");
pm.expect(jsonData[1]["build.artifact"]).to.eql("main_component");
});
// “build.name” value of the 1st array item must equal to “web app”
pm.test("Check if “build.name” value of the 1st array item equals 'web app'", () => {
pm.expect(jsonData[0]["build.name"]).to.eql("web app");
});
// “build.name” value of the 2nd array item equals to “back-end”.
pm.test("Check if “build.name” value of the 2nd array item equals 'web app'", () => {
pm.expect(jsonData[1]["build.name"]).to.eql("back-end");
});