Ở bài viết trước mình đã giới thiệu về công cụ test k6.io và các sử dụng công cụ này trên dịch vụ cloud của chính nó. Bài này, mình tiếp tục giới thiệu về cách làm stress test với k6.io phần 2
2. Scripts
Việc sử dụng cloud với giao diện trực quan giúp chúng ta dễ dàng tiếp cận và sử dụng công cụ này để thực hiện các bài kiểm thử. Tuy nhiên, nếu chúng ta muốn tùy chỉnh để đem lại kết quả phù hợp với tính năng của hệ thống thì việc sử dụng cloud có đôi chút bất tiện, chưa kể nếu là người dùng miễn phí thì sẽ có khá nhiều giới hạn trong việc sử dụng các tính năng sâu hơn.
Vậy nên công cụ này cũng đã phát hành bộ mã nguồn mở tương tự bản cloud, cho phép chúng ta tùy chỉnh, chạy test và xem kết quả ngay ở local, hoặc server.
Cài đặt:
K6.io phát hành các gói cài đặt và sử dụng trên rất nhiều hệ điều hành, hệ thống như linux, mac, window, docker…
Linux (Debian/Ubuntu)
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61 echo "deb https://dl.bintray.com/loadimpact/deb stable main" | sudo tee -a /etc/apt/sources.list sudo apt-get update sudo apt-get install k6
Mac (brew)
brew install k6
Windows (MSI installer)
Download the k6 installer: https://dl.bintray.com/loadimpact/windows/k6-latest-amd64.msi
Docker
docker pull loadimpact/k6
Sử dụng
Việc sử dụng k6.io bằng script khá dễ dàng. Đầu tiên, chúng ta tạo một file với tên scripts.js với nội dung sau:
import http from 'k6/http'; import { sleep } from 'k6'; export default function() { http.get('http://test.k6.io'); sleep(1); }
Và chạy câu lệnh để thực thi script:
k6 run script.js
Stress test với script
Ở trên là những giới thiệu cơ bản về việc sử dụng script để thực hiện các bài test. Bây giờ mình sẽ đi vào phần chính, dùng script để chạy stress test.
import { sleep } from "k6"; import http from "k6/http"; export const options = { stages: [ { duration: "12s", target: 50 }, { duration: "12s", target: 200 }, { duration: "12s", target: 400 }, { duration: "12s", target: 400 }, { duration: "12s", target: 0 } ], }; export default function() { let response; response = http.get("https://loibui.asia/wp-json/v2/posts"); sleep(1); }
Bắt đầu chạy nào
Và kết quả
Website cũng chết luôn :)))
Như vậy chúng ta đã hoàn thành việc chạy stress test với kết là một loạt con số như sau
data_received..............: 1.1 MB 19 kB/s data_sent..................: 256 kB 4.3 kB/s http_req_blocked...........: avg=101.97ms min=378ns med=1.77µs max=553.98ms p(90)=324.02ms p(95)=416.23ms http_req_connecting........: avg=29.88ms min=0s med=0s max=117.44ms p(90)=101.49ms p(95)=102.67ms http_req_duration..........: avg=2.48s min=152.88ms med=1.34s max=10.6s p(90)=9.35s p(95)=9.88s http_req_receiving.........: avg=279.15µs min=59.21µs med=265.75µs max=2.17ms p(90)=394.21µs p(95)=467.06µs http_req_sending...........: avg=273.29µs min=48.09µs med=211.43µs max=1.16ms p(90)=539.96µs p(95)=602.71µs http_req_tls_handshaking...: avg=71.81ms min=0s med=0s max=451.31ms p(90)=220.94ms p(95)=311.69ms http_req_waiting...........: avg=2.48s min=152.61ms med=1.34s max=10.6s p(90)=9.35s p(95)=9.88s http_reqs..................: 407 6.783323/s iteration_duration.........: avg=3.58s min=1.15s med=2.4s max=11.78s p(90)=10.46s p(95)=10.98s iterations.................: 407 6.783323/s vus........................: 1 min=1 max=400 vus_max....................: 400 min=400 max=400
http_req_blocked: Thời gian VU dành để chờ được phân bổ kết nối TCP từ nhóm kết nối.
http_req_connecting: Thời gian VU dành để thiết lập kết nối TCP đến máy chủ từ xa
http_req_duration: Thời gian thực hiện tra cứu DNS.
http_req_receiving: Thời gian nhận được trả lời từ máy chủ từ xa.
http_req_sending: Thời gian dành để truyền các yêu cầu HTTP đến máy chủ từ xa.
http_req_tls_handshaking: thời gian máy khách và máy chủ, xác nhận lẫn nhau và bắt đầu giao tiếp
http_req_waiting: Thời gian chờ đợi phản hồi trở lại từ máy chủ từ xa (sau khi đã gửi yêu cầu).
http_reqs: Tổng số yêu cầu HTTP được thực hiện trong toàn bộ thử nghiệm
iteration_duration: Tổng thời gian cho yêu cầu. (http_req_sending + http_req_waiting + http_req_receiving)
iterations: Tổng số lần tất cả các VU trong thử nghiệm được quản lý để chạy qua hàm default ().
vus: Có bao nhiêu VU thử nghiệm được cấu hình để mô phỏng.
vus_max: Số lượng vị trí VU được phân bổ trước mà thử nghiệm được định cấu hình (vus_max cho phép bạn mở rộng số lượng VU trong thử nghiệm để tối đa số lượng đó).
Kết luận
Như vậy chúng ta đã hoàn thành được cách để thực hiện bài stress test cho hệ thống. Đương nhiên để hiểu và đánh giá được performance của hệ thống, chúng ta cần phải hiểu sâu hơn về performance testing bằng cách phân tích, tính toán những kết quả mà công cụ k6.io đưa ra.
Tham khảo:
Document: https://k6.io/docs/