01 · TESTING CƠ BẢN · CẬP NHẬT 10/2026
Từ yêu cầu đến câu hỏi làm rõ
Mục tiêu: phát hiện thông tin còn thiếu trước khi viết test case. Giả sử sản phẩm ghi: “Người dùng đăng nhập bằng email và mật khẩu hợp lệ.” Câu này chưa cho biết email nào được xem là hợp lệ, lỗi được hiển thị ra sao, tài khoản chưa kích hoạt xử lý thế nào hay có giới hạn số lần thử không.
Tester ghi mỗi điểm chưa rõ thành một câu hỏi có thể được trả lời. Sau khi có câu trả lời, biến nó thành điều kiện đầu vào và kết quả mong đợi. Điều chưa được xác nhận phải được đánh dấu là giả định.
Thực hành
Viết ít nhất bốn câu hỏi cho yêu cầu trên. Với mỗi câu, nêu test case nào sẽ thay đổi theo câu trả lời.
Tiêu chí tự kiểm
Câu hỏi phải liên quan đến hành vi có thể quan sát; có ít nhất một câu về đầu vào sai và một câu về trạng thái tài khoản; không tự đặt ra quy tắc sản phẩm.
Bài tiếp: viết test case →
02 · TESTING CƠ BẢN · CẬP NHẬT 10/2026
Viết test case để người khác chạy lại được
Mục tiêu: nối một điều kiện với một kết quả có thể kiểm tra. Ví dụ sau khi xác nhận hệ thống từ chối email trống, test case nên có tiền điều kiện, dữ liệu, thao tác và kết quả mong đợi. “Kiểm tra đăng nhập” là tên quá rộng; “Email trống hiển thị thông báo bắt buộc” nói rõ hành vi.
Không gộp nhiều nguyên nhân thất bại vào một test case nếu khi test sai bạn không biết nguyên nhân nào gây lỗi. Đặt tên theo hành vi người dùng, không theo thứ tự click.
Thực hành
Viết hai test case: một email trống, một mật khẩu sai. Tách dữ liệu, bước thực hiện và kết quả mong đợi.
Tiêu chí tự kiểm
Người khác có thể chạy lại mà không cần hỏi bạn; kết quả mong đợi đủ cụ thể để kết luận pass/fail; không ghi mật khẩu thật vào tài liệu.
Bài tiếp: giá trị biên →
03 · TESTING CƠ BẢN · CẬP NHẬT 10/2026
Chọn dữ liệu quanh giá trị biên
Mục tiêu: tập trung vào điểm hành vi có thể đổi. Giả sử tuổi hợp lệ từ 18 đến 60, bao gồm cả hai đầu. Bộ dữ liệu nhỏ có giá trị là 17, 18, 19, 59, 60 và 61. Các điểm 17/18 và 60/61 giúp kiểm tra điều kiện loại trừ và chấp nhận.
Giá trị biên không thay thế các loại dữ liệu khác: ô trống, ký tự chữ, số thập phân và giá trị rất lớn cần được xét theo đặc tả của sản phẩm.
Thực hành
Thiết kế dữ liệu cho trường số lượng cho phép từ 1 đến 10. Ghi lý do chọn từng giá trị.
Tiêu chí tự kiểm
Có 0, 1, 2, 9, 10, 11; nêu rõ giới hạn có được bao gồm không; không tự kết luận hành vi của ô trống khi yêu cầu chưa nói.
Bài tiếp: báo lỗi →
04 · TESTING CƠ BẢN · CẬP NHẬT 10/2026
Báo lỗi để đồng đội tái hiện
Mục tiêu: tách kết quả thực tế khỏi kết quả mong đợi. Một bug report tốt ghi môi trường, trạng thái trước khi chạy, dữ liệu dùng, bước tái hiện, kết quả thực tế, kết quả mong đợi và bằng chứng. Mức độ nghiêm trọng là nhận định có căn cứ; tránh tự gán “critical” cho mọi lỗi.
Ví dụ: form nhận tuổi 17 dù quy tắc đã xác nhận là từ 18. Kết quả thực tế phải nêu form đã lưu và hiển thị thành công; kết quả mong đợi là form từ chối và giải thích lỗi.
Thực hành
Viết bug report cho tình huống tuổi 17 được chấp nhận. Dùng dữ liệu giả và mô tả bằng chứng bạn sẽ chụp.
Tiêu chí tự kiểm
Người khác có đủ bước để tái hiện; hai phần thực tế/mong đợi không bị trộn; không lộ dữ liệu cá nhân.
Bài tiếp: API →
05 · WEB & API · CẬP NHẬT 10/2026
Kiểm tra API ngoài mã trạng thái 200
Mục tiêu: đọc hợp đồng API và kiểm tra hành vi, không chỉ nhìn HTTP status. Một yêu cầu tạo tài khoản có thể trả 201, nhưng tester vẫn cần xem cấu trúc phản hồi, dữ liệu đã được lưu đúng chưa, thông tin nhạy cảm có bị trả lại không và yêu cầu lặp có tạo bản ghi trùng không.
Với lỗi đầu vào, kiểm tra mã trạng thái phù hợp, thông báo có ích, và trạng thái hệ thống sau yêu cầu. Chỉ dùng môi trường cùng dữ liệu bạn được phép kiểm thử.
Thực hành
Lập checklist cho endpoint POST /users với email bắt buộc. Gồm ít nhất một trường hợp hợp lệ, trống, sai định dạng và trùng email.
Tiêu chí tự kiểm
Mỗi trường hợp có đầu vào, phản hồi mong đợi và câu hỏi về thay đổi dữ liệu; không giả định mã trạng thái cụ thể khi hợp đồng API chưa xác nhận.
Bài tiếp: locator →
06 · AUTOMATION · CẬP NHẬT 10/2026
Chọn locator ổn định cho Selenium C#
Mục tiêu: tìm đúng phần tử theo dấu hiệu ít thay đổi. Thuộc tính định danh được sản phẩm duy trì, như id hoặc data-testid, thường dễ hiểu hơn XPath dựa trên vị trí. CSS selector và XPath vẫn có ích khi cần mô tả quan hệ giữa các phần tử.
var submit = driver.FindElement(By.CssSelector("[data-testid='login-submit']"));
submit.Click();
Không dùng FindElement để kiểm tra sự vắng mặt mà không xử lý ngoại lệ; nếu muốn đếm kết quả, dùng FindElements và kiểm tra số lượng.
Thực hành
Với một form demo được phép kiểm thử, tìm locator cho email, mật khẩu và nút gửi. Ghi một lý do vì sao mỗi locator có thể ổn định.
Tiêu chí tự kiểm
Locator chỉ tới đúng phần tử, không phụ thuộc vị trí hàng thứ n; có cách nhận ra khi UI đổi khiến locator cần sửa.
Bài tiếp: assertion →
07 · AUTOMATION · CẬP NHẬT 10/2026
Assertion kiểm tra hành vi, không chỉ thao tác
Mục tiêu: một test chỉ có click và nhập liệu chưa chứng minh sản phẩm chạy đúng. Với form tuổi, sau khi gửi giá trị 17, assertion cần kiểm tra thông báo hoặc trạng thái bị từ chối theo yêu cầu. Chờ điều kiện hiển thị thay vì ngủ cố định rồi đoán.
var error = wait.Until(d =>
d.FindElement(By.Id("age-error")));
Assert.That(error.Text, Does.Contain("18"));
Đây là ví dụ minh họa. Locator và câu chữ phải thay theo ứng dụng demo được phép kiểm thử.
Thực hành
Viết hai trường hợp cho tuổi 17 và 18. Nêu rõ điều gì phải xuất hiện hoặc thay đổi sau khi gửi form.
Tiêu chí tự kiểm
Test 17 thất bại nếu form chấp nhận; test 18 thất bại nếu form từ chối; cả hai có kết quả cụ thể và test độc lập.
Ghép các bài vào dự án mẫu →