slogan3

Ontwerp API Testvalidatie met Geavanceerde Foutdetectie in Postman of Insomnia

description

Met deze prompt kun je diepgaandere en fijnmazigere foutdetectie instellen die verder gaat dan alleen statuscodes, waardoor je API betrouwbaarder en robuuster getest wordt. Dit helpt je om verborgen fouten en afwijkingen in responsdata vroegtijdig te herkennen en op te lossen, wat standaard testmethoden vaak missen.

prompt

Help me een testscenario te ontwerpen in <kies Postman of Insomnia> waarin ik geavanceerde foutdetectie kan toepassen op mijn API: <voer je API-eindpunt in>. Ik wil regels instellen die niet alleen standaard fouten z ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorbeeld van hoe je een geavanceerd testscenario in Postman kunt opzetten voor jouw API-endpoint: 1. **Basisconfiguratie in Postman:** - Maak een nieuwe request aan naar `https://api.mijnapplicatie.nl/v1/gebruikers`. - Stel de juiste methoden en headers in (bijv. Authorization, Content-Type). 2. **Automatiseren van foutdetectie met scripts:** *Pre-request Script:* (optioneel, bijvoorbeeld om variabelen in te stellen) ```javascript // Geen specifieke pre-request nodig voor deze tests ``` *Tests Script:* Plaats onder het tabblad "Tests" in Postman: ```javascript // Controleer HTTP status code pm.test("Status code is 2xx", function () { pm.response.to.have.status(200); }); // Controleer op standaard foutcodes (4xx, 5xx) pm.test("Geen client- of serverfouten", function () { pm.expect(pm.response.code).to.be.within(200, 299); }); // Specifieke inhoudelijke controle: bv. controle op een specifieke foutmelding in de response body pm.test("Response bevat geen foutmelding 'gebruikers niet gevonden'", function () { var jsonData = pm.response.json(); pm.expect(jsonData.message).to.not.include("gebruikers niet gevonden"); }); // Controleer headers op specifieke condities pm.test("Header X-RateLimit-Limit is aanwezig en correct", function () { pm.expect(pm.response.headers.has('X-RateLimit-Limit')).to.be.true; var limit = pm.response.headers.get('X-RateLimit-Limit'); pm.expect(parseInt(limit)).to.be.a('number'); pm.expect(parseInt(limit)).to.be.at.least(1); }); // Geavanceerde foutdetectie: specifieke responsinhoud pm.test("Detecteer specifieke foutconditie in respons", function () { var jsonData = pm.response.json(); if (jsonData.errorCode === 'USR_001') { pm.expect(jsonData.message).to.include('Ongeldig gebruikers-ID'); } }); ``` 3. **Automatiseren met variabelen en condities:** Je kunt ook dynamisch controleren op verschillende foutcodes en berichten door condities te gebruiken: ```javascript if (pm.response.code >= 400) { // Log fout console.log('Fout gedetecteerd met status:', pm.response.code); // Extra checks op inhoud var jsonData = pm.response.json(); if (jsonData.errorCode) { pm.test(`Error code is ${jsonData.errorCode}`, function () { pm.expect(jsonData.errorCode).to.match(/USR_\d+/); }); } } ``` 4. **Gebruik van Postman Visualisatie of Custom Scripts:** Voor nog complexere checks kun je ook visualisaties maken of externe scripts gebruiken, maar bovenstaande voorbeelden geven je al een goede basis voor geavanceerde foutdetectie. --- **Kort samengevat:** - Controleer niet alleen op status codes, maar ook op inhoud en headers. - Gebruik conditionele scripts om specifieke foutcondities te detecteren. - Automatiseer deze checks in het "Tests" tabblad van Postman. Wil je dat ik een compleet voorbeeld voor een specifieke foutconditie of een andere scenario opstel?
provider: deepseek
model: deepseek-chat
Hier is een uitgebreid testscenario voor Postman met geavanceerde foutdetectie voor jouw API: ## 1. Collection-Level Scripts (Pre-request Script) ```javascript // Globale variabelen voor foutdetectie pm.collectionVariables.set("max_response_time", 5000); pm.collectionVariables.set("expected_content_type", "application/json"); ``` ## 2. Test Script voor Geavanceerde Validatie ```javascript // Basis HTTP status validatie pm.test("Status code is 200-299 of verwachte foutcode", function () { const status = pm.response.code; pm.expect(status).to.be.oneOf([200, 201, 400, 401, 403, 404, 422, 500]); }); // Response tijd validatie pm.test("Response tijd is acceptabel", function () { pm.expect(pm.response.responseTime).to.be.below(parseInt(pm.collectionVariables.get("max_response_time"))); }); // Content-Type validatie pm.test("Correct Content-Type", function () { pm.expect(pm.response.headers.get("Content-Type")).to.include(pm.collectionVariables.get("expected_content_type")); }); // Geavanceerde foutdetectie op responsinhoud pm.test("Geen onverwachte foutcodes in body", function () { const responseBody = pm.response.text(); // Detecteer veelvoorkomende serverfout patronen const errorPatterns = [ /stack trace/i, /exception:/i, /fatal error/i, /undefined/i, /null pointer/i ]; errorPatterns.forEach(pattern => { pm.expect(responseBody).to.not.match(pattern, `Gevonden serverfout patroon: ${pattern}`); }); }); // Specifieke foutcondities voor gebruikers-API if (pm.response.code >= 400) { const jsonData = pm.response.json(); // Validatie voor 400 Bad Request if (pm.response.code === 400) { pm.test("400 Response heeft juiste foutstructuur", function () { pm.expect(jsonData).to.have.property("error"); pm.expect(jsonData).to.have.property("message"); pm.expect(jsonData.message).to.be.a('string'); }); } // Validatie voor 401 Unauthorized if (pm.response.code === 401) { pm.test("401 Response bevat authenticatie info", function () { pm.expect(jsonData).to.have.property("error", "Unauthorized"); pm.expect(pm.response.headers.get("WWW-Authenticate")).to.exist; }); } // Validatie voor 422 Unprocessable Entity if (pm.response.code === 422) { pm.test("422 Response bevat validatiefouten", function () { pm.expect(jsonData).to.have.property("errors"); pm.expect(jsonData.errors).to.be.an('array'); jsonData.errors.forEach(error => { pm.expect(error).to.have.property("field"); pm.expect(error).to.have.property("message"); }); }); } } // Header validaties pm.test("Beveiligingsheaders aanwezig", function () { pm.expect(pm.response.headers.get("X-Content-Type-Options")).to.equal("nosniff"); pm.expect(pm.response.headers.get("X-Frame-Options")).to.exist; pm.expect(pm.response.headers.get("X-XSS-Protection")).to.exist; }); // Response body structuur validatie if (pm.response.code.toString().startsWith('2')) { const jsonData = pm.response.json(); pm.test("Success response heeft correcte structuur", function () { // Pas aan op basis van jouw API specificaties pm.expect(jsonData).to.be.an('object'); if (Array.isArray(jsonData)) { // Voor array responses (bijv. GET /gebruikers) jsonData.forEach(item => { pm.expect(item).to.have.property("id"); pm.expect(item).to.have.property("naam"); pm.expect(item).to.have.property("email"); }); } else { // Voor object responses (bijv. GET /gebruikers/{id}) pm.expect(jsonData).to.have.property("id"); pm.expect(jsonData).to.have.property("naam"); pm.expect(jsonData).to.have.property("email"); } }); } ``` ## 3. Environment Variabelen voor Foutdetectie ```javascript // In Postman Environment: { "expected_error_messages": [ "Ongeldig e-mailadres", "Wachtwoord te kort", "Gebruiker niet gevonden", "Toegang geweigerd" ], "valid_status_codes": [200, 201, 400, 401, 403, 404, 422], "max_response_size": 1000000 } ``` ## 4. Aangepaste Foutdetectie Scripts ```javascript // Custom foutdetectie voor specifieke business rules function detectBusinessLogicErrors(response) { const jsonData = response.json(); const errors = []; // Voorbeeld: controleer op inconsistente data if (jsonData.leeftijd && jsonData.leeftijd < 0) { errors.push("Negatieve leeftijd gedetecteerd"); } // Voorbeeld: email validatie if (jsonData.email && !jsonData.email.includes('@')) { errors.push("Ongeldig e-mail formaat"); } return errors; } // Gebruik de custom detector pm.test("Geen business logic fouten", function () { const businessErrors = detectBusinessLogicErrors(pm.response); pm.expect(businessErrors).to.have.lengthOf(0); }); // Performance monitoring pm.test("Response size binnen limieten", function () { const responseSize = pm.response.responseSize; const maxSize = parseInt(pm.environment.get("max_response_size")) || 1000000; pm.expect(responseSize).to.be.below(maxSize); }); ``` ## 5. Test Collection Structuur Maak verschillende requests aan: - **GET /gebruikers** - Test paginering en filtering - **GET /gebruikers/{id}** - Test resource niet gevonden (404) - **POST /gebruikers** - Test validatiefouten (400, 422) - **PUT /gebruikers/{id}** - Test authorisatiefouten (401, 403) - **DELETE /gebruikers/{id}** - Test verwijderen niet-bestaande resources ## 6. Uitgebreide Fout Scenario's ```javascript // Test voor rate limiting pm.test("Rate limiting headers aanwezig indien van toepassing", function () { const rateLimitHeader = pm.response.headers.get("X-RateLimit-Limit"); const rateLimitRemaining = pm.response.headers.get("X-RateLimit-Remaining"); if (rateLimitHeader) { pm.expect(parseInt(rateLimitRemaining)).to.be.at.least(0); pm.expect(parseInt(rateLimitHeader)).to.be.at.least(1); } }); // Data consistentie checks pm.test("Datum velden zijn geldig", function () { const jsonData = pm.response.json(); if (jsonData.aangemaakt_op) { const createdDate = new Date(jsonData.aangemaakt_op); pm.expect(createdDate.toString()).to.not.equal("Invalid Date"); pm.expect(createdDate).to.be.below(new Date()); } }); ``` Dit scenario geeft je een robuuste foutdetectie die verder gaat dan standaard HTTP status codes en diepgaand de respons inhoud en headers analyseert voor specifieke foutcondities.