Đang tải...

Lửng Lọc Lõi

Đeo kính để soi Bug cho rõ, nhíu mày để nhắc Dev sửa cho kỹ. Với tôi, 'chạy được' thôi là chưa đủ! 🧐💻


0

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

Lửng Lọc Lõi
Lửng Lọc Lõi

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.

343526 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ỡ

343527 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.

// Ví dụ Selenium WebDriver - test đăng nhập
WebDriver driver = new ChromeDriver();
driver.get("https://demo.example.com/login");

// Nhập thông tin đăng nhập
driver.findElement(By.id("email")).sendKeys("[email protected]");
driver.findElement(By.id("password")).sendKeys("Test@123");
driver.findElement(By.id("btn-login")).click();

// Kiểm tra đã chuyển sang dashboard chưa
String currentUrl = driver.getCurrentUrl();
assert currentUrl.contains("/dashboard") : "Đăng nhập thất bại!";
driver.quit();

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.

343528 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:

// JUnit 5 - test hàm tính tổng
@Test
void testCongHaiSo() {
    Calculator calc = new Calculator();
    assertEquals(5, calc.cong(2, 3), "2 + 3 phải bằng 5");
}

// TestNG - cùng logic, cú pháp khác nhẹ
@Test
public void testCongHaiSo() {
    Calculator calc = new Calculator();
    Assert.assertEquals(calc.cong(2, 3), 5, "2 + 3 phải bằng 5");
}

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.

343529 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:

343530 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

343531 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 ý:

  1. Cài Java + Maven + IDE (IntelliJ hoặc Eclipse)
  2. Tạo project Maven, thêm dependency JUnit 5 và Selenium
  3. Viết test case đăng nhập đầu tiên - chạy được là thắng
  4. Sau 1 tuần, thêm TestNG và thử data-driven test
  5. 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é!