slogan3

Ontwikkel Geavanceerde API Test Data Validatie en Rapportage in Postman of Insomnia

description

Met deze prompt kun je geavanceerde validatieregels opzetten die de nauwkeurigheid en consistentie van je API-testdata waarborgen. Het helpt je afwijkingen vroegtijdig te signaleren en gedetailleerde rapporten te genereren, wat leidt tot betrouwbaardere tests en efficiëntere foutopsporing. Dit is effectiever dan standaard validaties omdat het diepgaande data-integriteitscontroles en automatische rapportage combineert.

prompt

Help me geavanceerde testdata validatiescripts te maken voor mijn API in <kies Postman of Insomnia>. Ik wil dat deze scripts automatisch data-integriteit controleren, afwijkingen rapporteren en statistiek ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een uitgebreide aanpak voor geavanceerde testdata validatiescripts in Postman voor je API endpoint https://api.mijnbedrijf.nl/users. Deze scripts helpen bij het controleren van data-integriteit, afwijkingen rapporteren en statistieken genereren. 1. Validatieregels definiëren --- Voor jouw API kunnen de volgende regels nuttig zijn: - Status code moet 200 zijn - Response moet een array van gebruikers bevatten - Elke gebruiker moet de velden "id", "naam", "email" bevatten - "id" moet een numerieke waarde zijn - "email" moet een geldig emailadresformaat hebben - Geen dubbele "id"s in de response - Response tijd mag niet langer zijn dan een drempelwaarde (bijvoorbeeld 500ms) 2. Validatie en foutdetectie scripts --- Gebruik in de "Tests" tab van je Postman collectie of request: ```javascript // Initializeer statistieken object if (!pm.collectionVariables.has("testStats")) { pm.collectionVariables.set("testStats", JSON.stringify({ totaal: 0, success: 0, fouten: 0 })); } let stats = JSON.parse(pm.collectionVariables.get("testStats")); stats.totaal += 1; // 1. Status code check pm.test("Status code is 200", function () { pm.response.to.have.status(200); if (pm.response.code !== 200) { logFout("Verkeerde status code: " + pm.response.code); } }); // 2. Response body is een array pm.test("Response is een array van gebruikers", function () { const jsonData = pm.response.json(); pm.expect(Array.isArray(jsonData)).to.be.true; if (!Array.isArray(jsonData)) { logFout("Response is geen array"); return; } // 3. Velden en datatypes controleren jsonData.forEach((user, index) => { // id bestaat en is numeriek pm.test(`Gebruiker ${index} heeft een numerieke id`, () => { pm.expect(user).to.have.property("id"); pm.expect(user.id).to.be.a("number"); }); // naam bestaat pm.test(`Gebruiker ${index} heeft een naam`, () => { pm.expect(user).to.have.property("naam"); pm.expect(user.naam).to.be.a("string"); }); // email bestaat en is geldig pm.test(`Gebruiker ${index} heeft een geldig email`, () => { pm.expect(user).to.have.property("email"); pm.expect(user.email).to.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/); }); }); // 4. Dubbele IDs detectie const ids = jsonData.map(user => user.id); const dubbeleIds = ids.filter((id, idx) => ids.indexOf(id) !== idx); if (dubbeleIds.length > 0) { logFout(`Dubbele IDs gevonden: ${dubbeleIds.join(", ")}`); } }); // 5. Response tijd check const responseTimeThreshold = 500; // ms pm.test("Response tijd is binnen limiet", () => { pm.expect(pm.response.responseTime).to.be.below(responseTimeThreshold); }); if (pm.response.responseTime > responseTimeThreshold) { logFout(`Response tijd (${pm.response.responseTime} ms) overschrijdt limiet`); } // 6. Fout logging functie function logFout(bericht) { if (!pm.collectionVariables.has("foutenLijst")) { pm.collectionVariables.set("foutenLijst", JSON.stringify([])); } let fouten = JSON.parse(pm.collectionVariables.get("foutenLijst")); fouten.push(bericht); pm.collectionVariables.set("foutenLijst", JSON.stringify(fouten)); // Optioneel: console log console.log("Fout: " + bericht); } // 7. Statistieken bijwerken stats.success += pm.response.code === 200 && Array.isArray(pm.response.json()) ? 1 : 0; pm.collectionVariables.set("testStats", JSON.stringify(stats)); ``` 3. Rapportage automatiseren --- Gebruik de verzamelde gegevens in variabelen: - **Foutenlijst**: opgeslagen in `foutenLijst` (JSON array) - **Teststatistieken**: in `testStats` als JSON object met velden zoals `totaal`, `success`, `fouten` Je kunt een Postman monitor of een externe script (bijv. via Newman) gebruiken om: - De foutenlijst te exporteren en rapport te genereren - Statistieken te visualiseren met bijvoorbeeld een dashboard of CSV export Voor bijvoorbeeld Newman script: ```bash newman run jouw-collection.json -r json,html --reporters-json-export rapport.json ``` Na de run kun je `rapport.json` en het HTML-rapport analyseren voor verdere inzicht. 4. Samenvatting --- - Gebruik uitgebreide `pm.test()` en `pm.expect()` validaties - Detecteer afwijkingen en log deze in variabelen - Automatiseer rapportage via Newman of Postman monitors - Voeg statistieken toe voor continue verbetering Wil je dat ik een meer gestructureerd voorbeeld met rapportages in bijvoorbeeld CSV of HTML?
provider: deepseek
model: deepseek-chat
Zeker! Hier een uitgebreide handleiding voor geavanceerde testdata validatiescripts in Postman voor jouw API endpoint. ## 1. Basis Test Script Setup Voeg dit toe in de **Tests** tab van je Postman request: ```javascript // Test statistieken verzameling pm.test("API Response Validatie", function () { const response = pm.response.json(); let testStats = pm.collectionVariables.get("testStats") || { totalTests: 0, passedTests: 0, failedTests: 0, validationErrors: [], responseTimes: [] }; // Response tijd tracking testStats.responseTimes.push(pm.response.responseTime); // Data integriteit checks performDataValidation(response, testStats); // Update collectie variabelen pm.collectionVariables.set("testStats", testStats); }); ``` ## 2. Geavanceerde Validatie Regels ```javascript function performDataValidation(data, stats) { const users = data.users || data; // Ondersteunt beide formats // 1. Data structuur validatie pm.test("Response heeft correcte structuur", function () { pm.expect(users).to.be.an('array'); pm.expect(data).to.have.property('totalCount').that.is.a('number'); }); // 2. Verplichte velden check const requiredFields = ['id', 'name', 'email', 'createdAt', 'status']; users.forEach((user, index) => { requiredFields.forEach(field => { pm.test(`User ${index} heeft verplicht veld: ${field}`, function () { pm.expect(user).to.have.property(field); }); }); }); // 3. Data type validatie users.forEach((user, index) => { // Email format validatie pm.test(`User ${index} heeft geldig email format`, function () { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; pm.expect(user.email).to.match(emailRegex); }); // Datum validatie pm.test(`User ${index} heeft geldige createdAt datum`, function () { pm.expect(new Date(user.createdAt)).to.be.a('date'); pm.expect(new Date(user.createdAt).toString()).to.not.equal('Invalid Date'); }); // Status enum validatie pm.test(`User ${index} heeft geldige status`, function () { const validStatuses = ['active', 'inactive', 'pending', 'suspended']; pm.expect(validStatuses).to.include(user.status); }); }); // 4. Data consistentie checks pm.test("Unieke ID's in response", function () { const ids = users.map(user => user.id); const uniqueIds = [...new Set(ids)]; pm.expect(ids.length).to.equal(uniqueIds.length); }); // 5. Business logic validatie pm.test("Actieve users hebben verified email", function () { const activeUsers = users.filter(user => user.status === 'active'); activeUsers.forEach(user => { if (user.status === 'active') { pm.expect(user).to.have.property('emailVerified').that.equals(true); } }); }); } ``` ## 3. Afwijkingsdetectie & Anomalie Detection ```javascript function detectAnomalies(data, stats) { const users = data.users || data; // 1. Onverwachte data patterns const suspiciousPatterns = []; // Email domain analyse const emailDomains = users.map(user => user.email.split('@')[1]); const domainCounts = emailDomains.reduce((acc, domain) => { acc[domain] = (acc[domain] || 0) + 1; return acc; }, {}); // Detecteer verdachte domain concentraties Object.entries(domainCounts).forEach(([domain, count]) => { if (count > users.length * 0.3) { // Meer dan 30% van één domain suspiciousPatterns.push(`Hoge concentratie van email domain: ${domain} (${count} users)`); } }); // 2. Datum anomalieën const currentDate = new Date(); users.forEach(user => { const createdDate = new Date(user.createdAt); if (createdDate > currentDate) { suspiciousPatterns.push(`User ${user.id} heeft toekomstige created datum`); } // Te oude accounts voor actieve status const accountAge = (currentDate - createdDate) / (1000 * 60 * 60 * 24); if (user.status === 'active' && accountAge > 365) { suspiciousPatterns.push(`User ${user.id} is actief maar account ouder dan 1 jaar`); } }); // 3. Data kwaliteit metrics const emptyFields = users.reduce((count, user) => { return count + Object.values(user).filter(val => val === null || val === undefined || val === '' ).length; }, 0); const dataQualityScore = 100 - (emptyFields / (users.length * Object.keys(users[0] || {}).length) * 100); // Rapporteer anomalieën if (suspiciousPatterns.length > 0) { stats.validationErrors.push({ type: 'ANOMALY_DETECTED', patterns: suspiciousPatterns, dataQualityScore: dataQualityScore.toFixed(2), timestamp: new Date().toISOString() }); console.warn('Gedetecteerde anomalieën:', suspiciousPatterns); } return suspiciousPatterns; } ``` ## 4. Automatische Rapportage Systeem ```javascript // Collection-level scripts (voeg toe in Collection > Tests) function generateTestReport() { const testStats = pm.collectionVariables.get("testStats"); if (!testStats) return; const report = { generatedAt: new Date().toISOString(), endpoint: pm.request.url.toString(), summary: { totalRequests: testStats.totalTests || 0, successRate: ((testStats.passedTests / testStats.totalTests) * 100).toFixed(2) + '%', averageResponseTime: (testStats.responseTimes.reduce((a, b) => a + b, 0) / testStats.responseTimes.length).toFixed(2) + 'ms', dataQualityScore: testStats.dataQualityScore || 'N/A' }, performance: { minResponseTime: Math.min(...testStats.responseTimes) + 'ms', maxResponseTime: Math.max(...testStats.responseTimes) + 'ms', p95ResponseTime: calculatePercentile(testStats.responseTimes, 95) + 'ms' }, issues: { totalErrors: testStats.validationErrors.length, errorsByType: groupErrorsByType(testStats.validationErrors), recentErrors: testStats.validationErrors.slice(-5) // Laatste 5 errors } }; // Opslaan als environment variable voor export pm.environment.set("testReport", JSON.stringify(report, null, 2)); // Console output voor directe review console.log('=== TEST RAPPORT ==='); console.log('Endpoint:', report.endpoint); console.log('Success Rate:', report.summary.successRate); console.log('Gemiddelde Response Time:', report.summary.averageResponseTime); console.log('Totaal Errors:', report.issues.totalErrors); console.log('===================='); } // Helper functies voor rapportage function calculatePercentile(values, percentile) { const sorted = values.sort((a, b) => a - b); const index = (percentile / 100) * (sorted.length - 1); return sorted[Math.floor(index)]; } function groupErrorsByType(errors) { return errors.reduce((acc, error) => { acc[error.type] = (acc[error.type] || 0) + 1; return acc; }, {}); } ``` ## 5. Geautomatiseerde Test Uitvoering ```javascript // Voor test collections - voeg toe in Collection > Pre-request Script if (!pm.collectionVariables.get("testStats")) { pm.collectionVariables.set("testStats", { totalTests: 0, passedTests: 0, failedTests: 0, validationErrors: [], responseTimes: [], startTime: new Date().toISOString() }); } // In elke request - update statistieken pm.test("Update test statistieken", function () { const testStats = pm.collectionVariables.get("testStats"); testStats.totalTests++; if (pm.response.code === 200) { testStats.passedTests++; } else { testStats.failedTests++; } pm.collectionVariables.set("testStats", testStats); }); ``` ## 6. Export en Monitoring ```javascript // Script om rapport te exporteren function exportTestReport() { const testStats = pm.collectionVariables.get("testStats"); const report = { timestamp: new Date().toISOString(), collection: pm.info.collectionName, environment: pm.environment.name, results: testStats }; // Maak downloadbaar bestand const blob = new Blob([JSON.stringify(report, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); console.log('Rapport gereed voor export:', url); // Gebruik Postman's pm.export() of sla op in environment } ``` ## Gebruik in Postman: 1. **Plak de scripts** in de betreffende tabs 2. **Stel collection variables** in voor testStats 3. **Run je collection** met de Newman CLI voor automatisering 4. **Review console logs** voor real-time feedback 5. **Exporteer rapporten** voor historische tracking Deze scripts geven je complete controle over data kwaliteit, automatische anomalie detectie en gedetailleerde prestatie rapportage!