Ở 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/

Verified by ExactMetrics