Maak aangepaste Postman-scripts voor geautomatiseerde tests van API-ratelimieten en throttling
description
Stelt je in staat om het gedrag van je API onder verkeersbeperkingen te testen zodat je service betrouwbaar blijft. Zorgt dat je API correct ratelimieten afhandelt en voorkomt overbelasting. Biedt geautomatiseerde scripts om realistische verkeerspieken te simuleren en resultaten te valideren, wat handmatig werk bespaart en de testdekking vergroot.
prompt
Help me aangepaste Postman-testscripts te maken die API-ratelimieten en throttling-scenario's simuleren. API-eindpunt: <voer de URL van het API-eindpunt in> HTTP-methode: <selecteer GET, POST, PUT, DELETE, enzovoort> Ratelimietbeleid: <beschrijf de ratelimietregels van de API, bijvoorbeeld maximaal aantal aanvragen per minuut> Verwacht gedrag bij overschrijding ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van aangepaste Postman-testscripts die de API-ratelimieten en throttling-scenario's simuleren en controleren. Deze scripts sturen meerdere aanvragen binnen een minuut, controleren op de juiste HTTP-status bij overschrijding en letten op de Retry-After-header.
**1. Pre-request Script:**
Om de authenticatie en request-headers in te stellen, en om het aantal aanvragen te tellen:
```javascript
// Voeg je Bearer token toe
pm.request.headers.add({
key: 'Authorization',
value: 'Bearer ABCDEF123456'
});
// Initialiseer variabelen voor request telling en tijd
if (!pm.variables.get('requestCount')) {
pm.variables.set('requestCount', 0);
pm.variables.set('startTime', new Date().getTime());
}
// Verhoog request count bij elke request
let count = pm.variables.get('requestCount');
count++;
pm.variables.set('requestCount', count);
```
**2. Test Script:**
Na elke response, controleer of de API zich aan de ratelimietregels houdt:
```javascript
// Controleer de status code en headers
if (pm.response.code === 429) {
// Bij overschrijding: verwacht status 429 en Retry-After header
pm.test("Ontvangen 429 Too Many Requests bij overschrijding limiet", function () {
pm.response.to.have.status(429);
pm.response.to.have.header('Retry-After');
// Optioneel: controleer of Retry-After waarde een getal is
let retryAfter = pm.response.headers.get('Retry-After');
pm.expect(retryAfter).to.match(/^\d+$/);
});
} else {
// Bij normale responses
pm.test("API geeft geen 429, binnen limiet", function () {
pm.response.to.not.have.status(429);
});
}
// Controleer dat het aantal requests binnen een minuut de limiet niet overschrijdt
let startTime = pm.variables.get('startTime');
let currentTime = new Date().getTime();
let elapsedSeconds = (currentTime - startTime) / 1000;
if (elapsedSeconds >= 60) {
// Na 60 seconden reset je teller en starttijd
pm.variables.set('requestCount', 1);
pm.variables.set('startTime', currentTime);
} else {
// Bij minder dan 60 seconden, als requestCount > limiet, test falen
let requestCount = pm.variables.get('requestCount');
pm.test("Aantal requests binnen limiet", function () {
pm.expect(requestCount).to.be.at.most(100);
});
}
```
**3. Automatisering en herhaling:**
Deze scripts kunnen in Postman worden ingesteld op de eerste request. Gebruik de "Collection Runner" met een vertraging van 200 ms (5 aanvragen per seconde) en stel de looptijd in op 1 minuut.
**4. Extra tips:**
- Gebruik de "Set Next Request" functie indien nodig om automatisch door te gaan.
- Controleer regelmatig de headers op 429-status en de Retry-After waarde.
- Pas indien nodig de request frequentie aan om dicht bij de limiet te blijven en overschrijding te testen.
Met deze scripts simuleer je het gedrag van API-verzoeken binnen de limiet en kun je controleren of de API correct reageert op overschrijdingen.
provider: deepseek
model: deepseek-chat
Hier zijn aangepaste Postman-testscripts om de API-ratelimieten en throttling-scenario's te testen:
## Pre-request Script
```javascript
// Configureer testparameters
const requestsPerSecond = 5;
const testDuration = 60000; // 1 minuut in milliseconden
const rateLimit = 100; // 100 aanvragen per minuut
// Bereken totaal aantal aanvragen
const totalRequests = requestsPerSecond * (testDuration / 1000);
// Sla testconfiguratie op in environment
pm.environment.set("requestsPerSecond", requestsPerSecond);
pm.environment.set("testDuration", testDuration);
pm.environment.set("totalRequests", totalRequests);
pm.environment.set("rateLimit", rateLimit);
pm.environment.set("requestCount", 0);
pm.environment.set("successCount", 0);
pm.environment.set("rateLimitCount", 0);
pm.environment.set("startTime", Date.now());
```
## Test Script
```javascript
// Test voor ratelimiet compliance
const currentTime = Date.now();
const startTime = pm.environment.get("startTime");
const elapsedTime = currentTime - startTime;
// Update tellers
let requestCount = pm.environment.get("requestCount") + 1;
let successCount = pm.environment.get("successCount");
let rateLimitCount = pm.environment.get("rateLimitCount");
pm.environment.set("requestCount", requestCount);
// Test response status
if (pm.response.code === 200) {
successCount++;
pm.environment.set("successCount", successCount);
// Controleer of we onder de ratelimiet blijven
const expectedMaxRequests = Math.floor((elapsedTime / 60000) * pm.environment.get("rateLimit"));
pm.test(`Aantal requests (${requestCount}) blijft binnen ratelimiet (max ${expectedMaxRequests})`, function() {
pm.expect(requestCount).to.be.at.most(expectedMaxRequests + 5); // Kleine marge voor timing
});
}
// Test voor rate limit overschrijding
if (pm.response.code === 429) {
rateLimitCount++;
pm.environment.set("rateLimitCount", rateLimitCount);
// Controleer Retry-After header
pm.test("Retry-After header aanwezig bij 429 response", function() {
pm.expect(pm.response.headers.get("Retry-After")).to.not.be.undefined;
});
pm.test("Retry-After header bevat geldige waarde", function() {
const retryAfter = parseInt(pm.response.headers.get("Retry-After"));
pm.expect(retryAfter).to.be.a('number');
pm.expect(retryAfter).to.be.at.least(1);
});
}
// Algemene response tests
pm.test("Status code is 200 of 429", function() {
pm.expect(pm.response.code).to.be.oneOf([200, 429]);
});
pm.test("Response tijd is acceptabel", function() {
pm.expect(pm.response.responseTime).to.be.below(5000); // Max 5 seconden
});
// Eindtest wanneer testduur verstreken is
if (elapsedTime >= pm.environment.get("testDuration")) {
const totalRequests = pm.environment.get("requestCount");
const successRate = (successCount / totalRequests) * 100;
const rateLimitHitRate = (rateLimitCount / totalRequests) * 100;
console.log(`Test samenvatting:
- Totaal requests: ${totalRequests}
- Succesvolle requests: ${successCount}
- Rate limit hits: ${rateLimitCount}
- Succesratio: ${successRate.toFixed(2)}%
- Rate limit ratio: ${rateLimitHitRate.toFixed(2)}%`);
pm.test(`Rate limit wordt correct gehandhaafd (${rateLimitHitRate.toFixed(2)}% 429 responses)`, function() {
pm.expect(rateLimitHitRate).to.be.above(0); // Moet minstens enkele 429 responses hebben
});
}
```
## Collection Runner Script
```javascript
// Script voor Collection Runner om burst-aanvragen te simuleren
const request = {
url: 'https://api.example.com/v1/users',
method: 'GET',
header: {
'Authorization': 'Bearer ABCDEF123456',
'Content-Type': 'application/json'
}
};
// Simuleer 5 requests per seconde gedurende 1 minuut
const startTime = Date.now();
const testDuration = 60000;
const requestsPerSecond = 5;
let requestCount = 0;
let successCount = 0;
let rateLimitCount = 0;
async function sendRequests() {
while (Date.now() - startTime < testDuration) {
const batchStart = Date.now();
// Stuur 5 parallelle requests
const promises = [];
for (let i = 0; i < requestsPerSecond; i++) {
promises.push(pm.sendRequest(request));
}
const responses = await Promise.all(promises);
requestCount += responses.length;
responses.forEach(response => {
if (response.code === 200) {
successCount++;
} else if (response.code === 429) {
rateLimitCount++;
console.log(`Rate limit hit! Retry-After: ${response.headers.get('Retry-After')}`);
}
});
// Wacht tot volgende seconde
const elapsed = Date.now() - batchStart;
if (elapsed < 1000) {
await new Promise(resolve => setTimeout(resolve, 1000 - elapsed));
}
}
console.log(`Test voltooid:
Totaal requests: ${requestCount}
Succesvol: ${successCount}
Rate limited: ${rateLimitCount}
Succesratio: ${((successCount / requestCount) * 100).toFixed(2)}%`);
}
sendRequests();
```
## Environment Variabelen
```json
{
"base_url": "https://api.example.com/v1",
"auth_token": "Bearer ABCDEF123456",
"requestsPerSecond": 5,
"testDuration": 60000,
"rateLimit": 100
}
```
## Gebruiksaanwijzing:
1. **Importeer in Postman**:
- Maak een nieuwe collection aan
- Plak de scripts in de respectievelijke tabbladen
- Stel de environment variabelen in
2. **Voer tests uit**:
- Gebruik de Collection Runner voor grootschalige tests
- Of voer individuele requests uit met de test scripts
3. **Monitor resultaten**:
- Check de console voor gedetailleerde logs
- Analyseer de response ratios
- Verifieer dat de API consistent 429 responses geeft na 100 requests/minuut
Deze scripts simuleren realistische load en controleren of de API correct omgaat met ratelimieten volgens de gespecificeerde voorwaarden.