K6 testing
Yêu cầu
Cài đặt Git và Docker & Docker-compose
Sử dụng
Bạn cần copy file example.config.js
(trong thư mục scripts/config
) và đổi tên thành config.js
.
Bạn có thể thay đổi các tùy chọn trong file config.js
.
Mở Terminal (hoặc Command Prompt trên Window), chuyển đến thư mục này (k6
)
cd stress-test/k6
Chạy InfluxDB + Grafana Docker containers bằng lệnh sau:
docker-compose up -d influxdb grafana
Bây giờ có thể chạy stress test bằng lệnh:
docker-compose run k6 run ./scripts/<FILE_NAME>.js
Cấu hình kịch bản test
Có thể cấu hình kịch bản test trong file config.js
.
Ví dụ:
stages: [
{ duration: '10s', target: 100 }, // below normal load
{ duration: '1m', target: 100 },
{ duration: '10s', target: 1400 }, // spike to 1400 users
{ duration: '3m', target: 1400 }, // stay at 1400 for 3 minutes
{ duration: '10s', target: 100 }, // scale down. Recovery stage.
{ duration: '2m', target: 100 },
{ duration: '10s', target: 0 },
]
Ghi chú:
- duration: thời gian
- target: số lượng user ảo (Virtual User)
- VUs: Số lượng Vus đồng thời
Kịch bản test trên bắt đầu với khoảng thời gian 1 phút và 100 user ảo, tăng đột biến nhanh đến 1400 user ảo duy trì trong 3 phút, sau đó trở lại 100 user ảo để kiểm tra khả năng phục hồi của server.
Xem kết quả test
Truy cập http://localhost:3000
(đường dẫn của Grafana) từ trình duyệt.
Trên thanh menu bên trái, chọn Dashboards >> Manage >> chọn k6 Load Testing Results.
Bạn nên chọn thời gian bắt đầu và kết thúc test (Absolute time range) ở góc trên bên phải để xem kết quả chính xác hơn.
Bạn có thể thay đổi cấu hình cho Grafana trong file docker-compose.yml
grafana:
...
ports:
- "3088:3000"
Test scripts
I. POST /api/invoice
Thực hiện việc gửi Invoice API về team-server
Short script:
docker-compose run k6 run ./scripts/addInvoicesAPIStressTest.js -e BASE_URL=testURL -e ACCESS_TOKEN=token
Kịch bản test trên bắt đầu với 5000 invoice một lúc sau đó tắt và kết nối lại database để kiểm tra số lượng invoice có thể đợi ở Queues và insert đầy đủ vào database
Environment variables
- BASE_URL (default: "http://host.docker.internal:3000")