Tất tần tật về JMeter Timers, hướng dẫn sử dụng JMeter Timers trong JMeter

Tất tần tật về JMeter Timers, hướng dẫn sử dụng JMeter Timers trong JMeter

jmeter-timers


  • Tổng quan về bộ đếm thời gian JMeter 
  • Phạm vi và xử lý bộ tính giờ 
  • Giải thích về bộ tính giờ 
  • Chọn bộ hẹn giờ/ngôn ngữ nào 
  • Phần kết luận

Tổng quan về bộ đếm thời gian JMeter 

Mục đích của tất cả các phần tử “Timer” là tạm dừng JMeter Thread đại diện cho người dùng ảo trong một khoảng thời gian nhất định. Mục tiêu chính của việc sử dụng bộ tính giờ là mô phỏng “think time” của người dùng ảo. Trong thế giới của load testing, “think time” tượng trưng cho việc mô phỏng hành vi thực sự của người dùng khiến mọi người phải chờ đợi giữa các lần tương tác với ứng dụng web.


Tổng quan chi tiết về cách hoạt động của JMeter như sau:

- Khi Plan test được bắt đầu, JMeter sẽ khởi động một chuỗi cho mỗi người dùng ảo

- Mỗi luồng bắt đầu thực hiện các bộ lấy mẫu lộn ngược (hoặc theo Logic Controllers, nếu có) nhanh nhất có thể.

- Khi không còn bộ lấy mẫu nào để thực thi và không có vòng lặp nào để lặp lại luồng đang bị tắt.


Tính đến thời điểm này nó hoạt động rất tốt, nhưng phần được đánh dấu không có gì giống với thực tế trong trường hợp này. Người dùng trong đời thực không ngừng sử dụng ứng dụng web; họ cần một chút thời gian để xem nội dung được trả về, cộng thêm một chút thời gian để “think” về hành động tiếp theo và “think time” này cũng cần được mô phỏng chính xác. Điều quan trọng cần nhớ là toàn bộ ý tưởng của thử nghiệm tải là mô phỏng hành vi của người dùng thực càng gần càng tốt.


Think times có thể khác nhau. Ví dụ: nếu người dùng đang xem hình ảnh, họ sẽ mất vài giây giữa các hành động thực hiện (yêu cầu hình ảnh tiếp theo). Hoặc, ví dụ khác, Nếu người dùng trả lời một bài đăng trên diễn đàn, có thể mất vài phút để soạn phản hồi và số lượng yêu cầu trong khi thao tác nhập của người dùng sẽ ở mức tối thiểu (tức là bản nháp tự động lưu định kỳ) hoặc thậm chí bằng không.


Với tất cả những điều trên, có thể đưa ra 2 kết luận:

Cần phải sử dụng bộ hẹn giờ.

Không có phương thức hoặc giá trị thời think time được đề xuất vì think time có thể khác nhau tùy theo ứng dụng.

Trong bài đăng này, chúng tôi sẽ giới thiệu tất cả các bộ tính giờ có sẵn và giải thích chức năng của từng bộ tính giờ để bạn có thể dễ dàng chọn bộ tính giờ phù hợp nhất.

Phạm vi và xử lý bộ tính giờ

Giống như JMeter Assertions, JMeter Timers cũng có phạm vi của chúng, nhưng không giống như Assertions Timers, chúng được thực thi trước mỗi bộ lấy mẫu trong phạm vi của chúng. Nếu có nhiều hơn một bộ đếm thời gian trong phạm vi, tất cả các bộ tính giờ sẽ được xử lý trước khi việc lấy mẫu diễn ra. Ngoài ra, thời gian thực hiện bộ hẹn giờ không được ghi lại, vì vậy nếu Bộ hẹn giờ tạm dừng luồng trong 1 giây và thời gian thực hiện bộ lấy mẫu là 3 giây thì 3 giây sẽ được ghi lại làm thời gian thực hiện bộ lấy mẫu. Nếu bạn cũng cần ghi lại thời gian thực hiện Bộ hẹn giờ, bạn cần sử dụng Transaction Controller.


Cho hình dưới đây:


  • Bộ hẹn giờ A - chỉ áp dụng cho Bộ lấy mẫu A 
  • Bộ hẹn giờ B - áp dụng cho Bộ lấy mẫu A và Bộ lấy mẫu B 
  • Bộ hẹn giờ C - áp dụng cho Bộ lấy mẫu A, Bộ lấy mẫu B và Bộ lấy mẫu C 
  • Bộ định thời được thực thi trước khi thực hiện bộ lấy mẫu 
  • Thời gian thực hiện Bộ hẹn giờ không được thêm vào thời gian thực hiện lấy mẫu

Nếu cần chèn độ trễ sau bộ lấy mẫu, bạn có thể sử dụng bộ lấy mẫu Test Action sampler:

  • Không tạo ra kết quả mẫu (nó sẽ không xuất hiện trong báo cáo hoặc biểu đồ tải)
  • Có thể tạm dừng luồng trong một khoảng thời gian tĩnh hoặc ngẫu nhiên (xem hàm __Random())
  • Có thể được sử dụng làm bộ lấy mẫu gốc cho bất kỳ Bộ đếm thời gian JMeter nào nếu logic độ trễ của bạn phức tạp hơn think time tĩnh hoặc động

Giải thích về Timers

Theo phiên bản hiện tại của Apache JMeter (là 5.6), có sẵn các phần tử kiểm tra Hẹn giờ sau:

  • Hẹn giờ liên tục
  • Đồng hồ hẹn giờ ngẫu nhiên thống nhất
  • Bộ đếm thời gian ngẫu nhiên Gaussian
  • Hẹn giờ ngẫu nhiên Poisson
  • Hẹn giờ thông lượng không đổi
  • Hẹn giờ đồng bộ
  • Hẹn giờ BeanShell
  • Hẹn giờ BSF
  • Bộ định thời JSR223

Cá nhân tôi coi 2 Bộ đếm thời gian không đổi và Bộ đếm ngẫu nhiên thống nhất đầu tiên - đủ để đáp ứng 99% các tình huống thử nghiệm và khuyến khích bạn sử dụng chúng trong tập lệnh của mình. Tuy nhiên, nếu các yêu cầu mô phỏng thời gian suy nghĩ của bạn dựa trên các phân bố thống kê và toán học phức tạp hơn, bạn rất vui lòng làm quen với những yêu cầu khác.


Cấu hình ở trên sẽ thêm độ trễ 5 giây trước khi thực hiện từng bộ lấy mẫu, nằm trong phạm vi của Bộ đếm thời gian không đổi.

Bạn cũng có thể sử dụng Hàm hoặc Biến JMeter trong đầu vào “Độ trễ luồng”. Trong trường hợp đó bộ đếm thời gian sẽ ngừng ở trạng thái “Không đổi”.



Uniform Random Timer



Bộ đếm thời gian ngẫu nhiên thống nhất tạm dừng luồng theo hệ số:

- Giá trị giả ngẫu nhiên tiếp theo được phân phối đồng đều trong khoảng từ 0,0 (đã bao gồm) đến 1,0 (độc quyền)

- Nhân với “Độ trễ ngẫu nhiên tối đa”

- Cộng thêm “Bù đắp độ trễ liên tục”

Vì vậy, cấu hình mặc định là:

- Tối đa 100 độ trễ ngẫu nhiên

- và 0 Độ trễ liên tục

Nó sẽ tạm dừng các mẫu bị ảnh hưởng trong một số mili giây ngẫu nhiên trong phạm vi từ 0 đến 99 vì công thức sẽ có dạng  |0.X * 100 + 0| trong đó X có thể là một chữ số nằm trong khoảng từ 0 đến 9.


Gaussian Random Timer



Bộ đếm thời gian ngẫu nhiên Gaussian tính toán thời gian trễ của luồng bằng cách sử dụng cách tiếp cận giống như Bộ đếm thời gian ngẫu nhiên thống nhất, nhưng thay vì giá trị giả ngẫu nhiên được phân phối đồng đều trong phạm vi 0,0 - 0,9, phân phối bình thường (còn gọi là Gaussian) đang được sử dụng làm đối số đầu tiên cho công thức.

Có một số thuật toán để tạo ra các giá trị được phân phối chuẩn, trong phương pháp cực JMeter Marsaglia được sử dụng, phương pháp này lấy 2 giá trị ngẫu nhiên tiếp theo U và V trong phạm vi từ -1 đến 1 cho đến khi đáp ứng điều kiện S = U2 + V2 > 1. Khi S được xác định, nó được sử dụng trong công thức



để trả về giá trị phân phối Gaussian (“thông thường”) giả ngẫu nhiên tiếp theo. Lần đầu tiên phương thức được gọi nó trả về X, lần thứ hai nó sẽ trả về Y, lần thứ ba nó bắt đầu lại và sẽ trả về X mới, v.v.

Vì vậy, với cấu hình Bộ đếm thời gian ngẫu nhiên Gaussian mặc định:

- Độ lệch - 100

- Bù độ trễ không đổi - 300

Giá trị “Sleep” sẽ là |X (hoặc Y) * 100 + 300| vì vậy các luồng sẽ bị tạm dừng trong khung thời gian từ 1 đến ~600 mili giây.


Poisson Random Timer



Bộ đếm thời gian ngẫu nhiên Poisson sử dụng số ngẫu nhiên tiếp theo từ Phân phối Poisson bằng tham số λ do người dùng xác định là “Lambda” (tính bằng mili giây) cộng với “Độ lệch độ trễ không đổi”).

Nếu bạn quan tâm đến việc tạo số ngẫu nhiên Poisson, bạn có thể đọc bài viết Wikipedia đã nói ở trên và Tạo các giá trị ngẫu nhiên Poisson của John D. Cook để biết ý tưởng về cách tính giá trị độ trễ. Ngoài ra, vì JMeter là một phần mềm nguồn mở nên bạn luôn có thể tải xuống bản phân phối mã nguồn tương ứng với phiên bản JMeter của mình (chúng tôi khuyên bạn nên sử dụng phiên bản JMeter mới nhất nếu có thể vì nó chứa các cải tiến, sửa lỗi, cải tiến hiệu suất, nhãn hiệu mới nhất. các phần tử thử nghiệm mới, v.v. Nguồn lớp Bộ đếm thời gian ngẫu nhiên Poisson có tại đây.

Khi sử dụng các tham số mặc định (100 ms dưới dạng Lambda và 300 ms dưới dạng Offset độ trễ không đổi), Bộ đếm thời gian ngẫu nhiên Poisson sẽ tạo ra độ trễ trong phạm vi từ ~375 đến ~425 mili giây.

Như bạn có thể thấy, phân phối giá trị ngẫu nhiên do Bộ đếm thời gian ngẫu nhiên Poisson tạo ra (các giá trị JMeter mặc định đã cho) thấp hơn Bộ đếm thời gian ngẫu nhiên thống nhất và Bộ đếm thời gian ngẫu nhiên Gaussian.


Synchronizing Timer



Bộ hẹn giờ đồng bộ hóa được mô tả chi tiết trong bài viết Sử dụng Bộ hẹn giờ đồng bộ hóa JMeter của chúng tôi. Nói tóm lại, nó tạm dừng tất cả các luồng trong phạm vi của nó trừ khi số của chúng không bằng hoặc lớn hơn số được chỉ định trong đầu vào “Số người dùng được mô phỏng để nhóm theo”. Trong JMeter 5.6 hiện tại, có thể đặt giá trị thời gian chờ để thử nghiệm có thể tiếp tục ngay cả khi không đạt được số lượng luồng mong muốn để bắt đầu.

Constant Throughput Timer



Bộ đếm thời gian thông lượng không đổi có thể tạm dừng các luồng để có thể triển khai kịch bản hướng đến mục tiêu. Kịch bản hướng đến mục tiêu là loại thử nghiệm tải trong đó mục tiêu không phải là mô phỏng X người dùng đồng thời mà là X yêu cầu mỗi giây. Bộ đếm thời gian thông lượng không đổi hoạt động chính xác ở mức “phút”, vì vậy hãy đảm bảo rằng bài kiểm tra của bạn kéo dài đủ lâu (1 phút trở lên) và bạn sử dụng thời gian tăng tốc hợp lý để tránh tăng đột biến (trừ khi bạn đang thực hiện một số dạng căng thẳng thử nghiệm). Cách sử dụng Bộ đếm thời gian không đổi thông lượng của JMeter.

Beanshell, BSF and JSR223 Timers

3 bộ định thời cuối cùng trong bài viết này là bộ định thời dựa trên tập lệnh. Điều đó có nghĩa là bạn sẽ cần phải tự mình triển khai logic trễ luồng bằng một trong các ngôn ngữ tập lệnh được hỗ trợ. Tuy nhiên, thông thường, điều này là không bắt buộc, nếu bạn cần xác định thời gian suy nghĩ dựa trên một số thuật toán duy nhất hiện không được JMeter cung cấp, bạn có thể tạo cách triển khai thuật toán của riêng mình bằng cách sử dụng một trong các bộ tính giờ này. JMeter sẵn có hỗ trợ các ngôn ngữ Beanshell, JavaScript và JEXL. Bạn có thể thêm các lọ có liên quan để hỗ trợ các ngôn ngữ khác. 

Nói tóm lại, để sử dụng bộ hẹn giờ dựa trên tập lệnh, bạn cần:

- Thực hiện tính toán độ trễ bằng thuật toán của riêng bạn

- “Yêu cầu” các luồng ngủ trong một khoảng thời gian được tính toán bằng cách sử dụng câu lệnh return, trả về giá trị được tính toán (bạn cũng có thể thực hiện “ngủ” trực tiếp trong bộ hẹn giờ, tuy nhiên, điều này không được khuyến khích lắm)

Bộ hẹn giờ nào/ngôn ngữ nào

Bạn nên sử dụng các phần tử kiểm tra JSR223 và Groovy làm ngôn ngữ cho bất kỳ tập lệnh nào vì tập lệnh Groovy được định cấu hình đúng cách đang được sử dụng trong JSR223, Trình lấy mẫu có thể nhanh gần như Java trong khi Beanshell và JavaScript cần được diễn giải, điều này gây ra một số chi phí về hiệu năng . Xem Beanshell vs JSR223 vs Java JMeter Scripting: Hiệu suất giảm mà bạn đang chờ đợi! để biết giải thích, hướng dẫn về cách thêm hỗ trợ công cụ tạo tập lệnh “Groovy” cho JMeter và Beanshell so với điểm chuẩn Groovy của JSR223+.

Các biến được xác định trước của JMeter

Bộ tính giờ dựa trên tập lệnh cung cấp các biến được xác định trước sau:

  • vars 
  • props
  • log
  • prev
  • ctx

Phần kết luận

Đây chủ yếu là về cách làm cho các thử nghiệm của bạn gần hơn với hành vi của người dùng thực. Nếu bạn đang tìm kiếm thêm đề xuất về cách làm cho các bài kiểm tra trông thực tế hơn từ góc độ trình duyệt web, bạn có thể đọc bài viết này.

Tất tần tật về JMeter Timers, hướng dẫn sử dụng JMeter Timers trong JMeter Tất tần tật về JMeter Timers, hướng dẫn sử dụng JMeter Timers trong JMeter Reviewed by David on tháng 9 24, 2024 Rating: 5

Không có nhận xét nào:

Được tạo bởi Blogger.