Throughput controller trong jmeter

Có 1 bạn hỏi mình vấn đề liên quan đến Throughput Controller nên mình có dịp ngồi đọc code của nó, tìm hiểu về công thức nên mình viết bài này để note lại kiến thức cho các bạn muốn tìm hiểu sâu. Đây là link document của JMeter để các bạn tiện reference.

Một vài điểm lưu ý:

  • Mặc dù nó tên là Throughput nhưng nó ko liên quan gì đến throughput (cái mà chúng ta nhìn thấy trong report)
  • Nó kiểm soát số lần thread đi qua các request nằm bên trong nó bằng 2 cách:
    • Số lượng chính xác
    • Số phần trăm (%)

I. Quản lý số lượng request chính xác

Giả sử bạn có 1 scenario, bạn muốn:

Homepage         : 1 request
Get List Product : 3 request
Production Detail: 5 request

Bạn sẽ tạo test plan như sau:

  • Homepage
    • Based on: Total Executions
    • Throughput: 1
  • Get List Product
    • Based on: Total Executions
    • Throughput: 3
  • Production Detail
    • Based on: Total Executions
    • Throughput: 5

Câu hỏi đặt ra là bạn sẽ setting cái Thread Group như thế nào? Bạn có thể sẽ setting như sau:

  • Threads = 1
  • Loop = 9 (vì 1 + 3 + 5 = 9)

Setting như trên không sai, nhưng thực ra chỉ cần số loop = 5 là đã đủ tạo ra được số request cần thiết. Hoặc là Threads=5, loop=1

Vì sao lại như vậy?

Vì mỗi lần run, JMeter sẽ ưu tiên run từ trên xuống dưới và nó đếm số lần run cho mỗi Throughput Controller.

Lần run đầu tiên (index=0)

Homepage: run --> số execution = 1 (đã đủ)
Get List Product: run --> số execution = 1 (chưa đủ)
Production Detail: run --> số execution = 1 (chưa đủ)

Lần run thứ 2 (index=1)

Get List Product: run --> số execution = 2 (chưa đủ)
Production Detail: run --> số execution = 2 (chưa đủ)

Lần run thứ 3 (index=2)

Get List Product: run --> số execution = 3 (đã đủ)
Production Detail: run --> số execution = 3 (chưa đủ)

Lần run thứ 4 (index=3)

Production Detail: run --> số execution = 4 (chưa đủ)

Lần run thứ 5 (index=4)

Production Detail: run --> số execution = 5 (đã đủ)

Sau lần run thứ 5 thì JMeter đã run đủ số request bạn cần, nếu bạn setting số loop nhiều hơn số request thì nó chỉ lãng phí thời gian chạy code của JMeter chứ ko có tác dụng gì. Tuy nhiên số thời gian nó lãng phí cũng rất ít, không đáng kể, nên bạn cũng đừng quá lo lắng.

II. Quản lý số lượng run bằng phần trăm (%)

Config của Throughput Controller như sau:

  • Homepage
    • Based on: Percent Executions
    • Throughput: 10%
  • Get List Product
    • Based on: Percent Executions
    • Throughput: 30%
  • Production Detail
    • Based on: Percent Executions
    • Throughput: 50%

Giả sử mình setting Thread Group như sau: Threads=1, loop=9, theo logic thông thường, chúng ta sẽ tính toán số lượng request như sau:

Homepage         : 10% x 9 = 0.9 request (có làm tròn lên 1 ko?)
Get List Product : 30% x 9 = 2.7 request (làm tròn thành 2 hay 3?)
Production Detail: 50% x 9 = 4.5 request (làm tròn thành 4 hay 5?)

Đây là kết quả thực tế khi run:

Homepage         : 1 request (0.9 --> làm tròn lên 1)
Get List Product : 3 request (2.7 --> làm tròn lên 3)
Production Detail: 4 request (4.5 --> làm tròn xuống 4)

Vì sao lại như vậy?

Ở kiểu phần trăm này, JMeter sẽ quyết định việc có run request nào dựa trên 1 công thức như sau:

(100.0 * executions + 50.0) / (iterations + 1) < percent;

Trong đó:

  • executions là số lần đã run của Throughput Controller (value= 0)
  • iterations là thứ tự vòng loop ở thời điểm hiện tại (value= 0)
  • percent là số % mình đã điền ở phía trên

Áp dụng công thức trên cho thằng Production Detail ta sẽ thấy như sau:

Nó sẽ run 4 lần, áp dụng công thức này cho HomepageGet List Product bạn cũng sẽ ra được kết quả tương tự. Và đây là kết quả thực tế sau khi run JMeter.

Mình có add thêm số loop bên cạnh để bạn tiện theo dõi Production Detail ${__jm__Thread Group__idx}. Lưu ý, số loop bằng đầu từ 0, nên trên hình bạn sẽ nhìn thấy Production Detail 1,3,5,7 chính là số loop 2,4,6,8 ở hình giải thích phía trên.

Nếu bạn thắc mắc muốn biết công thức trên mình lấy ở đâu thì mình lấy ở trong code của JMeter.

org.apache.jmeter.control.ThroughputController

III. Tổng kết

Đây là 1 cái controller tưởng là đơn giản nhưng có vẻ nó không đơn giản như logic thông thường mà chúng ta vẫn nghĩ, hi vọng là bạn đã hiểu và nắm vững để áp dụng vào performance test của bạn. Like nếu bạn thấy nó hữu ích hoặc bạn like dạo cũng được vì nó giúp mình thấy vui. haha

0 0 votes
Article Rating
Subscribe
Notify of
guest
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Duyet Pham
Duyet Pham
6 months ago

Cảm ơn anh