slogan3

Creëer Geavanceerde API Validatie Regels en Conditionele Testflows in Postman of Insomnia

description

Met deze prompt kan de gebruiker complexe validaties op API-responsen toepassen en dynamische testflows bouwen die automatisch reageren op verschillende scenario's. Dit verhoogt de testdekking en efficiëntie, en vermindert handmatige interventie bij het testen. Het is een geavanceerde aanpak die verder gaat dan standaard testcases en helpt bij het opsporen van subtiele fouten of afwijkingen.

prompt

Help me geavanceerde validatieregels en conditionele testflows op te zetten in <kies Postman of Insomnia> voor mijn API: <voer je API endpoint in>. Ik wil complexe validatiecriteria toepassen op res ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Zeker! Hier zijn enkele voorbeelden en suggesties om geavanceerde validatieregels en conditionele testflows in Postman op te zetten voor je API: 1. **Complexe validatie van responsdata** Gebruik `pm.expect()` met aangepaste logica om meerdere voorwaarden tegelijk te controleren. Bijvoorbeeld: ```javascript // Controleer dat de responsstatus 200 is pm.test("Status is 200", function () { pm.response.to.have.status(200); }); // Controleer dat het product een naam en prijs heeft, en dat de prijs positief is pm.test("Product heeft naam en positieve prijs", function () { const jsonData = pm.response.json(); pm.expect(jsonData.name).to.be.a('string').and.not.empty; pm.expect(jsonData.price).to.be.a('number').and.to.be.greaterThan(0); }); ``` Voor complexere validaties, bijvoorbeeld dat de categorie uit een lijst van toegestane categorieën komt: ```javascript const allowedCategories = ['kleding', 'elektronica', 'speelgoed']; const category = pm.response.json().category; pm.test("Categorie is toegestaan", function () { pm.expect(allowedCategories).to.include(category); }); ``` 2. **Conditionele testflows en vervolgacties** Gebruik `if`-structuren om op basis van responsgegevens beslissingen te nemen en tests te conditioneren: ```javascript const jsonData = pm.response.json(); if (jsonData.stock > 0) { // Stock is beschikbaar, ga door met de volgende test pm.environment.set("productInStock", true); } else { // Geen voorraad, markeer als niet beschikbaar pm.environment.set("productInStock", false); } ``` Later in je collectie kun je deze variabele gebruiken om teststappen te conditioneren: ```javascript if (pm.environment.get("productInStock")) { // Voer tests uit voor product met voorraad pm.test("Product is op voorraad", function () { pm.expect(pm.environment.get("productInStock")).to.be.true; }); } else { // Test voor out-of-stock scenario pm.test("Product niet op voorraad", function () { pm.expect(pm.environment.get("productInStock")).to.be.false; }); } ``` 3. **Automatiseren van vervolgacties** Gebruik `postman.setNextRequest()` om dynamisch te bepalen welk request er hierna wordt uitgevoerd, afhankelijk van de respons: ```javascript const jsonData = pm.response.json(); if (jsonData.category === 'elektronica') { postman.setNextRequest('Elektronica Verwerking'); } else if (jsonData.category === 'kleding') { postman.setNextRequest('Kleding Verwerking'); } else { postman.setNextRequest('Eindrapportage'); } ``` 4. **Gebruik van Pre-request Scripts voor dynamische data** Je kunt ook vooraf dynamische parameters genereren, bijvoorbeeld een unieke productnaam: ```javascript const timestamp = new Date().getTime(); pm.environment.set("uniqueProductName", `TestProduct_${timestamp}`); ``` Samengevat: combineer conditionele logica met variabelen en `setNextRequest()` om geavanceerde, adaptieve testflows te maken. Zo kun je complexe validatieregels en afhankelijkheden binnen je API-tests automatiseren. Heeft u specifieke validatiecriteria of testscenario’s waar u hulp bij nodig heeft?
provider: deepseek
model: deepseek-chat
Zeker! Hier zijn geavanceerde Postman-technieken voor je API-testing: ## 1. Geavanceerde Validatietests ### Complexe JSON Schema Validatie ```javascript // Tests tab pm.test("Complexe productvalidatie", function () { const response = pm.response.json(); // Geneste object validatie pm.expect(response).to.have.nested.property('data.products[0].attributes.price'); pm.expect(response.data.products[0].attributes.price).to.be.above(0); // Array validatie pm.expect(response.data.products).to.be.an('array').that.is.not.empty; pm.expect(response.data.products[0].categories).to.include('electronics'); // Datum validatie const createdAt = new Date(response.data.products[0].created_at); pm.expect(createdAt).to.be.before(new Date()); // Custom business logic pm.expect(response.data.products[0].stock).to.satisfy((stock) => { return stock >= 0 && stock <= 1000; }); }); ``` ### Dynamische Environment Variabelen ```javascript // Pre-request Script const timestamp = new Date().getTime(); pm.environment.set("unique_product_id", `test_${timestamp}`); pm.environment.set("current_timestamp", timestamp); // Tests tab - Dynamische validatie const minPrice = pm.environment.get("min_price_threshold") || 10; pm.expect(pm.response.json().data.products[0].price).to.be.above(minPrice); ``` ## 2. Conditionele Testflows ### Response-Based Route Bepaling ```javascript // Tests tab const response = pm.response.json(); if (response.data.products.length === 0) { // Geen producten gevonden - voeg lege state toe pm.environment.set("has_products", false); pm.test("Geen producten beschikbaar", function() { pm.expect(response.data.products).to.be.empty; }); // Spring naar alternatieve flow postman.setNextRequest("Create Test Product"); } else { // Producten gevonden - ga door met normale flow pm.environment.set("has_products", true); pm.environment.set("first_product_id", response.data.products[0].id); // Sla productdata op voor latere requests pm.environment.set("product_data", JSON.stringify(response.data.products[0])); postman.setNextRequest("Get Product Details"); } ``` ### Status Code Afhankelijke Flows ```javascript // Tests tab const statusCode = pm.response.code; switch(statusCode) { case 200: pm.test("Success response validatie", function() { const jsonData = pm.response.json(); pm.expect(jsonData.status).to.equal("success"); }); postman.setNextRequest("Update Product"); break; case 404: pm.test("Not found response", function() { pm.expect(pm.response.json().error).to.include("niet gevonden"); }); postman.setNextRequest("Create Product"); break; case 429: pm.test("Rate limit hit", function() { const retryAfter = pm.response.headers.get('Retry-After'); pm.environment.set("wait_time", retryAfter || 60); }); // Wacht en probeer opnieuw setTimeout(() => { postman.setNextRequest(pm.info.requestName); }, pm.environment.get("wait_time") * 1000); break; default: postman.setNextRequest(null); // Stop de collection } ``` ## 3. Geavanceerde Data Extractie en Hergebruik ### Dynamische Data Transformatie ```javascript // Pre-request Script voor volgende calls const productData = JSON.parse(pm.environment.get("product_data") || "{}"); if (Object.keys(productData).length > 0) { // Transformeer data voor update request const updatePayload = { product_id: productData.id, name: `${productData.name} - UPDATED`, price: Math.round(productData.price * 1.1), // 10% prijsverhoging stock: productData.stock - 1 // Simuleer verkoop }; pm.environment.set("update_payload", JSON.stringify(updatePayload)); } ``` ### Chainable Validatie Flow ```javascript // Tests tab - Gelaagde validatie pm.test("API Response Structuur", function() { const jsonData = pm.response.json(); // Eerste laag: basis structuur pm.expect(jsonData).to.have.keys(['status', 'data', 'pagination']); pm.expect(jsonData.status).to.be.oneOf(['success', 'error']); }); // Conditionele diepere validatie if (pm.response.json().status === 'success') { pm.test("Data Integriteit", function() { const products = pm.response.json().data.products; products.forEach((product, index) => { pm.expect(product).to.have.keys(['id', 'name', 'price', 'stock']); pm.expect(product.id).to.match(/^prod_[a-zA-Z0-9]+$/); pm.expect(product.name.length).to.be.within(1, 255); }); }); // Set volgende request alleen bij success postman.setNextRequest("Validate Product Details"); } ``` ## 4. Collection Variabelen voor Complexe Flows ### Setup in Collection Pre-request Script ```javascript // Collection level pre-request script if (!pm.collectionVariables.get("test_cycle_id")) { pm.collectionVariables.set("test_cycle_id", `cycle_${Date.now()}`); } // Initialize test state machine if (!pm.collectionVariables.get("test_state")) { pm.collectionVariables.set("test_state", "initial"); } ``` ### State Machine Implementatie ```javascript // Tests tab - State management const currentState = pm.collectionVariables.get("test_state"); const response = pm.response.json(); switch(currentState) { case "initial": if (response.data.products.length > 0) { pm.collectionVariables.set("test_state", "products_exist"); postman.setNextRequest("Test Product Updates"); } else { pm.collectionVariables.set("test_state", "no_products"); postman.setNextRequest("Create Test Data"); } break; case "products_exist": // Complexe business logic validatie const expensiveProducts = response.data.products.filter(p => p.price > 100); if (expensiveProducts.length > 0) { pm.collectionVariables.set("test_state", "premium_products"); postman.setNextRequest("Test Premium Features"); } else { pm.collectionVariables.set("test_state", "budget_products"); postman.setNextRequest("Test Budget Features"); } break; case "premium_products": // Premium product specifieke tests pm.test("Premium features aanwezig", function() { pm.expect(response.data.products[0]).to.have.property('warranty'); pm.expect(response.data.products[0].warranty).to.be.at.least(12); }); postman.setNextRequest("Cleanup Test Data"); break; } ``` ## 5. Geavanceerde Foutafhandeling ### Retry Mechanisme met Exponential Backoff ```javascript // Pre-request Script const maxRetries = 3; const currentRetry = parseInt(pm.collectionVariables.get("retry_count") || "0"); if (currentRetry > 0) { const backoffTime = Math.min(1000 * Math.pow(2, currentRetry), 30000); console.log(`Waiting ${backoffTime}ms before retry ${currentRetry}`); // Postman ondersteunt geen sleep, maar je kunt de delay instellen pm.collectionVariables.set("should_retry", "false"); } // Tests tab - Retry logic if (pm.response.code === 500 && currentRetry < maxRetries) { pm.collectionVariables.set("retry_count", (currentRetry + 1).toString()); pm.collectionVariables.set("should_retry", "true"); postman.setNextRequest(pm.info.requestName); } else { pm.collectionVariables.set("retry_count", "0"); pm.collectionVariables.set("should_retry", "false"); } ``` Deze patronen geven je een robuust framework voor complexe API-testscenario's. Je kunt ze combineren en aanpassen aan je specifieke business requirements.