احسان رضایی

یک توسعه دهنده، شاید هم نه.

کتاب الگوهای طراحی به بیان ساده(design patterns/دیزاین پترن)

در مهندسی نرم افزار، design patterns(الگوهای طراحی) راه حل‌های قابل استفاده برای مشکلاتی هستند که معمولاً در طراحی نرم‌افزار اتفاق می افتند.

طرح های از پیش ساخته شده‌ای که می‌توانید برای حل مشکلات آن‌ها را سفارشی کنید. شما نمی‌توانید یک الگو را با جستجو در stackoverflow پیدا و در برنامه خود کپی کنید. الگو ها یک قطعه کد خاص نیستند، مفاهیم کلی برای حل مشکلات خاص هستند. شما باید با درک این مفاهیم آن‌ها را در برنامه خود پیاده‌سازی کنید.



کتابخانه های کمکی postman

در postman , / تاریخ ارسال 1397/01/26 - 17:40 / 0 نظر / 568 بازدید / آخرین ویرایش 1399/04/02 - 17:05

اعتبار سنجی پاسخ ها و بررسی خروجی 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 ایجاد و با استفاده از اون پاسخ رو  تجزیه و اعتبار سنجی کردیم.

validate-json-schema

تنها مشکل ما copy/paste کردن این شما داخل تک تک test هامونه. به عنوان یک راه حل میتونید این شما رو داخل متغییر های محیطی که قبلا در موردش توضیح دادم قرار بدین تا بتونید همه جا ازش استفاده کنید.

store-schema-env

use-env-schema

منبع با کمی تغییر.

پیشنهاد

ارسال نظر