Tất tần tật về JMeter Timers, hướng dẫn sử dụng JMeter Timers trong JMeter
- 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
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ấ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
Constant Throughput Timer
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.
Reviewed by David
on
tháng 9 24, 2024
Rating:












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