Chạy load test với K6 và Postman
K6 là gì?
Grafana k6 là một công cụ mã nguồn mở chạy load test giúp kiểm tra hiệu suất dễ dàng và hiệu quả cho các nhóm kỹ thuật. Sử dụng k6, bạn có thể kiểm tra độ tin cậy và hiệu suất của hệ thống của mình, đồng thời nắm bắt các sự cố hay sự giảm hiệu suất trong thời gian sớm.
Chúng ta có thể viết các bài test trực tiếp bằng K6 và chạy chúng. Tuy nhiên trong bài viết này, tôi sẽ giải thích cách chạy test k6 từ Postman collection có sẵn. Quá trình này rất đơn giản. Chỉ cần export Postman collection hiện có, convert chúng thành k6 test và chạy.
Các bước phải làm:
- Cài đặt k6
- Tạo request trên Postman và export chúng
- Convert các request Postman sang k6 test
- Chạy k6 test
Cài đặt k6
Làm theo hướng dẫn ở link sau để cài đặt k6:
https://k6.io/docs/get-started/installation/
Chạy câu lệnh sau để cài đặt postman-to-k6:
npm install -g postman-to-k6
Tạo request trên Postman và export chúng
Tạo các request trên Postman mà bạn muốn chạy load test, đặt tất cả các request vào chung 1 collection. Sau đó export collection và lưu vào thư mục chứa code.
Nếu bạn sử dụng các biến môi trường trong Postman, hãy export chúng tương tự.
Sau khi export xong thì chúng ta sẽ có hai file (file postman-requests.json chứa các request và file postman-env.json chứa các biến môi trường) trong thư mục dự án.
Convert các request Postman sang k6 test
Chạy câu lệnh sau để convert các request Postman sang k6 tests:
postman-to-k6 postman-requests.json -e postman-env.json --separate -o k6-script.js
Nếu bạn không có file chứa các biến môi trường thì chỉ cần chạy câu lệnh sau:
postman-to-k6 postman-requests.json --separate -o k6-script.js
Sau khi chạy lệnh chuyển đổi sang k6, file kết quả k6-script.js sẽ được tạo như bên dưới:
Chạy k6 test
Sử dụng câu lệnh sau để chạy test:
k6 run k6-script.js
export let options = { scenarios: { contacts: { executor: "constant-vus", vus: 100, duration: "30s" } } };
export let options = { scenarios: { contacts: { executor: "constant-vus", vus: 500, duration: "60s" } } };
Ví dụ: để chạy thử nghiệm với 10 người dùng đồng thời, mỗi người chạy tất cả request 20 lần trong thời gian tối đa là 30 giây.
export let options = { scenarios: { contacts: { executor: "per-vu-iterations", vus: 10, iterations: 20, maxDuration: "30s" } } };
Ngoài ra, có nhiều tham số và scenario chúng ta có thể sử dụng để điều chỉnh theo nhu cầu của mình. Vui lòng tham khảo các link dưới đây:
https://k6.io/docs/javascript-api/k6-http/params/
https://k6.io/docs/using-k6/scenarios/
Tất cả các request nằm bên trong phần default function() sẽ được thực thi khi chạy test. Nếu bạn chỉ muốn test 1 request cụ thể nào đó, bạn có thể comment out lại đoạn code chứa các request khác. Xem đoạn code dưới đây:
So sánh với Postman collection runner
Chúng ta cũng có thể sử dụng tính năng Postman collection runner để chạy load test. Với chức năng này, chúng ta không cần cài đặt thêm thư viện hoặc convert code. Chúng ta có thể tạo request và chạy test trực tiếp trong Postman. Chúng ta cũng có thể thay đổi các tham số, chẳng hạn như Iteration/Delay, để điều chỉnh bài test theo ý mình. Sự khác biệt duy nhất là chúng ta không thể chạy các bài test đồng thời với nhau, các bài test chỉ có thể chạy liên tiếp. Kết quả test cũng không được thống kê một cách chi tiết như khi chạy bằng k6. Nói cách khác, nếu bạn không có nhu cầu như chạy test đồng thời hay xem số liệu thống kê chi tiết sau khi test, thì Postman là một lựa chọn hoàn hảo.