API testi yazan hər kəs bunu bilir: adi value assertion-lar müəyyən bir sahənin dəyərini yoxlayır, amma struktur sürüşməsi (structural drift) adlanan problemi çox vaxt tuta bilmir. Məsələn, backend tərəfində id sahəsi birdən integerdən stringə çevriləndə, pm.expect(user.id).to.eql(42) kimi assertion-lar yalnız həmin endpoint'də işləyir, digərləri isə “42” kimi string dəyər alır. Nəticədə müştəri tətbiqlərində user.id + 1 kimi əməliyyatlar “421” çıxarır — bu, real istehsal problemidir.
JSON Schema ilə Contract Testing
Postman'in daxilində gələn ajv JSON-schema validator bu problemi sistemli şəkildə həll edir. Bir dəfə schema təyin edib, bütün endpoint-lərdə onu yoxlamaqla struktur dəyişikliklərini avtomatik tutmaq mümkündür. Məsələn, istifadəçi obyekti üçün belə bir schema yazmaq olar:
const userSchema = {type: "object",
required: ["id", "name", "email"],
properties: {
id: { type: "integer" },
name: { type: "string" },
email: { type: "string", pattern: "@" }
}
};
pm.test("Response matches the user schema", () => {
pm.expect(pm.response.json()).to.be.jsonSchema(userSchema);
});
Bu test id stringə çevriləndə, email yox olanda və ya name obyektə çevriləndə dərhal xəta verir. Eyni schema-nı array-lər üçün də istifadə etmək olar:
const userListSchema = {type: "array",
minItems: 1,
items: userSchema
};
pm.test("List matches schema", () => {
pm.expect(pm.response.json()).to.be.jsonSchema(userListSchema);
});
Bir Dəfə Yaz, Hər Yerdə İstifadə Et
Ən güclü üsul isə schema-nı collection variable kimi saxlamaqdır. Beləliklə, birdən çox endpoint (məsələn, /users, /users/:id, /login) eyni contract'a qarşı yoxlanılır. Schema dəyişəndə isə tək yerdə redaktə etmək kifayətdir.
Qeyd edək ki, required sahələri düzgün təyin etmək çox vacibdir. JSON Schema required-da olmayan sahələri görməzlikdən gəlir — yəni {} belə boş obyekt keçə bilər. Həmçinin, tip yoxlamalarında integer ilə number arasındakı fərqə diqqət etmək lazımdır. Və unutmayın: type: ["integer", "string"] yazmaq — bu, həyəcan siqnalını söndürmək deməkdir.
Bu üsul — contract testing — API testlərinin ən yüksək qoruma-nəticə nisbətini verən qatıdır. Cəmi 10 sətir kodla bir kateqoriya problemlərin qarşısını almaq mümkündür. Ətraflı məlumat üçün müəllifin açıq mənbəli kitabına baxa bilərsiniz.


