Performance Testing [Phần 4] Hướng dẫn sử dụng Gatling Test

30/12/2020

Tổng quan

Tại bài trước, mình đã hướng dẫn các bạn quay một kịch bản gatling script đơn giản. Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng công cụ gatling để chạy kịch bản cũng như điểu chỉnh cách tạo tải trong gatling. Gatling sử dụng ngôn ngữ scala để tạo ra các kịch bản nên mình khuyến khích các bạn tìm hiểu ngôn ngữ scala cơ bản.

Phân tích kịch bản

Ở đây mình sẽ mở kịch bản quay từ phần 3. Trong gatling, file chứa gatling script sẽ nằm trong thư mục gatling-charts-highcharts-bundle-3.2.0/user-files/simulations

Script tham khảo tại đây

Trong bài viết này, mình sẽ sử dụng công cụ Visual Studio Code để đọc cũng như chỉnh sửa script gatling. Tải công cụ Visual Studio Code tại đây

Phân tích cấu trúc

File kịch bản mình có được sau phần 3 có tên DemoGatlingRecorder.scala

Cấu trúc tổng quát

Theo cấu trúc mình sẽ chia thành 6 phần

  • (1): Khai báo các thư viện của Gatling
  • (2): Tên của kịch bản
  • (3): Khai báo giao thức, trong bài mình sử dụng giao thức http
  • (4): Danh sách các header request
  • (5): Kịch bản mô phỏng người dùng
  • (6): Tải mô phỏng

Trong file kịch bản chúng ta tạm không cần quan tâm tới các thành phần 1, 2, 3, 4. Mình sẽ tập trung phân tích phần 5 và phần 6, đây là 2 phần quan trọng để chỉnh sửa cũng như tạo tải mô phỏng

Phân tích kịch bản mô phỏng

Tại kịch bản scn, mình đã chia thành 5 step lớn tương ứng với kịch bản mình quay trong bài 2.

Tóm tắt các thao tác mình đã thực hiện:

  • Bước 1: Người dùng truy cập trang chủ
  • Bước 2: Chuyển sang đọc một bài viết
  • Bước 3: Tìm kiếm một bài viết
  • Bước 4: Truy cập một bài viết trong danh sách có được từ bước 3
  • Bước 5: Người dùng trở về trang chủ

Các step mình đóng khung là cách thao tác mình thực hiện trên trình duyệt được Gatling Recorder thu thập lại. Thông thường mỗi exec sẽ tương ứng với 1 thao tác trên trình duyệt

Bây giờ chúng ta sẽ tập trung phân tích 1 step hay 1 thao tác. Ở đây mình sẽ phân tích bước 1, người dùng truy cập trang chủ.

Tại bước 1, người dùng thực hiện thao tác truy cập trang chủ.

.exec(    http("request_0")    .get("/")    .headers(headers_0)    .resources(        http("request_1")        .get("/wp-includes/js/wp-emoji-release.min.js?ver=4.9.10")        .headers(headers_1)    ) ) 

Phân tích:

  • block exec sẽ bằng với một thao tác trên trình duyệt (click vào 1 link hay button)
  • http("request_0") thực hiện giao thức http, với tên requét là request_0. Chúng ta hoàn toàn có thể đổi tên request_0 thành truy_cap_web để script trở nên dễ hiểu hơn
  • headers(headers_0) thực hiện request với headers_0. Như mình đã nói, gatling sẽ cố gắng mô phỏng thao tác người dùng. Thì để request mô phỏng giống request thực, gatling sẽ bổ sung thêm các param và header request.
  • block resources sẽ mô phỏng các request ẩn phía dưới trang web. VD: Khi vào trang web, trình duyệt sẽ tự động load thêm các file css, js phía dưới. Vậy ở đây, gatling đã mô phỏng thêm 3 request chạy ẩn phía dưới trình duyệt (request_1)

Phân tích tải mô phỏng

Để tạo ra tải mô phỏng, Gatling sử dụng block setUp. Bên trong block setUp là cách kịch bản sẽ được thực hiện và cách mỗi kịch bản được mô phỏng, VD: Thực hiện kịch bản A và B, kịch bản A thực hiện với 10 người dùng đồng thời, kịch bản B với 5 người dùng mỗi 1 giây duy trì trong 5 giây.

Mã nguồn

setUp(     scn.inject(         atOnceUsers(1)      ) ).protocols(httpProtocol) 
  • Block setUp, chứa các kịch bản sẽ được thực hiện
  • scn tên của kịch bản trong val scn = scenario("DemoGatlingRecorder")
  • scn.inject các kịch bản tạo tải, ví dụ 30 người dùng truy cập đồng thời thực hiện kịch bản trong khoảng thời gian 150s, mỗi 1 giây tạo ra một người dùng
  • atOnceUsers(1) kịch bản tạo tải, thực hiện mô phỏng 1 người dùng thực hiện các thao tác mô phỏng.

Chạy kịch bản

Khởi động Gatling

gatling-charts-highcharts-bundle-3.2.0/bin ./gatling.sh

Chọn kịch bản vừa quay

GATLING_HOME is set to /home/thanhnb/Bench/lab/gatling-charts-highcharts-bundle-3.2.0 Choose a simulation number:      [0] DemoGatlingRecorder      [1] LandingBench      [2] RecordedSimulation 0  < CHỌN 0 ĐÚNG KỊCH BẢN VỪA QUAY>  Select run description (optional) <ENTER TẠI ĐÂY> Simulation DemoGatlingRecorder started…

Kết quả

Reports generated in 0s. Please open the following file: /home/thanhnb/Bench/lab/gatling-charts-highcharts-bundle-3.2.0/results/demogatlingrecorder-20190811103044713/index.html

Thay đổi tải mô phỏng

Để thay đổi tải mô phỏng, chúng ta sẽ sửa lại block setUp trong script.

Mẫu 1: Thực hiện 1 user đồng thời

setUp(     scn.inject(         atOnceUsers(1)     ) ).protocols(httpProtocol)

Mẫu 2: Thực hiện 10 user đồng thời

setUp(     scn.inject(         atOnceUsers(10)     ) ).protocols(httpProtocol) 

Mẫu 3: Cứ 5 giây tạo ra một user giả lập, duy trì trong 500 giây

setUp(     scn.inject(         rampUsers(100) during(500 seconds)     ) ).protocols(httpProtocol)

Mẫu 4: Cứ 1 giây tạo ra 3 user giả lập, duy trì trong 15 giây

setUp(     scn.inject(         constantUsersPerSec(3) during (15 seconds)     ) ).protocols(httpProtocol)

Mẫu 5: Kết hợp 2 kịch bản tạo tải

Kết hợp kịch bản 10 user đồng thời và cứ 5 giây tạo ra một user giả lập, duy trì trong 500 giây

setUp(     scn.inject(         atOnceUsers(10),         rampUsers(100) during(500 seconds)     ) ).protocols(httpProtocol)

Lưu ý:

  • Có thể kết hợp nhiều kịch bản mô phỏng tải
  • Có thể thêm các kiểu dữ liệu, cú pháp ngôn ngữ scala để tạo nhiều kịch bản phức tạp hơn
  • Để xem thêm cách tạo tải, tham khảo thêm gatling cheetsheet

Tổng kết

Đến đây, mình đã hướng dẫn các bạn sử dụng Gatling Test và phân tích cấu trúc script scala, thay đổi cách tạo tải. Đến bài tiếp theo mình sẽ hướng dẫn các bạn cách phân tích biểu đồ Cám ơn các bạn đã quan tâm

Nguồn

https://gatling.io/docs/current/cheat-sheet/

Sandclock IDC thành lập vào năm 2012, là công ty chuyên nghiệp tại Việt Nam trong lĩnh vực cung cấp dịch vụ Hosting, VPS, máy chủ vật lý, dịch vụ Firewall Anti DDoS, SSL… Với 10 năm xây dựng và phát triển, ứng dụng nhiều công nghệ hiện đại, Sandclock IDC đã giúp hàng ngàn khách hàng tin tưởng lựa chọn, mang lại sự ổn định tuyệt đối cho website của khách hàng để thúc đẩy việc kinh doanh đạt được hiệu quả và thành công.
Bài viết liên quan

Nextcloud [Part 2] – Cài đặt Nextcloud trên Ubuntu 18

Mục lục Chuẩn bị môi trường Cài đặt dịch vụ Web Cài đặt MariaDB Cài đặt PHP 7.2 Cài...
30/12/2020

Script #4: Script cảnh báo file lạ trên server Linux (Detect Strange Files Script)

Việc các máy chủ bị hacker tấn công là việc thường xuyên xảy ra. Trong đó, có một lỗ hổng...
30/12/2020

[MariaDB Replication]Giới thiệu về MariaDB Replication Master-Slave

Với các cơ sở dữ liệu có nhu cầu lưu trữ lớn thì đòi hỏi về tính toàn vẹn, không bị...
30/12/2020
Bài Viết

Bài Viết Mới Cập Nhật

Hướng dẫn chuyển đổi windows server windows evaluation to standard và active windows server 2008 + 2012 + 2016 + 2019
26/10/2021

How to Update Ubuntu Linux
24/10/2021

Squid Proxy Manager cài đặt và quản lý Proxy Squid tự động trên ubuntu
20/10/2021

Hướng dẫn cài đặt Apache CloudStack 4.15.2.0
19/10/2021

Hướng dẫn ký file PDF bằng chữ ký số (chữ ký điện tử) và sửa lỗi mới nhất 2021 foxit reader
19/10/2021