- Add constant-arrival-rate scenarios to all 4 service scripts (api,
darkwatch, spamshield, voiceprint) to enforce 500 req/s target
- Fix defaultThresholds() to return { thresholds: {...} } so
http_req_duration and errors thresholds are actually applied
- Rewrite run-all.sh: per-service summary files, proper env var
passing (DURATION, API_TOKEN), fixed threshold aggregation
- Update CI workflow threshold check jq to match new threshold-results
structure (.services.<name>.exitCode)
Co-Authored-By: Paperclip <noreply@paperclip.ing>
45 lines
1013 B
JavaScript
45 lines
1013 B
JavaScript
import { Rate, Trend } from 'k6/metrics';
|
|
|
|
export const errorRate = new Rate('errors');
|
|
|
|
export function getBaseUrl() {
|
|
return __ENV.BASE_URL || 'http://localhost:3000';
|
|
}
|
|
|
|
export function getTargetRps() {
|
|
return parseInt(__ENV.TARGET_RPS || '500', 10);
|
|
}
|
|
|
|
export function getDuration() {
|
|
return __ENV.DURATION || '300s';
|
|
}
|
|
|
|
export function defaultThresholds(p99ms) {
|
|
return {
|
|
thresholds: {
|
|
http_req_duration: [`p(99)<${p99ms}`],
|
|
errors: ['rate<0.01'],
|
|
},
|
|
};
|
|
}
|
|
|
|
export function checkResponse(res, expectedStatus = 200) {
|
|
const pass = check(res, {
|
|
'status is expected': (r) => r.status === expectedStatus,
|
|
'response time OK': (r) => r.timings.duration < 5000,
|
|
});
|
|
if (!pass) {
|
|
errorRate.add(1);
|
|
}
|
|
return pass;
|
|
}
|
|
|
|
export function randomString(length = 10) {
|
|
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
let result = '';
|
|
for (let i = 0; i < length; i++) {
|
|
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
}
|
|
return result;
|
|
}
|