Constant Throughput Timer trong JMeter

I. Overview

Về cơ bản cái này có mục đích để điều khiển Arrival Rate, ví dụ bạn muốn đẩy 30 requests lần lượt đến server trong 1 phút, thì jmeter sẽ tự tính toán thời gian để điều chỉnh thời gian gửi request đạt target trên.

Mặc dù nó tên là Constant Throughput Timer, nhưng cái nó điều chỉnh là tỉ suất gửi request lên server, chứ ko phải là cái throughput mà bạn thấy ở lúc báo cáo đâu.

Nó chỉ có 2 configs:

  • Target throughput (in samples per minute): mức arrival rate mà bạn muốn, ví dụ 30 samples/min
  • Calculate Throughput based on: chia tỉ lệ ấy vào thread nào?
    • This thread only: nó sẽ tính tỉ lệ dựa trên mỗi thread
    • All active thread: nó sẽ tính tỉ lệ chung cho tất cả các active thread trong tất cả các Thread Group. Cái này sử dụng thuật toán non-shared sẽ giúp chia số request cho thread đều hơn là thuật toán shared.
    • All active thread in current thread group: nó sẽ tính tỉ lệ chung cho tất cả các active thread trong mỗi Thread Group. Cái này sử dụng thuật toán non-shared sẽ giúp chia số request cho thread đều hơn là thuật toán shared.
    • All active threads (shared) – tương tự như trên. Thuật toán shared sẽ giúp chính xác số arrival rate hơn.
    • All active threads in current thread group (shared): tương tự như trên. Thuật toán shared sẽ giúp chính xác số arrival rate hơn.

II. Các trường hợp cụ thể

VD1: This thread only – 1 request.

  • 5 Threads
  • Duration: 60s
  • Target throughput: 30 samples/min
  • Option: This thread only

Có nghĩa là: 5 threads trên, mỗi thread sẽ đảm bảo run đủ 30 samples/min. Tổng cộng sẽ có 30*5 = 150 samples trong 1 phút.

VD2: This thread only – 3 requests.

Vẫn setting như trên, nhưng lần này là 3 requests:

Có nghĩa là: 5 threads trên, mỗi thread sẽ đảm bảo run đủ 30 samples (gồm cả 3 requests)/min. Tổng cộng sẽ có 30*5 = 150 samples trong 1 phút. Trong đó, mỗi request là 50 samples.

VD3: All active threads – 3 requests.

Giả sử mình có 2 threads group giống hệt nhau, mỗi thread group sẽ có setting như sau:

  • 5 Threads
  • Ramp-up: 1s (sau 1 giây, số lượng active thread là 5)
  • Duration: 60s
  • Target throughput: 30

Có nghĩa là: 5*2 = 10 active threads trên sẽ chia sẻ để tạo ra 30 samples (gồm cả 3 requests) /min. Mỗi active threads sẽ được run 30/10 = 3 requests.

Mình đánh dấu 3 request mà thread 1 của group 1 run. Tuy nhiên riêng cái req 1 lại được run 2 lần, đó là vì sự kém chính xác trong tính toán của JMeter. Bù lại nó chia số request cho các thread rất đều.

VD4: All active threads (shared) – 3 requests.

Mình setting giống hệt ví dụ 3, nhưng lần này, mình sẽ dùng option All active threads (shared). Mình kỳ vọng 1 kết quả gần tương đương, và số lượng tổng số samples sẽ chính xác hơn.

VD5: All active threads in current thread group – 3 requests.

Giờ đây việc chia sẻ chỉ dành cho active threads của mỗi thread group mà thôi.

  • 5 Threads
  • Ramp-up: 1s (sau 1 giây, số lượng active thread là 5)
  • Duration: 60s
  • Target throughput: 30

Có nghĩa là: 5 active threads trên sẽ chia sẻ để tạo ra 30 samples (gồm cả 3 requests) /min. Mỗi active threads sẽ được run 30/5 = 6 requests. Tuy nhiên, nó sẽ có sai số 1 chút, nó cho ra tổng số samples là 34.

VD6: All active threads in current thread group (shared) – 3 requests.

Setting giống y hệt ví dụ 5, kết quả cũng gần tương tự, số lượng total request bạn sẽ thấy nó sát với những gì bạn kỳ vọng hơn. Mình mong muốn 30 samples, ở đây nó ra 31 samples, trong khi ở ví dụ 5 nó ra tận 34 samples

III. Khi nào thì sử dụng cái Timer này?

  • Khi bạn phải thực hiện load test dạng open model, bạn control tỉ lệ đẩy tải theo thời gian.
  • JMeter sẽ tự tính toán thời gian delay thread để có thể giữ được con số arrival rate mà bạn mong muốn, tất nhiên là sẽ có sai số.
  • Thứ khác có thể giúp bạn đạt được điều tương tự là Open Model Thread Group
  • Điểm cần lưu ý:
    • Cái này có thể không đạt được con số mà mình set nếu như response time của server quá lớn. Ví dụ, mình setting target là 60 samples/min cho mỗi thread nhưng response time của mỗi request là 5s –> trong vòng 60s, mỗi thread chỉ kịp run 60/5 = 12 samples thôi.
    • Bạn nên setting số lượng thread lớn và không sử dụng option This thread only nếu bạn vẫn muốn đạt target đẩy tải, thay vào đó sử dụng All active threads in current thread group (shared). Như thế thì việc response time của request cao cũng không khiến thread bị delay vì nó sẽ dùng thread khác để run.
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments