Ontwikkel geavanceerde Postman API-validatie scripts
description
Met deze prompt kan ik geavanceerde en gedetailleerde validatiescripts ontwikkelen die verder gaan dan standaard checks. Dit helpt om mijn API testen nauwkeuriger te maken, fouten beter te detecteren en robuuste foutafhandeling te implementeren. Het bespaart tijd doordat ik direct bruikbare scripts krijg die ik in Postman kan integreren, wat mijn testefficiëntie en betrouwbaarheid verhoogt.
prompt
Help me geavanceerde validatie scripts te ontwikkelen voor mijn API-testen in Postman. Mijn API details zijn: API Endpoint: <voer de URL van je API eindpunt in> HTTP Methode: <selecteer GET, POST, PUT, DELETE, etc.> Verwachte Response Headers: <beschrijf de headers die je verwacht te ontvangen> Validatieregels voor response body: <beschrijf de specifieke validatieregels of JSON-sc ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een volledig validatiescript dat je direct in Postman kunt gebruiken. Het controleert de response headers, body structuur, data types, datumnotatie, numerieke bereiken, en behandelt foutscenario's zoals status 400 met foutcodes en berichten. Het script maakt gebruik van JavaScript en Postman’s pm API.
```javascript
// Controleer of de response status 200 is (succes) of 400 (fout)
pm.test("Status code is 200 of 400", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 400]);
});
// Controleer de Content-Type header
pm.test("Content-Type is application/json", function () {
pm.expect(pm.response.headers.get('Content-Type')).toMatch(/application\/json/);
});
// Parseer de response body
let responseData;
try {
responseData = pm.response.json();
} catch (e) {
pm.test("Responsedata kan niet worden geparsed als JSON", function () {
throw new Error("Response body is geen geldig JSON");
});
}
// Afhandeling op basis van status code
if (pm.response.code === 200) {
// Validatie voor succesvolle response
pm.test("Response body heeft de juiste structuur en datatypes", function () {
pm.expect(responseData).to.have.property('id');
pm.expect(responseData).to.have.property('name');
// Controleer datatypes
pm.expect(responseData.id).to.be.a('number');
pm.expect(responseData.name).to.be.a('string');
// Optioneel: controleer dat id een geheel getal is
pm.expect(responseData.id % 1).to.equal(0);
});
// Extra validaties voor specifieke velden (bijvoorbeeld datums en numerieke waarden)
// Aangezien je voorbeeld geen datum of numerieke range bevat, voeg ik hier voorbeelden toe
// Voorbeeld: Stel dat er een veld 'birthdate' is in formaat YYYY-MM-DD
if (responseData.birthdate) {
pm.test("birthdate is in formaat YYYY-MM-DD", function () {
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
pm.expect(responseData.birthdate).to.match(dateRegex);
});
}
// Voorbeeld: Stel dat er een veld 'score' tussen 1 en 50 ligt
if (responseData.score !== undefined) {
pm.test("score is tussen 1 en 50", function () {
pm.expect(responseData.score).to.be.at.least(1);
pm.expect(responseData.score).to.be.at.most(50);
});
}
} else if (pm.response.code === 400) {
// Validatie voor foutstatus
pm.test("Foutrespons bevat foutcode en bericht", function () {
pm.expect(responseData).to.have.property('errorCode');
pm.expect(responseData).to.have.property('message');
// Optioneel: controleer dat errorCode een string of nummer is
pm.expect([typeof responseData.errorCode, typeof responseData.errorCode]).to.satisfy(function (type) {
return type === 'string' || type === 'number';
});
});
// Extra: Log foutbericht
console.log("Foutmelding:", responseData.message);
}
// Optioneel: Controleer dat response headers geen onverwachte waarden bevatten
pm.test("Geen onverwachte headers aanwezig", function () {
let headers = pm.response.headers;
// Voeg hier extra header-validaties toe indien nodig
});
```
**Opmerking:** Pas de veldnamen en validaties aan op basis van je daadwerkelijke API-respons. Als je meer velden hebt of afwijkende datatypes, voeg dan vergelijkbare tests toe. Dit script biedt een goede basis voor uitgebreide API-validaties in Postman.
provider: deepseek
model: deepseek-chat
Hier is een geavanceerd Postman testscript dat aan al je vereisten voldoet:
```javascript
// Postman Test Script voor User API
// Plaats dit in de "Tests" tab van je Postman request
// ===== CONFIGURATIE =====
const EXPECTED_BASE_URL = "https://api.example.com/v1/users";
const EXPECTED_CONTENT_TYPE = "application/json";
const DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/;
const MIN_COUNT = 1;
const MAX_COUNT = 50;
// ===== VALIDATIE FUNCTIES =====
// Valideer response status
function validateResponseStatus(response) {
const status = response.status;
if (status === 200) {
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
return true;
} else if (status === 400) {
pm.test("Status code is 400 voor foutafhandeling", function () {
pm.response.to.have.status(400);
});
validateErrorResponse(response);
return false;
} else {
pm.test(`Onverwachte status code: ${status}`, function () {
pm.expect.fail(`Onverwachte status code: ${status}. Verwacht 200 of 400.`);
});
return false;
}
}
// Valideer error response
function validateErrorResponse(response) {
const jsonData = response.json();
pm.test("Error response bevat foutcode", function () {
pm.expect(jsonData).to.have.property('error_code');
pm.expect(jsonData.error_code).to.be.a('string');
});
pm.test("Error response bevat foutbericht", function () {
pm.expect(jsonData).to.have.property('message');
pm.expect(jsonData.message).to.be.a('string');
pm.expect(jsonData.message.length).to.be.greaterThan(0);
});
}
// Valideer response headers
function validateHeaders(response) {
pm.test("Content-Type is application/json", function () {
pm.response.to.have.header("Content-Type");
pm.expect(pm.response.headers.get("Content-Type")).to.include(EXPECTED_CONTENT_TYPE);
});
}
// Valideer basis JSON schema
function validateJsonSchema(jsonData) {
pm.test("Response body heeft correct JSON schema", function () {
pm.expect(jsonData).to.be.an('object');
pm.expect(jsonData).to.have.all.keys('id', 'name');
// Valideer required properties
pm.expect(jsonData).to.have.property('id');
pm.expect(jsonData).to.have.property('name');
// Valideer data types
pm.expect(jsonData.id).to.be.a('number');
pm.expect(jsonData.name).to.be.a('string');
});
}
// Valideer specifieke data types
function validateSpecificDataTypes(jsonData) {
// Valideer datum formaat indien aanwezig
if (jsonData.hasOwnProperty('date')) {
pm.test("Datum heeft correct formaat (YYYY-MM-DD)", function () {
pm.expect(jsonData.date).to.be.a('string');
pm.expect(DATE_REGEX.test(jsonData.date)).to.be.true;
// Extra validatie: controleer of het een geldige datum is
const dateObj = new Date(jsonData.date);
pm.expect(dateObj.toString()).to.not.equal('Invalid Date');
});
}
// Valideer count indien aanwezig
if (jsonData.hasOwnProperty('count')) {
pm.test(`Count is tussen ${MIN_COUNT} en ${MAX_COUNT}`, function () {
pm.expect(jsonData.count).to.be.a('number');
pm.expect(jsonData.count).to.be.at.least(MIN_COUNT);
pm.expect(jsonData.count).to.be.at.most(MAX_COUNT);
});
}
}
// Valideer array response (indien van toepassing)
function validateArrayResponse(jsonData) {
if (Array.isArray(jsonData)) {
pm.test("Response is een array", function () {
pm.expect(jsonData).to.be.an('array');
pm.expect(jsonData.length).to.be.at.least(0);
});
// Valideer elk object in de array
jsonData.forEach((item, index) => {
pm.test(`Item ${index} heeft correcte structuur`, function () {
pm.expect(item).to.be.an('object');
pm.expect(item).to.have.all.keys('id', 'name');
pm.expect(item.id).to.be.a('number');
pm.expect(item.name).to.be.a('string');
});
});
}
}
// ===== DYNAMISCHE VARIABELEN VERWERKING =====
// Sla response data op in variabelen voor hergebruik
function setEnvironmentVariables(jsonData) {
if (jsonData.id) {
pm.environment.set("last_user_id", jsonData.id);
console.log(`User ID ${jsonData.id} opgeslagen in environment`);
}
if (jsonData.name) {
pm.environment.set("last_user_name", jsonData.name);
console.log(`User name "${jsonData.name}" opgeslagen in environment`);
}
}
// ===== HOOFD VALIDATIE LOGICA =====
try {
// Valideer response status
const isValidStatus = validateResponseStatus(pm.response);
if (isValidStatus) {
// Valideer headers
validateHeaders(pm.response);
// Parse en valideer JSON
let jsonData;
try {
jsonData = pm.response.json();
pm.test("Response body is geldige JSON", function () {
pm.expect(jsonData).to.be.an('object').or.an('array');
});
} catch (parseError) {
pm.test("Response body is geldige JSON", function () {
pm.expect.fail(`Ongeldige JSON: ${parseError.message}`);
});
return;
}
// Voer validaties uit op basis van response type
if (Array.isArray(jsonData)) {
validateArrayResponse(jsonData);
} else {
validateJsonSchema(jsonData);
validateSpecificDataTypes(jsonData);
}
// Sla data op in environment variabelen
setEnvironmentVariables(jsonData);
// Response tijd validatie
pm.test("Response tijd is acceptabel", function () {
pm.expect(pm.response.responseTime).to.be.below(3000);
});
console.log("✅ Alle validaties succesvol voltooid");
}
} catch (error) {
pm.test("Geen onverwachte fouten tijdens validatie", function () {
pm.expect.fail(`Validatie fout: ${error.message}`);
});
}
// ===== EXTRA PERFORMANCE & SECURITY CHECKS =====
// Security headers check
pm.test("Security headers zijn aanwezig", function () {
pm.response.to.have.header("X-Content-Type-Options");
pm.response.to.not.have.header("X-Powered-By");
});
// Response size check
pm.test("Response size is redelijk", function () {
const responseSize = pm.response.responseSize;
pm.expect(responseSize).to.be.below(100000); // Max 100KB
});
// ===== CUSTOM ASSERTION MESSAGES =====
// Maak testspecifieke berichten
console.log(`📊 Response Info:
- Status: ${pm.response.code} ${pm.response.status}
- Tijd: ${pm.response.responseTime}ms
- Size: ${pm.response.responseSize} bytes
- URL: ${pm.request.url}`);
if (pm.response.json()) {
console.log(`📄 Response Body Preview:`, JSON.stringify(pm.response.json()).substring(0, 200) + '...');
}
```
**Gebruiksaanwijzing:**
1. **Plaats in Postman:** Kopieer dit script naar de "Tests" tab van je Postman request
2. **Environment Variables:** Het script slaat automatisch `last_user_id` en `last_user_name` op in je environment
3. **Aanpassingen:** Pas de constants bovenaan aan voor je specifieke API
4. **Uitvoering:** Run de request en bekijk de "Test Results" tab
**Features:**
- ✅ Complete JSON schema validatie
- ✅ Dynamische datum/count validatie
- ✅ Error response handling (400 status)
- ✅ Environment variable management
- ✅ Performance & security checks
- ✅ Gedetailleerde logging
- ✅ Custom error messages
- ✅ Array response ondersteuning
Het script geeft duidelijke Nederlandse foutmeldingen en werkt zowel voor succesvolle responses als foutscenario's!