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
tags
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!