Testplan
Doel
Het doel van dit testplan is om vast te stellen dat de gerealiseerde OOAPI-functionaliteiten correct werken en voldoen aan de gestelde eisen. Hierbij wordt gecontroleerd of:
- de endpoints correct bereikbaar zijn;
- responses voldoen aan het OOAPI-formaat;
- JWT-authenticatie correct werkt;
- foutafhandeling juist wordt uitgevoerd;
- filtering, paging en validatie correct functioneren.
Scope
In scope
De volgende gerealiseerde functionaliteiten vallen binnen scope:
- /organisations
- /organisations/{id}
- /courses
- /courses/{id}
- /programmes
- /programmes/{id}
- JWT-authenticatie
- APIM-routing
- foutafhandeling
- paging en queryvalidatie
- Out of scope
De volgende onderdelen vallen buiten scope omdat deze nog niet gerealiseerd of besproken zijn:
- offering-objecten
- associations
- POST/PUT/DELETE operaties
- performance/load testing
- UI-functionaliteit
Basisscript voor status en JSON
pm.test("Status code is success", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 201]);
});
pm.test("Response is JSON", function () {
pm.expect(pm.response.headers.get("Content-Type")).to.include("application/json");
});
pm.test("Response body is not empty", function () {
pm.expect(pm.response.text()).to.not.be.empty;
});
Id-validatie voor detail-endpoints
const jsonData = pm.response.json();
pm.test("Returned object has id", function () {
pm.expect(jsonData).to.have.property("id");
});
pm.test("Returned id matches requested id", function () {
const requestedId = pm.variables.get("courseId") || pm.variables.get("programmeId");
if (requestedId) {
pm.expect(jsonData.id).to.eql(requestedId);
}
});
Collection-validatie
const jsonData = pm.response.json();
pm.test("Collection response is an object or array", function () {
pm.expect(jsonData).to.exist;
});
pm.test("Collection contains items", function () {
const items = jsonData.items || jsonData.results || jsonData._embedded || jsonData;
pm.expect(items).to.exist;
});
Paging-validatie
const jsonData = pm.response.json();
const items = jsonData.items || jsonData.results || [];
pm.test("Page contains expected number of items", function () {
pm.expect(items.length).to.eql(1);
});
Sparse fields-validatie
const jsonData = pm.response.json();
const item = (jsonData.items && jsonData.items[0]) ? jsonData.items[0] : jsonData;
pm.test("Only expected fields are present", function () {
const allowed = ["id", "name"];
Object.keys(item).forEach(key => {
pm.expect(allowed).to.include(key);
});
});
404 / 400 foutvalidatie
pm.test("Status is client error", function () {
pm.expect(pm.response.code).to.be.oneOf([400, 404]);
});
pm.test("Error body is present", function () {
pm.expect(pm.response.text()).to.not.be.empty;
});
Pre-request script voor Bearer token
pm.request.headers.upsert({
key: "Authorization",
value: "Bearer " + pm.environment.get("authToken")
});
Handige Postman checks voor regressie
Opslaan van id uit list-response
Bijvoorbeeld na GET /courses:
const jsonData = pm.response.json();
const items = jsonData.items || jsonData.results || jsonData;
if (items && items.length > 0) {
pm.environment.set("courseId", items[0].id);
}