# JMeter Là Gì? Cài Đặt & Chạy Test Đầu Tiên

> Hồi mới đụng vào kiểm thử hiệu năng, học viên của tôi hay hỏi cùng một câu: bắt đầu từ đâu cho đỡ ngợp? 🙂 Câu trả lời quen thuộc của tôi luôn là JMeter — công cụ miễn phí, phổ biến và đủ nhẹ để người mới thực hành. Bài này tôi sẽ đi từ jmeter là gì, cách cài đặt, tới chạy bài test đầu tiên trên một API thật.

- **URL canonical**: https://itlearn.vn/blog/jmeter-la-gi
- **Published**: 2026-07-14T11:00:00+07:00
- **Modified**: 2026-08-24T07:22:09+07:00
- **Author**: Anh Tuấn
- **Category**: Performance test (https://itlearn.vn/blog/cat/performance-test)
- **Reading time**: 11 phút
- **Source site**: IT LEARN — Học viện Software Testing tiếng Việt

---

Tôi sẽ dùng xuyên suốt ví dụ "Hệ thống đặt phòng họp nội bộ" — một API `GET /api/rooms` để lấy danh sách phòng — làm mục tiêu test. Nếu bạn chưa nắm nền kiểm thử hiệu năng, hãy đọc qua [Performance testing là gì](/blog/performance-testing-la-gi) trước cho chắc.

## JMeter là gì & dùng làm gì

Trước khi cài đặt, hãy trả lời gọn câu hỏi *jmeter là gì*. **JMeter là gì? Apache JMeter là một công cụ mã nguồn mở, viết bằng Java, dùng để kiểm thử hiệu năng (performance testing) và tải (load testing) cho ứng dụng web, API và nhiều giao thức khác.** Nó mô phỏng nhiều người dùng ảo gửi request đồng thời, rồi đo thời gian phản hồi, throughput và tỷ lệ lỗi của hệ thống.

Nói cách khác, thay vì nhờ 500 đồng nghiệp cùng bấm vào "Hệ thống đặt phòng họp" một lúc, bạn để **apache jmeter** giả lập 500 người dùng đó và đo xem server chịu được đến đâu. JMeter không chỉ test hiệu năng: nó còn hỗ trợ HTTP/HTTPS, REST/SOAP API, JDBC (database), FTP, và nhiều giao thức khác — nên là lựa chọn số một cho *jmeter cho người mới* muốn học nghề hiệu năng mà không tốn phí bản quyền.

## Cài đặt JMeter (Java + JMeter)

Vì JMeter viết bằng Java, **cài đặt jmeter** luôn gồm hai phần: cài Java trước, rồi mới tới JMeter. Đây là điểm người mới hay vấp, nên tôi tách rõ từng bước.

- **Cài Java:** JMeter phiên bản mới yêu cầu **Java 8 trở lên** (JDK hoặc JRE). Bạn tải bản OpenJDK 8+ (hoặc mới hơn), cài xong kiểm tra bằng lệnh `java -version` trong terminal — thấy in ra số phiên bản là ổn.

- **Tải JMeter:** vào trang chính thức của Apache JMeter, tải bản binary (`apache-jmeter-x.y.zip`), giải nén ra một thư mục bất kỳ. JMeter *không cần cài đặt* theo kiểu chạy file setup — chỉ giải nén là dùng được.

- **Khởi động:** mở thư mục `bin`, chạy `jmeter.bat` (Windows) hoặc `jmeter.sh` (macOS/Linux) để mở giao diện đồ họa (GUI).

Thành phần

Yêu cầu tối thiểu

Cách kiểm tra

Java

JDK/JRE 8 trở lên

`java -version`

JMeter

Bản binary mới nhất, giải nén

Chạy `bin/jmeter.bat`

RAM

≥ 2–4 GB khi chạy tải lớn

Theo dõi khi test

Lưu ý: GUI của JMeter khá "ngốn" tài nguyên. Bạn dùng GUI để *dựng* và *debug* kịch bản, còn khi chạy tải thật thì nên chuyển sang chế độ non-GUI (dòng lệnh) cho nhẹ — tôi sẽ nói ở phần mẹo.

## Cấu trúc một Test Plan trong JMeter

Mọi thứ trong JMeter đều nằm trong một **Test Plan** — chính là kịch bản test của bạn, lưu ra file `.jmx`. Hiểu cấu trúc cây của Test Plan là hiểu 80% cách JMeter vận hành. Từ trên xuống, một Test Plan cơ bản gồm các thành phần sau:

Thành phần

Vai trò

**Test Plan**

Gốc của kịch bản; chứa mọi thứ, lưu thành file `.jmx`

**Thread Group**

Nhóm "người dùng ảo" — định số luồng, ramp-up, số vòng lặp

**Sampler** (vd HTTP Request)

Request thực tế gửi đến server (API, trang web)

**Config Element** (vd HTTP Request Defaults)

Cấu hình dùng chung: host, port, header mặc định

**Listener** (vd Summary Report)

Thu thập & hiển thị kết quả sau khi chạy

Trật tự này quan trọng: Thread Group quyết định *bao nhiêu người và gửi bao nhiêu lần*, Sampler quyết định *gửi gì*, Config Element giúp *khỏi lặp lại cấu hình*, còn Listener giúp *đọc kết quả*. Một mẹo hay theo [hướng dẫn JMeter](/blog/performance-testing-la-gi) chuẩn: dùng **HTTP Request Defaults** để khai báo host/port một lần, các HTTP Request sau chỉ cần điền đường dẫn.

## Tạo Thread Group & HTTP Request đầu tiên

Giờ ta dựng bài test đầu tiên cho API `GET /api/rooms` của "Hệ thống đặt phòng họp". Giả sử server chạy ở `localhost:8080`.

- **Thêm Thread Group:** chuột phải vào Test Plan → *Add → Threads (Users) → Thread Group*. Điền ba thông số cốt lõi: - **Number of Threads (users):** số người dùng ảo, ví dụ `50`. - **Ramp-up period (seconds):** thời gian để "thả" hết 50 luồng, ví dụ `10` — nghĩa là cứ mỗi 0,2 giây thêm 1 người dùng, tránh dồn cục. - **Loop Count:** mỗi luồng lặp bao nhiêu lần, ví dụ `5`.

- **Thêm HTTP Request:** chuột phải vào Thread Group → *Add → Sampler → HTTP Request*. Điền: - **Protocol:** `http` · **Server Name or IP:** `localhost` · **Port:** `8080` - **HTTP Method:** `GET` · **Path:** `/api/rooms`

- **Chạy thử:** bấm nút **Start** (hình tam giác xanh). JMeter sẽ bắn 50 người dùng × 5 vòng = 250 request tới API.

Với thông số trên, bạn vừa tạo một kịch bản mô phỏng 50 người cùng xem danh sách phòng họp. Nếu API của bạn theo chuẩn REST, việc điền method/path sẽ rất quen — bạn có thể ôn lại ở [API RESTful là gì](/blog/api-restful-la-gi). Để test API có tham số hay body JSON, bạn thêm ở tab *Parameters* / *Body Data* của HTTP Request.

## Đọc kết quả (Listener: Summary, Aggregate)

Chạy xong mà không có **Listener** thì bạn chẳng thấy gì cả. Hai listener phổ biến nhất cho người mới là **Summary Report** và **Aggregate Report** — thêm bằng cách chuột phải Thread Group → *Add → Listener → Summary Report / Aggregate Report*. Chúng tổng hợp kết quả thành bảng số dễ đọc.

Cột

Ý nghĩa

**# Samples**

Tổng số request đã gửi

**Average**

Thời gian phản hồi trung bình (ms)

**Median**

Trung vị — 50% request nhanh hơn giá trị này

**90% Line**

90% request phản hồi nhanh hơn mốc này (chỉ số hay dùng để đặt SLA)

**Throughput**

Số request/giây server xử lý được

**Error %**

Tỷ lệ request lỗi (không phải mã 2xx)

Cách đọc thực chiến: đừng chỉ nhìn **Average**, vì một vài request chậm bất thường có thể bị "trung bình hóa" che mất. Hãy nhìn **90% Line** và **Error %** trước. Ví dụ Average = 200 ms nghe êm, nhưng 90% Line = 3.000 ms và Error % = 8% thì hệ thống đang có vấn đề dưới tải. Muốn hiểu vì sao cùng một chỉ số lại khác nhau giữa các loại test, đọc thêm [load test vs stress test](/blog/load-test-vs-stress-test).

## Mẹo cho người mới

Đến đây bạn đã trả lời được *jmeter là gì* qua thực hành, chứ không chỉ lý thuyết. Vài điều tôi luôn dặn học viên khi mới cầm JMeter, để tránh những lỗi tốn thời gian:

- **Chạy tải thật bằng non-GUI mode.** GUI chỉ để dựng và debug. Khi chạy load lớn, dùng dòng lệnh: `jmeter -n -t testplan.jmx -l ketqua.jtl`. Chế độ non-GUI (`-n`) nhẹ hơn nhiều và cho số liệu chính xác hơn.

- **Tắt bớt Listener khi chạy tải.** Các listener kiểu "View Results Tree" rất ngốn RAM; chỉ bật khi debug, tắt đi khi đo hiệu năng thật.

- **Bắt đầu nhỏ rồi tăng dần.** Chạy 5–10 luồng cho chạy trơn đã, rồi mới nâng lên hàng trăm. Đừng bắn 1.000 người dùng ngay lần đầu.

- **Lưu file `.jmx` và version nó.** Kịch bản là tài sản; nên đưa vào Git để tái sử dụng và chia sẻ trong nhóm.

- **Kiểm tra assertion.** Thêm *Response Assertion* để chắc chắn API trả đúng nội dung, không chỉ đúng thời gian — nhanh mà sai thì vô nghĩa.

Đây cũng chính là những kỹ năng được luyện sâu trong [khóa Performance JMeter](/performance.html) của IT LEARN.

## Câu hỏi thường gặp

### JMeter là gì?

JMeter (Apache JMeter) là công cụ mã nguồn mở, viết bằng Java, dùng để kiểm thử hiệu năng và tải cho web, API và nhiều giao thức khác. Hiểu ngắn gọn *jmeter là gì*: nó mô phỏng nhiều người dùng ảo gửi request đồng thời, rồi đo thời gian phản hồi, throughput và tỷ lệ lỗi để đánh giá sức chịu tải của hệ thống.

### JMeter có miễn phí không?

Có. Apache JMeter là phần mềm mã nguồn mở, phát hành theo giấy phép Apache License 2.0, hoàn toàn miễn phí cho cả mục đích cá nhân lẫn thương mại. Bạn chỉ cần tải bản binary từ trang chính thức của Apache và cài Java là dùng được, không mất phí bản quyền hay giới hạn số người dùng ảo.

### JMeter test được API không?

Được. JMeter test API rất tốt qua HTTP Request Sampler: bạn khai báo method (GET/POST/PUT/DELETE), đường dẫn, header và body JSON, rồi gửi hàng loạt để đo hiệu năng. Nó hỗ trợ REST, SOAP, và cả JDBC để test database, nên phù hợp cho cả kiểm thử hiệu năng lẫn kiểm thử chức năng API cơ bản.

### Dùng JMeter có cần code không?

Không bắt buộc. Với các kịch bản cơ bản, bạn dựng test hoàn toàn bằng giao diện đồ họa: kéo thả Thread Group, HTTP Request, Listener mà không viết dòng code nào. Chỉ khi cần xử lý nâng cao — biến động dữ liệu, logic phức tạp — bạn mới cần tới Groovy/JSR223, nhưng người mới chưa cần đến ngay.

### Thread Group là gì?

Thread Group là thành phần định nghĩa nhóm "người dùng ảo" trong một Test Plan JMeter. Bạn khai báo số luồng (số người dùng), ramp-up period (thời gian thả hết luồng) và loop count (số vòng lặp mỗi luồng). Đây là nơi quyết định mức tải mà JMeter tạo ra lên hệ thống được test. Muốn thực hành JMeter bài bản trên dự án thật, từ dựng Test Plan đến phân tích kết quả dưới tải, bạn có thể tham khảo [khóa Performance của IT LEARN](/performance.html).

