feat: improve session limit handling and add k6 load testing

This commit is contained in:
2026-04-23 05:17:53 +00:00
parent 47f46d5c5b
commit 1438dee21a
6 changed files with 687 additions and 156 deletions
+70
View File
@@ -0,0 +1,70 @@
# Load Testing (k6)
Готовый скрипт: `scripts/load/portal_k6.js`.
## 1) Установка k6
Ubuntu/Debian:
```bash
sudo gpg -k
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt update && sudo apt install -y k6
```
## 2) Smoke тест (быстрая проверка)
```bash
k6 run scripts/load/portal_k6.js \
-e BASE_URL=https://stend.4mont.ru \
-e USERNAME=ruslan \
-e PASSWORD='YOUR_PASSWORD' \
-e SERVICE_SLUGS=vmmanager,termidesk \
-e PROFILE=smoke
```
## 3) Нормальная нагрузка
```bash
k6 run scripts/load/portal_k6.js \
-e BASE_URL=https://stend.4mont.ru \
-e USERS_CSV='user1:pass1;user2:pass2;user3:pass3' \
-e SERVICE_SLUGS=vmmanager,termidesk,sayt-mont5 \
-e PROFILE=load \
-e HEARTBEATS=3 \
-e THINK_TIME=1
```
## 4) Стресс
```bash
k6 run scripts/load/portal_k6.js \
-e BASE_URL=https://stend.4mont.ru \
-e USERS_CSV='user1:pass1;user2:pass2;user3:pass3;user4:pass4' \
-e SERVICE_SLUGS=vmmanager,termidesk,sayt-mont5 \
-e PROFILE=stress
```
## 5) Ключевые параметры
- `BASE_URL` — адрес портала.
- `USERNAME`/`PASSWORD` — одиночный пользователь.
- `USERS_CSV` — набор пользователей `u1:p1;u2:p2`.
- `SERVICE_SLUGS` — список slug через запятую.
- `PROFILE``smoke|load|stress`.
- `HEARTBEATS` — сколько `touch` в итерации.
- `THINK_TIME` — пауза между итерациями.
- `CLOSE_SESSION=0` — не закрывать сессию в конце итерации.
## 6) Что смотреть в результате
- `http_req_duration` (`p95/p99`)
- `http_req_failed`
- `flow_errors`
- `open_success`, `open_rejected`, `limit_redirects`, `touch_rejected`
## 7) Важное
- Запускайте сначала `smoke`, потом `load`, и только затем `stress`.
- Для реалистичного теста используйте несколько пользователей, иначе упретесь в лимиты по сессиям одного пользователя.