From 4f3b389f053777d24b8c2dea55eb21ef6a4ef3fd Mon Sep 17 00:00:00 2001 From: Dmitriy Laukhin Date: Wed, 6 May 2026 12:33:49 +0000 Subject: [PATCH] Update load test to 100 VUs with login jitter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- load-test.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/load-test.js b/load-test.js index a314624..b77a20e 100644 --- a/load-test.js +++ b/load-test.js @@ -29,14 +29,15 @@ const BROWSER_HEADERS = { export const options = { stages: [ - { duration: "30s", target: 10 }, // разгон до 10 пользователей - { duration: "1m", target: 50 }, // разгон до 50 - { duration: "3m", target: 50 }, // держим 50 три минуты - { duration: "30s", target: 0 }, // спад + { duration: "30s", target: 10 }, // разгон до 10 пользователей + { duration: "1m", target: 50 }, // разгон до 50 + { duration: "1m", target: 100 }, // разгон до 100 + { duration: "3m", target: 100 }, // держим 100 три минуты + { duration: "30s", target: 0 }, // спад ], thresholds: { 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 if (!isLoggedIn) { + // Случайная задержка 0-10s: распределяем 100 логинов во времени, + // иначе все VU стартуют одновременно и бьют rate-limit Better Auth. + sleep(Math.random() * 10); + const loginRes = http.post( `${BASE}/api/auth/sign-in/email`, JSON.stringify({ email: TEST_USER.email, password: TEST_USER.password }),