Rồi Dev nào cũng phải automation test thôi!!!

Tram Ho

Bài viết đứng dưới góc nhìn của dev về vấn đề performace testing

Đặt vấn đề

Trong cuộc đời dev của chúng ta chắc hẳn sẽ gặp những câu như: tại sao biết code của A chậm hơn code của B, refactor xong làm sao biết code mới hiệu quả hơn cũ … Để trả lời vấn đề này ta cần kiểm tra nhiều thứ nhưng 1 điều chắc chắn phải kiểm tra là hiệu năng. Ở bài viết này tôi sẽ sử dụng jmeter để kiểm tra performance của app sau khi thực hiện một loạt thao tác.

Cách thực hiện

Để thực hiện test tôi sẽ chia ra làm các bước chính:

  • Ghi lại các thao tác người dùng bằng Blazemeter
  • Import vào jmeter và sửa jmeter
  • Test

Ghi lại các thao tác người dùng bằng Blazemeter

Cài đặt

Để sử dụng Blazemeter, tôi cài extension lên chrome tại link.
Sau khi cài xong, trên giao diện của Chrome ta được như sau

Sử dụng

Sau khi đã cài xong, ta mở trình duyệt đến chức năng cần test. Chức năng của tôi như sau:

  • Mở link survey
  • Nhấn nút “OK”
  • Điền thông tin vào survey
  • Ấn nút “Next”
  • Điền tiếp thông tin
  • Ấn nút “Finish”

Để ghi lại các thao tác này bạn cần làm là:

  • Mở BlazeMeter lên
  • Điền tên của chức năng
  • Nhấn nút Record (nút tròn màu đỏ) rồi thực hiện các thao tác
  • Khi thực hiện xong ấn nút Stop như hình
  • Mở lại BlazeMeter lên => Save => Check vào jmter only
    Sau bước này ta sẽ được 1 file .jmx

Import vào jmeter và sửa jmeter

Import

Mở jmeter lên và import file bên trên.

Tuy file .jmx trên đã ghi lại toàn bộ thao tác của chức năng đó nhưng ta sẽ không sử dụng ngay được. Bởi vì một số params ở các request sau là kết quả của request trước nói cách khác mỗi lần ta test params đó lại thay đổi. Cách giải quyết là ta lưu chúng lại và gọi ở các request sau, chứ không fix cứng như file .jmx bên trên.

Config jmeter

Đây là giao diện jmter sau khi tôi import file .jmx bên trên và chạy thử. Đây là cú sốc đầu đời:
Screenshot 2022-10-14 at 14.37.09.png
Nguyên nhân failed: sau request đầu, hệ thống trả về csrf_token, third-party-token,… để sử dụng cho các request sau. Trong khi đó csrf_token của tôi là của request khi tôi thực hiện ở trên mà không phải là của request khi thực hiện test.

Trong bài viết này tôi sẽ giới thiệu 2 phương thức lấy giá trị trong request và lưu lại để sử dụng cho các request sau, đó là: Regular Expression Extractor, JSON Extractor

Regular Expression Extractor

Tôi sử dụng Regular Expression Extractor để lấy giá trị khi response trả về là html. Giá trị cần lấy nằm trong thẻ title, meta, div … chẳng hạn. Để sử dụng ta làm như sau:
Screenshot 2022-10-14 at 14.43.38.png

Đây là giao diện:

Tôi sẽ giải thích các mục chính:

  • Name of created variable: điền vào tên biến mà ta muốn sử dụng sau này
  • Regular Expression: Điền vào biểu thức để lấy ra thông tin cần lấy, trong ví dụ này là tôi muốn lấy ra csrf-token. Biến này nằm trong content của thẻ meta có tên là csrf-token
  • Template: Ta nhập vào $1$, theo tôi hiểu là lấy group đầu tiên trả về, điền $1$ để lấy group đầu tiên.

Cách sử dụng:
Muốn sử dụng biến csrf vừa mới tạo, ta dùng cú pháp: ${csrf}, Ví dụ:

JSON Extractor

Tôi sử dụng JSON Extractor để lấy giá trị khi response trả về là JSON. Để sử dụng ta làm như sau:
Screenshot 2022-10-14 at 14.55.02.png
Đây là giao diện:
Screenshot 2022-10-14 at 14.55.40.png
Ví dụ response của resquest trước trả về có dạng: {panel_id: 1, name: 'Panel_1'}, tôi sẽ lưu biến panel_id như hình bên trên.

Cách sử dụng:
Screenshot 2022-10-14 at 14.57.34.png
Tôi thêm biến panel_id vào http_request như hình trên

Test

Tùy vào chức năng của các bạn mà có cách lấy giá trị biến riêng. Bạn cứ thực hiên từng request một xem request đó thiếu những gì mà thêm cho phù hợp.
Sau khi đã sửa xong tôi sử dụng Aggregate Report để kiểm tra hiệu năng. Và đây là kết quả, ta chú ý đến cột Throughput để so sánh giữa các lần test:

Kết luận

  • Dev cũng có thể thực hiện automation test
  • Jmeter mạnh hơn chúng ta (dev) nghĩ
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo