1. Xây dựng kịch bản JMeter cho nghiệp vụ thực tế
Giả sử cần kiểm thử hiệu năng cho chức năng tra cứu dự báo thời tiết theo thành phố. Quy trình bắt đầu từ việc phân tích luồng yêu cầu HTTP qua công cụ bắt gói (ví dụ: Fiddler hoặc trình phát triển trình duyệt), sau đó xác định các endpoint cốt lõi:
- Lấy mã thành phố:
GET http://toy1.weather.com.cn/search?cityname=Hà Nội - Lấy dữ liệu thời tiết chi tiết:
GET http://www.weather.com.cn/weather1d/101010100.shtml
Các bước triển khai trong JMeter:
- Tham số hóa dữ liệu: Sử dụng User Defined Variables hoặc CSV Data Set Config để tải danh sách thành phố từ file CSV (ví dụ:
cities.csvchứa các giá trịHà Nội,Đà Nẵng,Hồ Chí Minh). - Tạo yêu cầu HTTP đầu tiên: Thiết lập HTTP Request Sampler trỏ đến endpoint tìm kiếm mã thành phố, đảm bảo thiết lập Content encoding là
UTF-8để tránh lỗi mã hóa. - Bổ sung thành phần hỗ trợ:
- HTTP Header Manager để thêm
User-AgentvàAccept: application/json. - Response Assertion kiểm tra mã trạng thái
200và chuỗi"[{"trong nội dung phản hồi. - View Results Tree để gỡ lỗi trực quan.
- HTTP Header Manager để thêm
- Trích xuất mã thành phố: Dùng JSON Extractor (nếu API trả về JSON) hoặc Regular Expression Extractor để lấy giá trị
refhoặccityidtừ phản hồi — ví dụ biểu thức chính quy:"ref":"([^"]+)", lưu vào biếncityId. - Xây dựng yêu cầu thứ hai: Tạo một HTTP Request Sampler mới, thay thế phần đường dẫn bằng giá trị biến
${cityId}, ví dụ:http://www.weather.com.cn/weather1d/${cityId}.shtml.
2. Thiết lập môi trường thực thi
Chế độ không giao diện (CLI)
Để giảm tiêu thụ tài nguyên và hỗ trợ chạy tự động, nên ưu tiên chế độ dòng lệnh:
jmeter -n -t ./testplans/weather-test.jmx -l ./results/weather-result.jtl -e -o ./reports/weather-html
Các tham số phổ biến:
-n: Chạy ở chế độ non-GUI-t: Chỉ định tệp kịch bản.jmx-l: Ghi kết quả vào tệp nhật ký.jtl-e -o: Tự động sinh báo cáo HTML sau khi chạy xong
Chạy phân tán (Distributed Testing)
Khi cần mô phỏng hàng nghìn người dùng đồng thời:
- Cấu hình máy chủ (slave): Chạy
jmeter-server.bat(Windows) hoặcjmeter-server(Linux/macOS). - Cập nhật
jmeter.propertiestrên máy điều khiển (master):
remote_hosts=192.168.1.100:1099,192.168.1.101:1099 - Khởi chạy từ master với tùy chọn
-r:
jmeter -n -t weather-test.jmx -r -l dist-result.jtl
3. Hiểu sâu về luồng xử lý và phạm vi thành phần
JMeter thực thi các thành phần theo thứ tự cố định:
- Config Elements (ví dụ: CSV Data Set Config, HTTP Header Manager)
- Pre-Processors (ví dụ: JSR223 PreProcessor)
- Timers (giới thiệu độ trễ giữa các yêu cầu)
- Samplers (yêu cầu HTTP, JDBC…)
- Post-Processors (trích xuất dữ liệu từ phản hồi)
- Assertions (kiểm tra tính đúng đắn của phản hồi)
- Listeners (hiển thị/ghi kết quả)
Mỗi thành phần có phạm vi áp dụng (scope) xác định bởi vị trí trong cây kế hoạch kiểm thử — ví dụ: HTTP Header Manager đặt dưới một Thread Group sẽ ảnh hưởng tới tất cả HTTP Samplers trong nhóm đó, nhưng không ảnh hưởng tới các nhóm khác.
4. Các thành phần then chốt
Thread Group
- Ramp-Up Period: Thời gian (giây) để tăng dần số luồng từ 0 lên giá trị cấu hình.
- Loop Count: Số lần lặp mỗi luồng thực hiện toàn bộ kịch bản.
- Thread Properties: Cài đặt xử lý lỗi khi sampler thất bại — lựa chọn Stop Thread giúp cô lập lỗi mà không làm gián đoạn toàn bộ test.
HTTP Request Defaults & HTTP Header Manager
Dùng để định nghĩa các giá trị mặc định chung (host, port, protocol) và tiêu đề HTTP tái sử dụng, giảm lặp lại trong từng sampler.
JSON Extractor
Ưu tiên hơn Regular Expression Extractor khi làm việc với API trả về JSON — cấu hình đơn giản, ổn định và dễ bảo trì. Ví dụ trích xuất cityid từ phản hồi:
JSON Path Expressions: $..ref
Variable Names: targetCityId
JSR223 PostProcessor (Groovy)
Thay thế BeanShell bằng Groovy để cải thiện hiệu năng và khả năng tương thích. Ví dụ log giá trị biến đã trích xuất:
log.info("Extracted city ID: " + vars.get("targetCityId"));
5. Báo cáo hiệu năng
Sau khi chạy xong, sử dụng các listener để phân tích:
- Summary Report: Hiển thị nhanh các chỉ số cơ bản như Average Response Time, Error %, Throughput.
- Aggregate Report: Cung cấp thống kê mở rộng như độ lệch chuẩn (Std. Dev.), thời gian tối thiểu/tối đa, và phân bố phần trăm (90% Line).
- Response Times Over Time: Biểu đồ xu hướng thời gian phản hồi theo thời gian chạy.