PineLab
Chuyên sâu

Kiểm thử hiệu năng là gì? Load test, stress test và các chỉ số cần đọc

Một hệ thống chạy hoàn hảo với một người dùng có thể sập hoàn toàn với năm nghìn người. Kiểm thử hiệu năng trả lời câu hỏi mà kiểm thử chức năng không chạm tới: hệ thống chịu được đến đâu, và khi vượt ngưỡng thì nó hỏng theo cách nào.

10 phút đọc Cập nhật 08/09/2026 PineLab

Kiểm thử hiệu năng là gì?

Kiểm thử hiệu năng là nhóm kiểm thử phi chức năng đánh giá tốc độ, khả năng chịu tải, độ ổn định và khả năng mở rộng của hệ thống dưới một khối lượng công việc xác định. Nó không hỏi "chức năng có đúng không" mà hỏi "chức năng đó còn đúng và còn nhanh khi có bao nhiêu người dùng cùng lúc".

Bốn loại kiểm thử hiệu năng thường dùng
LoạiKịch bản tảiCâu hỏi trả lời
Load testTải dự kiến trong điều kiện bình thườngHệ thống có đáp ứng được lượng người dùng thực tế không?
Stress testTăng tải dần đến khi hệ thống hỏngĐiểm gãy nằm ở đâu, và hỏng theo cách nào?
Spike testTăng đột ngột rồi giảm đột ngộtHệ thống chịu được đợt truy cập bất ngờ không (flash sale, tin nóng)?
Soak testTải vừa phải kéo dài nhiều giờCó rò rỉ bộ nhớ hay suy giảm dần theo thời gian không?

Các chỉ số phải biết đọc

Chỉ sốÝ nghĩaĐiều cần chú ý
Response timeThời gian từ lúc gửi yêu cầu đến khi nhận đủ phản hồiĐọc theo percentile, không đọc trung bình
ThroughputSố yêu cầu xử lý được mỗi giâyTăng tải mà throughput không tăng nghĩa là đã bão hoà
Error rateTỉ lệ yêu cầu lỗiTăng vọt là dấu hiệu đã vượt ngưỡng chịu tải
Concurrent usersSố người dùng đồng thờiKhác với tổng số người dùng — đây là số đang hoạt động cùng lúc
Tài nguyên máy chủCPU, RAM, I/O, số kết nối cơ sở dữ liệuNơi chỉ ra nút thắt thực sự nằm ở đâu

Percentile đọc như sau: p95 = 800ms nghĩa là 95% yêu cầu hoàn thành trong vòng 800ms, 5% chậm hơn. Ngưỡng thường được đặt trong tiêu chí chấp nhận dưới dạng "p95 dưới 1 giây với 500 người dùng đồng thời".

Quy trình chạy một đợt kiểm thử hiệu năng

  1. Xác định mục tiêu định lượng: bao nhiêu người dùng đồng thời, ngưỡng p95 là bao nhiêu, tỉ lệ lỗi tối đa chấp nhận được.
  2. Chọn kịch bản đại diện: các luồng chiếm phần lớn lưu lượng thật, không phải luồng dễ viết nhất.
  3. Chuẩn bị môi trường càng giống production càng tốt — kết quả trên máy cấu hình yếu hơn không suy ra được gì.
  4. Chuẩn bị dữ liệu đủ lớn: truy vấn trên bảng 1.000 dòng và trên bảng 10 triệu dòng là hai câu chuyện khác nhau.
  5. Chạy thử ở tải thấp để xác nhận kịch bản đúng trước khi chạy tải cao.
  6. Chạy chính thức, đồng thời theo dõi tài nguyên máy chủ.
  7. Phân tích: tìm nút thắt, đề xuất cải thiện, chạy lại để so sánh.

Chọn công cụ để bắt đầu

Công cụKịch bản viết bằngPhù hợp khi
JMeterGiao diện đồ hoạ, không cần codeNgười mới, đội không có nền lập trình
k6JavaScriptĐội quen code, muốn đưa vào CI
GatlingScala hoặc JavaDự án JVM, cần hiệu suất tạo tải cao
LocustPythonĐội dùng Python, cần kịch bản linh hoạt
// k6 — kịch bản load test tối giản
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 200 },  // tăng dần lên 200 người dùng
    { duration: '5m', target: 200 },  // giữ tải trong 5 phút
    { duration: '2m', target: 0 },    // giảm dần
  ],
  thresholds: {
    http_req_duration: ['p(95)<1000'],  // p95 phải dưới 1 giây
    http_req_failed: ['rate<0.01'],     // tỉ lệ lỗi dưới 1%
  },
};

export default function () {
  const res = http.get('https://staging-api.example.com/v1/products?page=1');
  check(res, {
    'status 200': (r) => r.status === 200,
    'có dữ liệu': (r) => r.json('items').length > 0,
  });
  sleep(1);
}
HỎI ĐÁP

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

Load test và stress test khác nhau thế nào?

Load test chạy ở mức tải dự kiến trong điều kiện bình thường để xác nhận hệ thống đáp ứng được lượng người dùng thực tế. Stress test tăng tải vượt ngưỡng cho đến khi hệ thống hỏng, nhằm tìm điểm gãy và quan sát cách hệ thống xuống cấp khi quá tải.

Vì sao không nên dùng response time trung bình?

Vì trung bình che giấu nhóm người dùng có trải nghiệm tệ nhất. Nếu 95% yêu cầu nhanh và 5% cực chậm, con số trung bình vẫn trông ổn trong khi một phần người dùng thực sự đang gặp vấn đề. Hãy dùng percentile p95 và p99 để phản ánh đúng.

Tester thủ công có cần biết kiểm thử hiệu năng không?

Ở mức hiểu khái niệm và đọc được kết quả thì có, vì bạn cần trao đổi được với đội về ngưỡng chấp nhận. Việc dựng kịch bản tải chuyên sâu thường do vai trò performance tester đảm nhiệm, nhưng quan sát tab Network trong DevTools là kỹ năng mọi tester nên có.

Nên học JMeter hay k6 trước?

JMeter nếu bạn chưa quen lập trình, vì kịch bản dựng bằng giao diện đồ hoạ. k6 nếu bạn đã viết được JavaScript cơ bản và muốn đưa kiểm thử hiệu năng vào pipeline CI, vì kịch bản là mã nguồn nên dễ quản lý phiên bản và tái sử dụng.