Apache JMeter: Vũ Khí Đánh Giá Hiệu Suất và Tải Cho Ứng Dụng
I. Giới thiệu về Apache JMeter
Apache JMeter là một công cụ mã nguồn mở, được phát triển bởi Apache Software Foundation. Apache JMeter được sử dụng để kiểm thử hiệu suất và độ chịu tải của các ứng dụng web, API, cơ sở dữ liệu và nhiều giao thức khác.
Ban đầu, JMeter được thiết kế cho các ứng dụng web, nhưng đã trở nên phổ biến trong cộng đồng kiểm thử phần mềm sau khi mở rộng thành công cụ miễn phí để hỗ trợ nhiều loại dịch vụ khác.
II. Tính năng chính của Apache JMeter
1. Kiểm thử tải (Load Testing)
Mô phỏng hàng nghìn người dùng ảo truy cập vào hệ thống cùng lúc để kiểm tra khả năng chịu tải.
2. Hỗ trợ nhiều giao thức
JMeter đo lường thời gian phản hồi, throughput, sử dụng tài nguyên và các chỉ số khác dưới các điều kiện khác nhau, trong đó các phương thức được hỗ trợ như:
- HTTP, HTTPS (Web và Mobile)
- SOAP, REST (API)
- FTP, TCP, SMTP, IMAP (Email)
- JDBC (Cơ sở dữ liệu), WebSocket, JMS, LDAP,…
3. Đa luồng (Multithreading)
Cho phép thực thi đồng thời nhiều kịch bản kiểm thử khác nhau bằng các luồng riêng biệt.
4. Báo cáo chi tiết
Cung cấp báo cáo đồ họa và số liệu chi tiết về kết quả kiểm thử như: thời gian phản hồi, thông lượng, số lượng lỗi, và các thống kê quan trọng khác.
5. Dễ dàng mở rộng
Có thể thêm các plugin mở rộng để tăng cường chức năng và tích hợp tốt với nhiều công cụ DevOps và CI/CD.
III. Kiến trúc của Apache JMeter
1. Test Plan
Là cấu trúc kiểm thử của JMeter, bao gồm các yếu tố kiểm thử như Thread Group, Samplers, Listeners, và các cấu hình khác.
2. Thread Group
Là thành phần mô phỏng số lượng người dùng ảo (threads) thực thi các kịch bản kiểm thử.
3. Samplers
Được sử dụng để gửi các yêu cầu (requests) đến máy chủ trong quá trình kiểm thử, hỗ trợ nhiều loại giao thức như HTTP, FTP, JDBC,…
4. Timers
Cho phép thêm các khoảng thời gian chờ giữa các yêu cầu, giúp mô phỏng hành vi thực tế của người dùng.
5. Assertions
Đảm bảo rằng kết quả phản hồi từ máy chủ là đúng, giúp kiểm tra tính chính xác của dữ liệu phản hồi.
6. Listeners
Thành phần thu thập dữ liệu và hiển thị kết quả của kiểm thử bằng đồ thị hoặc báo cáo.
IV. Hạn chế của Apache JMeter
1. Giao diện người dùng (UI)
Mặc dù giao diện dễ sử dụng, nhưng JMeter đôi khi gặp giới hạn trong việc xử lý các kịch bản kiểm thử phức tạp với giao diện trực quan.
2. Hiệu suất hạn chế khi kiểm thử lớn
Khi kiểm thử với số lượng người dùng lớn (hàng trăm ngàn), JMeter có thể gặp khó khăn do tiêu tốn tài nguyên máy tính (CPU và RAM).
3. Không hỗ trợ kiểm thử giao diện người dùng
JMeter chủ yếu kiểm thử backend, không hỗ trợ tốt kiểm thử các ứng dụng có giao diện người dùng.
V. Ứng dụng thực tế của Apache JMeter
Đo tải cho website: Giả lập hàng ngàn người dùng truy cập vào trang web cùng lúc để đánh giá tốc độ phản hồi và khả năng chịu tải của hệ thống.
Đánh giá API: Gửi hàng loạt các yêu cầu đến API để kiểm tra độ ổn định và thời gian phản hồi.
Kiểm thử cơ sở dữ liệu: Đánh giá hiệu suất của các truy vấn SQL hoặc các hoạt động với cơ sở dữ liệu.
VI. Cài đặt Apache JMeter
Apache JMeter viết bằng Java nên muốn chạy JMeter trước hết máy của bạn phải cài JRE hoặc JDK.
Truy cập trang web: http://jmeter.apache.org để download Apache JMeter.
Giải nén file zip vừa tải về.
Truy cập folder bin → click đúp vào file ApacheJMeter.jar để chạy apache JMeter.
Giao diện của ứng dụng.
VII. Hướng dẫn kiểm thử chịu tải của Google
1. Tạo Thread Group
Chuột phải vào Test Plan, chọn Add → Threads (Users) → Thread Group.
Các tham số trong Thread Group:
Number of Threads (users)
Số lượng luồng sẽ mô phỏng số lượng người dùng ảo thực hiện các yêu cầu đến máy chủ cùng một lúc.
Ramp-Up Period (seconds)
Thời gian (tính bằng giây) để tất cả các luồng khởi động hoàn toàn.
Ví dụ: Nếu có 10 threads và thời gian Ramp-Up là 100 giây, thì cứ mỗi 10 giây sẽ khởi động 1 thread.
Loop Count
Số lần mỗi luồng sẽ thực hiện toàn bộ các sampler trong Thread Group.
Nếu chọn Forever, JMeter sẽ lặp vô hạn cho đến khi bạn dừng test.
Scheduler
Cho phép kích hoạt bộ lập lịch (scheduler) để xác định thời gian bắt đầu và thời gian kết thúc của Thread Group.
Duration (seconds)
Khi kích hoạt Scheduler, đây là khoảng thời gian mà Thread Group sẽ chạy, tính từ khi bắt đầu.
Startup Delay (seconds)
Độ trễ (tính bằng giây) trước khi bắt đầu Thread Group sau khi test bắt đầu.
Action to be taken after a sampler error
Hành động khi gặp lỗi từ sampler:
- Continue: Tiếp tục chạy luồng.
- Start Next Thread Loop: Bỏ qua sampler và bắt đầu lại từ đầu luồng.
- Stop Thread, Test, Test Now: Dừng luồng, toàn bộ test hoặc dừng tất cả ngay lập tức khi luồng đang chạy khi gặp lỗi.
Ở ví dụ test Google lần này sẽ có 10 user thực hiện request trong cùng 1 giây và thực hiện 1 lần duy nhất.
2. Tạo request
Tạo HTTP request để gởi tới Google. Nếu thực hiện với database thì dùng JDBC Request, mail là SMTP request,…
Các tham số HTTP Request:
Server Name or IP
Tên máy chủ hoặc địa chỉ IP của máy chủ web mà bạn muốn gửi yêu cầu HTTP đến.
Ví dụ: www.example.com hoặc 192.168.1.1
Port Number
Số cổng mà máy chủ web lắng nghe các yêu cầu HTTP. Nếu không nhập, mặc định sẽ là 80 cho HTTP và 443 cho HTTPS.
Protocol
Giao thức sử dụng cho yêu cầu HTTP, mặc định là HTTP. Bạn cũng có thể sử dụng HTTPS nếu kết nối qua SSL.
Method
Phương thức HTTP được sử dụng để gửi yêu cầu. Các tùy chọn bao gồm:
- GET: Lấy tài nguyên từ máy chủ.
- POST: Gửi dữ liệu tới máy chủ.
- PUT: Tải lên tài nguyên mới hoặc thay thế tài nguyên hiện có.
- DELETE: Xóa tài nguyên.
- HEAD, OPTIONS, PATCH,…
Path
Đường dẫn của tài nguyên trên máy chủ mà bạn yêu cầu.
Ví dụ: /api/v1/user hoặc /login
Content Encoding
Loại mã hóa nội dung được sử dụng, thường là UTF-8. Thường sử dụng khi gửi dữ liệu (ví dụ: với phương thức POST).
Parameters
Danh sách các tham số được gửi kèm trong yêu cầu HTTP, thường sử dụng cho phương thức GET hoặc POST. Gồm cột Name và Value.
Các tham số này sẽ được thêm vào cuối URL nếu sử dụng phương thức GET, hoặc trong body nếu sử dụng POST.
Body Data
Dữ liệu gửi trong phần body của yêu cầu HTTP (thường dùng POST). Điều này hữu ích khi muốn gửi dữ liệu JSON, XML hoặc các định dạng khác.
Files Upload
Sử dụng khi muốn tải lên các tệp tin trong yêu cầu HTTP.
3. Thêm Listener để hiển thị kết quả
Hiển thị kết quả của tất cả các thread.
Chuột phải vào Thread Group → Add → Listener → Summary Report.
Hiển thị kết quả của từng thread
Thực hiện chạy test
Kết quả:
Ví dụ:
- Số lượng request: 10.
- Average: thời gian trung bình mà Google phản hồi lại là 325 ms.
- Min: thời gian nhanh nhất mà Google phản hồi lại là 283 ms.
- Max: thời gian lâu nhất mà Google phản hồi lại là 379 ms.
- Error %: số request lỗi là 0%.
Xóa kết quả đi và chạy lại với Number of Threads (Users) = 100, tức là 100 người thực hiện load trang Google cùng 1 lúc.
Kết quả:
Khi có 100 người dùng cùng gửi yêu cầu (request) cùng lúc sẽ mất nhiều thời gian hơn để phản hồi từng yêu cầu so với khi chỉ có 10 người dùng gửi yêu cầu cùng lúc.
VIII. Kết luận
Apache JMeter là một công cụ tuyệt vời và mạnh mẽ cho việc kiểm thử hiệu suất và chịu tải của nhiều loại ứng dụng khác nhau. Nó phù hợp cho các tổ chức muốn đánh giá khả năng của hệ thống mà không cần tốn chi phí cao.
Dù còn một số hạn chế, nhưng với sự mở rộng không ngừng và cộng đồng hỗ trợ lớn, JMeter vẫn là một lựa chọn ưu tiên cho nhiều dự án kiểm thử.
Để tìm hiểu thêm về Apache Jmeter. Bạn có thể tham khảo thêm ở trang chủ hoặc bạn có thể dùng ChatGPT để tìm hiểu thêm (tìm hiểu thêm về ChatGPT).
Nguyễn Đặng Nhật Minh Developer |