Kết Hợp Tool Testing: Selenium, JUnit, TestNG và JMeter Cho Tester Fresher

5 tháng trước · 10 phút đọc
Tại sao tester cần biết nhiều tool?
Mình nhớ lần đầu đi phỏng vấn QA, HR hỏi: "Bạn biết tool gì?" Mình trả lời: "Selenium." Và câu tiếp theo là: "Chỉ vậy thôi sao?"
Đó là bài học đắt giá. Một tester thực chiến không chỉ test UI. Họ cần kiểm tra từng unit nhỏ trong code, gọi API để verify response, rồi đánh load hệ thống trước khi release. Mỗi loại test đó cần một tool khác nhau.
Mỗi tầng hệ thống cần một loại test riêng - không tool nào làm hết được
Thực tế tại các công ty IT Việt Nam, phần lớn job description tester yêu cầu ứng viên biết ít nhất 2-3 tool khác nhau. Fresher biết đúng 1 tool sẽ khó cạnh tranh với người biết combo.
Bài này mình sẽ hướng dẫn cụ thể 4 tool phổ biến nhất - Selenium, JUnit, TestNG, JMeter - dùng tool nào khi nào, và quan trọng hơn: cách kể câu chuyện "mình biết combo tool" trong phỏng vấn.
Selenium: Test UI như người dùng thật
Selenium là tool mô phỏng hành động người dùng trên trình duyệt - click nút, nhập form, scroll trang, verify nội dung hiển thị. Hiểu đơn giản: bạn dạy máy tính "click vào nút Đăng nhập, nhập email, nhập pass, rồi kiểm tra có chuyển sang trang chủ không."
Selenium dùng tốt nhất khi:
- Test luồng đăng nhập, đăng ký, thanh toán
- Verify UI hiển thị đúng trên các trình duyệt (Chrome, Firefox, Edge)
- Test regression sau mỗi sprint - đảm bảo tính năng cũ không bị vỡ
Selenium điều khiển browser y như tay người - nhưng chạy tự động hàng trăm lần
Ví dụ thực tế: Bạn test chức năng thêm sản phẩm vào giỏ hàng trên web e-commerce. Thay vì click tay 50 lần với 50 sản phẩm khác nhau, Selenium chạy tự động trong vài phút.
Giới hạn cần biết: Selenium chạy chậm hơn test API hay unit test vì phải khởi động browser thật. Đừng dùng Selenium để test logic nghiệp vụ - để JUnit làm việc đó nhanh hơn nhiều.
Bạn có thể tải Selenium về qua Maven hoặc Gradle. Tài liệu chính thức đầy đủ tại: Selenium WebDriver Official Docs
JUnit và TestNG: Khác gì nhau và dùng khi nào?
Đây là câu hỏi mình hay thấy trong group Testing VN. Nhiều bạn bị confuse vì cả hai đều dùng để viết và chạy test trong Java. Mình giải thích thẳng:
JUnit là framework unit test phổ biến nhất trong Java. Ra đời trước, cú pháp đơn giản, được tích hợp sẵn trong hầu hết IDE. Dùng tốt khi test từng function nhỏ riêng lẻ.
TestNG (Test Next Generation) ra đời sau, mạnh hơn về tổ chức test suite. Có khả năng chạy song song (parallel execution), nhóm test theo group, và report đẹp hơn mặc định.
JUnit đơn giản để bắt đầu, TestNG mạnh hơn khi project lớn - chọn theo team
| Tiêu chí | JUnit 5 | TestNG |
|---|---|---|
| Cú pháp | Đơn giản, ít annotation | Nhiều annotation hơn |
| Parallel test | Có (cần config) | Có, dễ config hơn |
| Data-driven test | Cần thêm thư viện | Hỗ trợ sẵn với @DataProvider |
| Report | Cơ bản | Đẹp hơn, chi tiết hơn |
| Phổ biến | Rất phổ biến trong Spring | Phổ biến kết hợp Selenium |
Ví dụ so sánh cú pháp cùng một test case:
Thật ra với fresher, không cần chọn ngay từ đầu. Học JUnit trước vì dễ hơn. Sau khi quen, thêm TestNG khi project cần chạy parallel hoặc data-driven. Nhiều team dùng cả hai - JUnit cho unit test thuần, TestNG cho automation test kết hợp Selenium.
JMeter: Đánh load trước khi hệ thống sập thật
JMeter là tool kiểm tra hiệu năng (performance testing) - tức là giả lập hàng trăm, hàng nghìn người dùng cùng truy cập hệ thống một lúc để xem server có chịu được không.
Tại sao cần? Vì app chạy ngon với 10 người không có nghĩa chạy ngon với 10.000 người. Mình từng chứng kiến một web bán vé concert sập hoàn toàn trong vòng 3 phút đầu mở bán - chính xác vì không ai load test trước.
Load test phát hiện điểm vỡ trước khi user thật gặp phải
3 loại test JMeter làm được:
- Load test: Giả lập số user thực tế dự kiến (ví dụ 500 người cùng đặt hàng)
- Stress test: Đẩy user lên cao dần cho đến khi hệ thống không chịu được, tìm ngưỡng vỡ
- Spike test: Tăng đột ngột từ 100 lên 1000 user trong vài giây, test khả năng hồi phục
Thiết lập JMeter cơ bản cho một scenario test API login:
Test Plan
└── Thread Group (100 users, ramp-up 10 giây)
└── HTTP Request: POST /api/login
├── Header: Content-Type = application/json
├── Body: {"email": "[email protected]", "password": "Test@123"}
└── Response Assertion: Status code = 200
Sau khi chạy, JMeter hiển thị report với các chỉ số quan trọng: Average Response Time (thời gian phản hồi trung bình), Throughput (số request/giây), Error Rate (tỉ lệ lỗi). Nếu Error Rate vượt 1-2%, đó là dấu hiệu hệ thống đang có vấn đề nghiêm trọng.
Tải JMeter tại: Apache JMeter Official Download
Kết hợp 4 tool thành chiến lược test hoàn chỉnh
Biết từng tool riêng lẻ chưa đủ. Điểm khác biệt của tester giỏi là biết dùng tool đúng chỗ, đúng thời điểm trong quy trình phát triển.
Đây là chiến lược mình hay áp dụng và chia sẻ với các bạn fresher:
Quy trình test tích hợp - mỗi tool đảm nhiệm một tầng riêng biệt
Giai đoạn 1 - Dev vừa xong feature: Chạy JUnit/TestNG ngay. Test từng function: hàm tính giá có đúng không, validation email có chặn ký tự đặc biệt không. Phát hiện lỗi sớm nhất, fix rẻ nhất.
Giai đoạn 2 - Build ổn định lên test server: Chạy Selenium test UI. Verify các flow chính: đăng nhập, mua hàng, thanh toán hoạt động đúng trên Chrome và Firefox. Chạy smoke test trước, regression test đầy đủ sau.
Giai đoạn 3 - Trước khi release lên production: Chạy JMeter load test. Đặt ngưỡng: 500 concurrent users, response time < 2 giây, error rate < 1%. Nếu không qua - báo cáo dev tối ưu trước khi khách hàng thấy.
Checklist tích hợp đầy đủ có trong file bên dưới, bạn có thể tải về và dùng ngay cho project thực hành: Tải checklist 4 tool testing
Tip phỏng vấn: Khi được hỏi "Bạn biết tool gì?", đừng chỉ liệt kê. Nói: "Mình dùng JUnit/TestNG để test unit, Selenium để test UI flow, JMeter để load test trước release. Tùy giai đoạn sprint mình sẽ ưu tiên tool phù hợp." Câu trả lời đó cho thấy bạn hiểu bức tranh toàn cục - không chỉ biết dùng tool.
Xây dựng project thực hành để chứng minh kỹ năng
CV tester fresher trái ngành thiếu gì nhất? Không phải kiến thức - mà là bằng chứng đã làm. Nhà tuyển dụng muốn thấy bạn thực sự dùng tool, không chỉ đọc về nó.
Project mình hay gợi ý cho các bạn tự học:
Project "Test Web Bán Hàng Demo" - chọn bất kỳ web demo công khai như web demo thực hành Selenium:
- Viết 20 JUnit test case cho các hàm nghiệp vụ: tính giá sau giảm, validate email, kiểm tra số lượng tồn kho
- Viết 15 Selenium test cho các flow: đăng nhập đúng/sai, thêm giỏ hàng, checkout
- Chạy JMeter load test với 100 user đồng thời, chụp màn hình report
- Ghi lại kết quả vào README trên GitHub
GitHub có public project thực hành là lợi thế cạnh tranh rõ ràng trong CV
Khi đưa GitHub link vào CV, HR thấy: bạn biết dùng tool, biết tổ chức test suite, biết đọc và giải thích report. Đó là bằng chứng cụ thể hơn bất kỳ câu "tôi có kinh nghiệm với Selenium" nào.
Thấy bỡ ngỡ ở bước bắt đầu bình thường. Mình từng mất cả tuần chỉ để cài ChromeDriver đúng version. Điểm quan trọng là bắt đầu với project nhỏ, tập trung 1 tool trước, rồi mở rộng dần. Không cần hoàn hảo ngay lần đầu.
Bước tiếp theo gợi ý:
- Cài Java + Maven + IDE (IntelliJ hoặc Eclipse)
- Tạo project Maven, thêm dependency JUnit 5 và Selenium
- Viết test case đăng nhập đầu tiên - chạy được là thắng
- Sau 1 tuần, thêm TestNG và thử data-driven test
- Tuần thứ 3, cài JMeter, load test API đầu tiên
Testing không khó. Khó là giữ tỉ mỉ trong từng bước - từ đặt tên test case rõ ràng, đến đọc report cẩn thận, đến ghi bug report đủ thông tin để dev reproduce. Mỗi bug bạn tìm được trước khi production là một lần bạn bảo vệ cả team.
Comment bên dưới bạn đang học đến tool nào, mình sẽ gợi ý bước tiếp theo cụ thể hơn nhé!
