NỘI DUNG BÀI HỌC
✅ Test Fragment
✅ Module Controller
✅ Simple Controller
✅ Transaction Controller
✅ Random Controller
✅ Throughput Controller
✅ Parallel Controller
✅ If Controller
✅ Loop Controller
✅ While Controller
1. Giới thiệu
Trong JMeter, Controller quyết định cách Samplers (request) được thực thi trong Thread Group.
-
Samplers: gửi request (HTTP, JDBC, Kafka...).
-
Controllers: định hướng luồng chạy (logic, số lần lặp, điều kiện...).
Controller chia làm hai loại chính:
-
Logic Controllers → điều khiển luồng logic (if, loop, switch...).
-
Flow Controllers → điều khiển số lần chạy, thứ tự, grouping.
2. Các loại Controller quan trọng trong JMeter
2.1 Test Fragment

-
Định nghĩa:
Thread Group → Add → Test Elements → Test Fragment
Là phần tử đặc biệt trong JMeter, dùng để tạo module tái sử dụng.
Không thể chạy độc lập, thường dùng với Include Controller hoặc Module Controller. -
Cách hoạt động:
Khi được tham chiếu, nội dung trong Test Fragment sẽ được chèn vào luồng chạy chính. -
Mục đích sử dụng:
-
Tách kịch bản lớn thành phần nhỏ.
-
Tái sử dụng nhiều lần, dễ quản lý.
-
-
Ví dụ:
Có Test Fragment Login Flow (HTTP Request → Parse token).
Trong kịch bản UserJourney.jmx, dùng Module Controller để gọi Login Flow trước khi chạy các API khác.
2.2 Module Controller

-
Định nghĩa:
Thread Group → Add → Logic Controller → Module Controller
Cho phép gọi lại một Controller hoặc Test Fragment đã có. -
Cách hoạt động:
Không chứa sampler, chỉ điều hướng tới module được chọn. -
Mục đích sử dụng:
-
Tái sử dụng flow đã định nghĩa.
-
Tránh lặp code (copy-paste).
-
-
Ví dụ:
Có module Login và Logout.-
Thread Group A: Gọi Login → Test API A → Logout.
-
Thread Group B: Gọi Login → Test API B → Logout.
-
2.3 Simple Controller

-
Định nghĩa:
Thread Group → Add → Logic Controller → Simple Controller
Controller cơ bản, gom nhóm sampler hoặc controller con. -
Cách hoạt động:
Không thay đổi logic chạy, chỉ grouping. -
Mục đích sử dụng:
Làm kịch bản gọn gàng, dễ quản lý. -
Ví dụ:
Gom toàn bộ request của flow User Profile (GetInfo, UpdateInfo, UploadAvatar) vào 1 Simple Controller.
2.4 Transaction Controller

-
Định nghĩa:
Thread Group → Add → Logic Controller → Transaction Controller
Gom nhiều sampler thành 1 transaction để đo tổng thời gian. -
Cách hoạt động:
-
Ghi kết quả từng sampler con.
-
Hoặc gộp thành 1 dòng duy nhất (parent sample).
-
-
Mục đích sử dụng:
-
Đo end-to-end performance của flow.
-
Đánh giá trải nghiệm người dùng.
-
Tuỳ chọn quan trọng:
1. Generate parent sample
-
Không chọn → hiển thị từng sampler con.
-
Chọn → tạo sample cha duy nhất, đại diện toàn bộ transaction.
2. Include duration of timer and pre-/post-processors
-
Bật → tính cả timer delay, pre/post-processors.
-
Tắt → chỉ tính sampler chính.
Ví dụ:
Transaction Controller “Checkout Flow” bao gồm:
-
Login (HTTP Request)
-
Search Product (HTTP Request)
-
Add to Cart (HTTP Request)
-
Checkout (HTTP Request)
-
Bật Generate parent sample → Báo cáo hiển thị một dòng duy nhất “Checkout Flow” với tổng thời gian của 4 bước.
-
Bật thêm Include duration of timer… → JMeter sẽ tính cả thời gian chờ (think-time) và xử lý bổ sung (parse token, header manipulation) vào tổng thời gian checkout.
2.5 Random Controller

Định nghĩa: Thread Group → Add → Logic Controller → Random Controller
Random Controller cho phép chạy các sampler con theo thứ tự ngẫu nhiên thay vì tuần tự như mặc định.
Cách hoạt động:
-
Ở mỗi vòng lặp của Thread Group, Random Controller sẽ chọn 1 sampler hoặc controller con bất kỳ trong danh sách để thực thi.
Trường hợp tick "Ignore sub-controller blocks":
👉 Random Controller sẽ bỏ qua grouping và chọn trực tiếp sampler con (Request 1, Request 2, Request 3…) để chạy.
✅ Nói cách khác:
-
Không tick → Random theo block (giữ nguyên grouping).
-
Tick → Random trực tiếp theo sampler con (bỏ grouping).
Mục đích sử dụng:
-
Mô phỏng hành vi người dùng không theo thứ tự, ví dụ:
-
Người dùng có thể chọn ngẫu nhiên giữa nhiều thao tác.
-
Các request được gửi đi trong một chuỗi kịch bản nhưng theo thứ tự bất định.
-
-
-
Ví dụ minh họa
Trường hợp không tick "Ignore sub-controller blocks":
👉 Random Controller sẽ chọn Simple Controller-1 hoặc Simple Controller-2. Nếu chọn Simple Controller-1, thì cả 1.Dashboard và 2. Products sẽ chạy theo thứ tự.
Trường hợp tick "Ignore sub-controller blocks":
👉 Random Controller sẽ bỏ qua grouping và chọn trực tiếp 1. Dashboard, 2. Products hoặc 3. Orders để chạy.
-
2.6 Throughput Controller

Định nghĩa: Thread Group → Add → Logic Controller → Throughput Controller
Throughput Controller cho phép bạn kiểm soát tần suất thực thi của các sampler hoặc controller con.
Bạn có thể xác định tỷ lệ phần trăm (%) hoặc số lần cụ thể mà sampler con sẽ được chạy trong suốt quá trình test.
Cách hoạt động:
Throughput Controller có 2 chế độ hoạt động chính:
-
Percentage Executions (Tỷ lệ phần trăm thực thi):
-
Cho phép bạn định nghĩa % số lần sampler con sẽ chạy trong tổng số lần lặp.
-
Ví dụ:
-
Nếu đặt 30%, nghĩa là trong 10 lần lặp chỉ có khoảng 3 lần sampler con được thực thi.
-
-
-
Total Executions (Số lần thực thi tuyệt đối):
-
Cho phép bạn xác định số lần cố định mà sampler con sẽ chạy.
-
Ví dụ:
-
Nếu đặt 5, thì sampler con chỉ chạy đúng 5 lần trong toàn bộ test, bất kể số thread hay vòng lặp.
-
-
Mục đích sử dụng:
-
Giúp mô phỏng chính xác phân phối thực tế của traffic giữa các tính năng.
-
Thay vì tất cả người dùng đều thực hiện cùng 1 hành động, bạn có thể phân phối hành động theo tỉ lệ giống như trong thực tế.
-
Ví dụ trong ứng dụng thương mại điện tử:
-
70% người dùng sẽ Search sản phẩm.
-
20% người dùng sẽ Thêm vào giỏ hàng.
-
10% người dùng sẽ Thanh toán.
-
Điều này giúp test phản ánh hành vi thực tế thay vì phân phối đều tất cả thao tác.
📌 Lưu ý quan trọng:
-
Throughput Controller chỉ áp dụng trong phạm vi Thread Group hoặc Controller cha của nó.
-
Nếu dùng Percentage Executions, kết quả phân phối có thể dao động đôi chút do tính ngẫu nhiên, nhưng sẽ xấp xỉ tỷ lệ mong muốn.
Nếu muốn phân phối chính xác hơn, bạn có thể kết hợp với Constant Throughput Timer để điều chỉnh tốc độ gửi request theo thời gian.
Option Per User (Click Per User)
Trong cấu hình Throughput Controller có option Per User (còn gọi là Click Per User).
Ý nghĩa:
-
Không tick (mặc định):
-
Số lần (hoặc %) được tính trên toàn bộ Thread Group.
-
Ví dụ: đặt 10 executions, Thread Group có 5 users → cả nhóm chỉ chạy tổng cộng 10 lần.
-
-
Tick Per User:
-
Số lần (hoặc %) được tính riêng cho từng user.
-
Ví dụ: đặt 10 executions, Thread Group có 5 users → mỗi user chạy 10 lần, tổng cộng 50 lần.
-
Tác động trong thực tế:
-
Không tick → phù hợp khi muốn giới hạn tổng tải (total traffic) của nhóm test.
-
Tick → phù hợp khi muốn mỗi người dùng đều có hành vi giống nhau theo quota định sẵn.
✅ Ví dụ:
Cấu hình Throughput Controller = 20 executions, Thread Group = 10 users, Loop Count = 1.
-
-
Không tick Per User → tổng cộng chỉ 20 request được chạy trong cả nhóm 10 users.
-
Tick Per User → mỗi user chạy 20 request → tổng cộng 200 request.
-
📌 Lưu ý :
-
Thực tế trong sử dụng thì rất ít khi chúng ta chọn option này. Hầu hết chỉ tính trên tổng request của cả Thread
2.7 Parallel Controller (Plugin)

Định nghĩa: Thread Group → Add → Logic Controller → Parallel Controller
-
Parallel Controller là một Logic Controller có trong JMeter Plugins.
-
Nó cho phép chạy các sampler con song song trong cùng một thread, thay vì tuần tự.
-
Rất hữu ích để mô phỏng các tình huống client gửi nhiều request đồng thời, như khi trình duyệt tải tài nguyên web.
Cách hoạt động:
-
Bình thường trong JMeter, các sampler bên trong controller sẽ chạy theo thứ tự tuần tự.
-
Với Parallel Controller, các sampler bên trong sẽ được gửi song song trong cùng một thread.
-
Điều này giúp mô phỏng được đúng hành vi AJAX, tải nhiều resource đồng thời, hoặc nhiều API được gọi cùng lúc.
Mục đích sử dụng:
-
Mô phỏng hành vi người dùng thực tế khi một ứng dụng/web không gửi request tuần tự, mà gửi nhiều request đồng thời.
-
Giúp test chính xác hơn performance của hệ thống trong điều kiện thực tế.
-
Tái hiện hành vi browser rendering:
-
Người dùng mở 1 trang → trình duyệt gọi song song API lấy dữ liệu, tải JS, CSS, hình ảnh.
-
Các Option trong bzm - Parallel Controller(Thông thường chúng ta để cấu hình mặc định là có thể đáp ứng được hầu hết các trường hợp trong thực tế)
1. Generate parent sample
-
Ý nghĩa:
-
Nếu không tick: JMeter chỉ hiển thị kết quả của từng sampler con (CSS, JS, API…) trong báo cáo.
-
Nếu tick: JMeter sẽ tạo thêm một sample cha duy nhất, đại diện cho toàn bộ transaction song song.
-
-
Tác động:
-
Giúp dễ dàng đo tổng thời gian end-to-end cho tất cả sampler chạy song song.
-
Tuy nhiên, nếu chỉ bật option này mà không bật hiển thị chi tiết, bạn sẽ mất log riêng lẻ của từng sampler con.
-
2. Limit max thread number
-
Ý nghĩa:
-
Giới hạn số lượng thread song song tối đa có thể chạy bên trong Parallel Controller.
-
Nếu không tick: tất cả sampler con sẽ chạy đồng thời.
-
Nếu tick, bạn có thể cấu hình số Max threads (ô bên phải).
-
-
Ví dụ:
-
Parallel Controller có 10 sampler.
-
Nếu
Max threads = 5
→ chỉ 5 sampler chạy đồng thời, 5 sampler còn lại sẽ chờ đến khi có slot trống.
-
3. Max threads (number field)
-
Ý nghĩa:
-
Đây là giá trị số khi bạn tick Limit max thread number.
-
Xác định chính xác bao nhiêu request tối đa được gửi cùng lúc.
-
-
Ví dụ:
-
Max threads = 3 → nếu bạn có 6 request con, JMeter sẽ gửi 3 request đầu, khi 1 trong số đó hoàn thành thì request tiếp theo mới được gửi, đảm bảo không vượt quá 3 thread đồng thời
-
4. So sánh
-
Không dùng Parallel Controller → tổng thời gian = CSS + JS + Image + API.
-
Dùng Parallel Controller → tổng thời gian ≈ request lâu nhất trong nhóm (giống trình duyệt tải song song).