Files
IPSExtractor/docs/plan_pruebas/scripts/k6_bot_events.js
T

67 lines
1.6 KiB
JavaScript

import http from 'k6/http';
import { check, sleep } from 'k6';
/**
* ST-BOT-03 — Storm de eventos sobre un job existente.
*
* k6 run -e DOWNLOAD_JOB_ID=<id> -e PROFILE=shared8g k6_bot_events.js
*/
const PROFILE = __ENV.PROFILE || 'shared8g';
const BASE_URL = __ENV.BASE_URL || 'http://127.0.0.1:8189';
const TOKEN = __ENV.BOT_API_TOKEN || 'dev-token-change-me';
const JOB_ID = __ENV.DOWNLOAD_JOB_ID || '';
const profiles = {
shared8g: {
stages: [
{ duration: '15s', target: 5 },
{ duration: '45s', target: 12 },
{ duration: '15s', target: 0 },
],
},
lab: {
stages: [
{ duration: '20s', target: 10 },
{ duration: '1m', target: 40 },
{ duration: '20s', target: 0 },
],
},
};
const cfg = profiles[PROFILE] || profiles.shared8g;
export const options = {
stages: cfg.stages,
thresholds: {
http_req_failed: ['rate<0.02'],
http_req_duration: ['p(95)<1000'],
},
tags: { profile: PROFILE },
};
export default function () {
if (!JOB_ID) {
throw new Error('Defina DOWNLOAD_JOB_ID con un job existente');
}
const idx = __ITER + 1;
const payload = JSON.stringify({
event_type: 'progress',
message: `k6 event ${idx}`,
index: idx,
total: 5000,
radicado: `R-${idx}`,
nit: '900123456',
metadata: { source: 'k6', profile: PROFILE },
});
const res = http.post(`${BASE_URL}/bot-descarga/jobs/${JOB_ID}/events`, payload, {
headers: {
Authorization: `Bearer ${TOKEN}`,
'Content-Type': 'application/json',
},
});
check(res, {
'event accepted': (r) => r.status === 200,
});
sleep(PROFILE === 'shared8g' ? 0.15 : 0.05);
}