THƯ VIỆN BÀI HỌC · CÓ NỘI DUNG

Đọc ngắn. Thử ngay. Sửa có lý do.

Bảy bài mở đầu đi từ phân tích yêu cầu đến một kiểm thử tự động nhỏ. Mỗi bài có tình huống, việc bạn tự làm và tiêu chí để so lại kết quả.

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 →