Trong Jmeter có 1 số loại Timer giúp việc tạo ra các test plan mà gần với scenario thực tế của end-user. End-user có thể hành động nhanh chậm, chờ đợi, hoặc dừng lại đọc thông tin trên web trước khi có action tiếp theo. Nếu chúng ta giả lập test plan càng giống thực tế thì kết quả của performance test càng đáng tin cậy. Tuy nhiên, jmeter cung cấp nhiều loại Timer khác nhau, có loại rất dễ hiểu, nhưng có loại cũng không dễ chút nào.
Nội dung bài viết
I. Timer nằm đâu trong Jmeter
Thread Group > Add > Timer
II. Timer tác dụng vào đối tượng nào
Timer sẽ có tác dụng vào các request mà trong cùng tập hợp với nó.
Ví dụ 1: Timer nằm trong Thread Group
- Cả 2 request
Req1
vàReq2
đều bị ảnh hưởng
Ví dụ 2: Timer nằm trong controller
- Chỉ có
Req1
vàReq2
bị ảnh hưởng Req3
không bị ảnh hưởng
Ví dụ 3: Timer nằm trong 1 request
- Chỉ có
Req2
bị ảnh hưởng - Các request khác không bị tác động
III. Các loại Timer
1. Constant Timer
- Delay 1 khoảng thời gian trước khi run request mà nó tác động
- Req1 chạy ngay lập tức
- Req2 chờ đủ 5s sau khi Req1 kết thúc
- Req3 chạy ngay khi Req2 kết thúc
2. Uniform Random Timer
- Random Delay Maximum: thời gian request sẽ delay, random linh động và không vượt quá con số này.
- Constant Delay Offset: Thời gian request mặc định delay.
Tổng thời gian delay = Constant Delay Offset + Random Delay Maximum
Giả sử:
- Constant Delay Offset = 2000 (miliseconds)
- Random Delay Maximum = 3000 (miliseconds)
- –> Tổng thời gian delay sẽ là
2000 < delay time < 5000
Ví dụ:
3. Gaussian Random Timer
Gaussian graph là cái histogram/curve mà chúng ta có học ở xác suất thống kê, nó chính là cái tháp hình chuông. Với điểm nằm giữa là Constant Delay Offset
, còn Deviation
là độ biến thiên sang 2 bên.
Như vậy thời gian delay sẽ là: offset - deviation <= delay <= offset + deviation
. Tuy nhiên nó sẽ phân bổ phần nhiều vào khu vực Offset thay vì 2 bên rìa của cái chuông.
4. JSR223 Timer
Viết code groovy để cho biết là sẽ delay bao lâu. Mấu chốt là phải return được 1 number. Ví dụ:
Nếu logic của bạn phức tạp thì bạn có thể thêm logic vào trong đó. Ví dụ bạn muốn kiểm tra xem tên của request trước khi áp dụng con số Timer
Kết quả là:
- Req1 sẽ delay 2000 milisecond
- Req2 sẽ delay 5000 milisecond
switch (ctx.getCurrentSampler().getName()) { case "Req1": return 2000 break case "Req2": return 5000 break default: return 0 }
5. Poisson Random Timer
Đây là cái Timer khá phức tạp, nó cũng như Gaussian Timer ở trên, tuy nhiên nó phân bổ theo mô hình gọi là Poisson Distribution. Mình cũng cố đọc xem nó là cái quái gì mà đau đầu, nhức mắt quá. =))) Bạn nào muốn đọc tí để thử thì tự google nhé. Mình không nghĩ là mình cần dùng đến loại Timer này, phức tạp quá là phức tạp.
6. BeanShell Timer
Loại này giống như JSR223 Timer ở phía trên, điểm khác là chúng ta viết code Java ở đây. Tuy nhiên BeanShell được coi là performace kém hơn so với JSR223 Groovy nên giờ chẳng còn ai dùng BeanShell.
7. Cái loại Timer khác
- Synchronizing Timer: mình đã nói ở bài viết Nhiều user thực hiện một hành động đồng thời trên jmeter
- Constant Throughput Timer: Constant Throughput Timer trong JMeter
- Precise Throughput Timer: siêu phức tạp, mình sẽ tìm hiểu rồi viết sau (hên xui)
IV. Tổng kết
Dùng Timer là 1 việc cần thiết cho performace, giúp tạo ra test plan giống với các case thực tế, nhưng bạn cũng không cần phải học hết tất cả các loại Timer. Chúc các bạn sớm master Jmeter, chứ mình chịu, đau đầu đau mắt quá. @@