اعتبار سنجی پاسخ ها و بررسی خروجی JSON که اغلب شامل attribute های زیادی هست به مرور خسته کننده میشه. postman شامل کتابخانه های مفیدی هست که به شما برای test کمک میکنه. به ویژه lodash و tv4 JSON schema validator. میتونید لیست کامل این کتابخانه ها رو اینجا ببینید. بیایید دوباره عملیات test صفحه ی login رو که در پست های قبلی انجام دادیمُ ادامه بدیم.
از اونجایی که login ما فقط یک token برمیگردونه میتونیم ست بودن مقدار token رو بررسی کنیم.
let jsonData = JSON.parse(responseBody);
let ok = responseCode.code === 200;
tests["Successful request"] = ok;
tests["Token is set"] = _.has(jsonData, "token");
if(ok) {
pm.environment.set("token", jsonData.token);
}
حالا اگر فرض کنیم به جای token در پاسخمون یک resource دریافت میکنیم کد ما به چنین کابوسی تبدیل میشه:
var data = JSON.parse(responseBody);
tests["Response OK"] = responseCode.code === 200;
tests["Data is OK"] = data.hasOwnProperty("data") && Object.isObject(data.data);
var requiredKeys = ["uuid", "student_number", "title", "first_name", "last_name", "email", "last_login_at"];
tests["Response structure is OK"] = _.every(requiredKeys, _.partial(_.has, data.data));
در این تست فیلد های اجباریُ مشخص و وجودشون رو بررسی کردیم. حالا تصور کنید اگر قرار باشه این کارُ مدام تکرار کنیم...
در این مورد بهترین اعتبار سنجی با استفاده از tv4 هست.
let courseSchema = {
"title": "Course",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"code": {
"type": "string"
},
"uuid": {
"type": "string"
},
"is_active": {
"type": "boolean"
},
"is_free": {
"type": "boolean"
},
"is_enrollable": {
"type": "boolean"
},
"in_catalogue": {
"type": "boolean"
},
"price": {
"type": "integer",
"minimum": 0
},
"total_duration": {
"type": "integer",
"minimum": 0
},
"cover_image": {
"type": ["string", "null"]
},
"demo_video": {
"type": ["string", "null"]
}
}
}
let jsonData = JSON.parse(responseBody);
tv4.addSchema("course", courseSchema);
tests["Response is valid"] = tv4.validate(jsonData.data, {
"type": "array",
"items": {
"$ref": "course"
}
});
در قطعه کد بالا یک شِما(scheme) از resource ایجاد و با استفاده از اون پاسخ رو تجزیه و اعتبار سنجی کردیم.
تنها مشکل ما copy/paste کردن این شما داخل تک تک test هامونه. به عنوان یک راه حل میتونید این شما رو داخل متغییر های محیطی که قبلا در موردش توضیح دادم قرار بدین تا بتونید همه جا ازش استفاده کنید.
postman web api restful api