mirror of
https://github.com/BradGroux/veritas-kanban.git
synced 2026-08-28 02:44:59 +00:00
87 lines
2.3 KiB
JavaScript
87 lines
2.3 KiB
JavaScript
/**
|
|
* Scenario 3: Write-Heavy Load
|
|
*
|
|
* 20 virtual users creating, updating, and deleting tasks
|
|
* for 30 seconds.
|
|
*
|
|
* Thresholds:
|
|
* p(95) response time < 500 ms
|
|
* error rate < 1 %
|
|
*/
|
|
import http from 'k6/http';
|
|
import { check, sleep } from 'k6';
|
|
import { Rate } from 'k6/metrics';
|
|
import { API_BASE, defaultHeaders, makeTask } from '../config.js';
|
|
|
|
const errorRate = new Rate('errors');
|
|
|
|
export const options = {
|
|
vus: 20,
|
|
duration: '30s',
|
|
thresholds: {
|
|
http_req_duration: ['p(95)<500'],
|
|
errors: ['rate<0.01'],
|
|
},
|
|
};
|
|
|
|
export default function () {
|
|
// ── CREATE ─────────────────────────────────────────────────
|
|
const payload = makeTask('write-load');
|
|
const createRes = http.post(
|
|
`${API_BASE}/tasks`,
|
|
JSON.stringify(payload),
|
|
{
|
|
headers: defaultHeaders,
|
|
tags: { name: 'POST /tasks' },
|
|
}
|
|
);
|
|
|
|
const createOk = check(createRes, {
|
|
'create → 201': (r) => r.status === 201,
|
|
});
|
|
errorRate.add(!createOk);
|
|
|
|
if (!createOk) {
|
|
sleep(0.5);
|
|
return;
|
|
}
|
|
|
|
const created = JSON.parse(createRes.body);
|
|
const taskId = created.id || created.task?.id;
|
|
|
|
sleep(0.2);
|
|
|
|
// ── UPDATE ─────────────────────────────────────────────────
|
|
const updateRes = http.patch(
|
|
`${API_BASE}/tasks/${taskId}`,
|
|
JSON.stringify({
|
|
title: `${payload.title}-updated`,
|
|
priority: 'high',
|
|
description: 'Updated during write-load test',
|
|
}),
|
|
{
|
|
headers: defaultHeaders,
|
|
tags: { name: 'PATCH /tasks/:id' },
|
|
}
|
|
);
|
|
|
|
const updateOk = check(updateRes, {
|
|
'update → 200': (r) => r.status === 200,
|
|
});
|
|
errorRate.add(!updateOk);
|
|
|
|
sleep(0.2);
|
|
|
|
// ── DELETE ─────────────────────────────────────────────────
|
|
const delRes = http.del(`${API_BASE}/tasks/${taskId}`, null, {
|
|
headers: defaultHeaders,
|
|
tags: { name: 'DELETE /tasks/:id' },
|
|
});
|
|
|
|
const delOk = check(delRes, {
|
|
'delete → 200 or 204': (r) => r.status === 200 || r.status === 204,
|
|
});
|
|
errorRate.add(!delOk);
|
|
|
|
sleep(0.3);
|
|
}
|