Update load test to 100 VUs with login jitter

Stages: 10 → 50 → 100 VUs, hold 3 min, ramp down.
Added random 0-10s sleep before first login to spread auth requests
and reduce Better Auth rate-limit retries.
Results: p(95)=244ms, pages 100% OK, auth retries 6.28% (rate-limit artifact).
This commit is contained in:
2026-05-06 12:33:49 +00:00
parent 628226151b
commit 4f3b389f05
+7 -2
View File
@@ -31,12 +31,13 @@ export const options = {
stages: [ stages: [
{ duration: "30s", target: 10 }, // разгон до 10 пользователей { duration: "30s", target: 10 }, // разгон до 10 пользователей
{ duration: "1m", target: 50 }, // разгон до 50 { duration: "1m", target: 50 }, // разгон до 50
{ duration: "3m", target: 50 }, // держим 50 три минуты { duration: "1m", target: 100 }, // разгон до 100
{ duration: "3m", target: 100 }, // держим 100 три минуты
{ duration: "30s", target: 0 }, // спад { duration: "30s", target: 0 }, // спад
], ],
thresholds: { thresholds: {
http_req_duration: ["p(95)<3000"], // 95% запросов быстрее 3 секунд http_req_duration: ["p(95)<3000"], // 95% запросов быстрее 3 секунд
http_req_failed: ["rate<0.05"], // ошибок меньше 5% (было 1%, но до фикса Kinescope) http_req_failed: ["rate<0.05"], // ошибок меньше 5%
}, },
}; };
@@ -49,6 +50,10 @@ export default function () {
// 1. Логин — только при первой итерации VU // 1. Логин — только при первой итерации VU
if (!isLoggedIn) { if (!isLoggedIn) {
// Случайная задержка 0-10s: распределяем 100 логинов во времени,
// иначе все VU стартуют одновременно и бьют rate-limit Better Auth.
sleep(Math.random() * 10);
const loginRes = http.post( const loginRes = http.post(
`${BASE}/api/auth/sign-in/email`, `${BASE}/api/auth/sign-in/email`,
JSON.stringify({ email: TEST_USER.email, password: TEST_USER.password }), JSON.stringify({ email: TEST_USER.email, password: TEST_USER.password }),