CYBERSOFT
Đăng nhập

Assertion & kiểm chứng kết quả trong automation cho người mới (có code chạy được)

Chuyên công nghệNền tảngNgười mớiChuẩn SEO
🗓 1 tháng trước19 phút đọc·👁 1,159 lượt xem👤 482 người đọc

Bài cho người mới: học assertion & kiểm chứng kết quả qua app TMĐT ShopEasy. Vì sao điều khiển trình duyệt thành công chưa phải kiểm chứng, kiểm chứng đúng điều quan trọng (không thừa/thiếu), hard vs soft assertion, so khớp text/số/trạng thái/URL bằng Playwright, viết thông điệp lỗi rõ ràng, hai tình huống thật (bug lọt production vì thiếu assert, test vỡ vì assert quá chặt), nhiều mockup giao diện, FAQ và trắc nghiệm 5 câu. Chuẩn SEO, dẫn về khóa Tester CyberSoft.

1. Tóm tắt nhanh & màn hình bạn sẽ kiểm chứng

⭐ TL;DR — Assertion là câu lệnh kiểm chứng: so sánh kết quả thực tế với kết quả mong đợi rồi báo PASS/FAIL — không có nó, script chỉ 'chạy qua' chứ không xác nhận gì cả. Bài này bám màn kết quả đặt hàng của app TMĐT ShopEasy: bạn học vì sao phải kiểm chứng đúng điều quan trọng (không thừa/thiếu), hard vs soft assertion, cách so khớp text/số/trạng thái/URL, viết thông điệp lỗi rõ ràng, và cách tránh test 'luôn xanh' không assert gì thật. Nhiều hình minh hoạ, code Playwright chạy được và trắc nghiệm cuối bài.

Chào bạn mới! Khi bắt đầu học automation, phần lớn thời gian bạn sẽ tập trung vào việc điều khiển trình duyệt: mở trang, điền form, bấm nút. Nhưng có một sự thật ít ai nhắc tới ngay từ đầu: điều khiển trình duyệt thành công KHÔNG đồng nghĩa với việc tính năng đang hoạt động đúng. Chỉ khi bạn viết ra một câu lệnh so sánh — 'giá trị này PHẢI bằng giá trị kia' — thì test mới thật sự trở thành một phép kiểm chứng. Câu lệnh đó gọi là assertion. Chúng ta sẽ học qua màn kết quả đặt hàng thật của ShopEasy, có hình minh hoạ và code Playwright chạy được.

🔒 shopeasy.vn/don-hang-thanh-cong ShopEasy · TMĐT ShopEasy · Đặt hàng thành công Mã đơn hàng: #SE-88213Trạng thái: Đã xác nhậnTổng thanh toán: 398.000đXem đơn hàng của tôi Assert: mã đơn hàng khớp regex #SE-\d+ Assert: trạng thái = 'Đã xác nhận' Assert: tổng tiền = 398.000đ Assert: nút 'Xem đơn hàng' hiển thị
Màn hình kết quả đặt hàng ShopEasy, chú thích các điểm cần assert: mã đơn, trạng thái, tổng tiền, nút tiếp theo
📖 Assertion: câu lệnh kiểm chứng trong automation, so sánh giá trị thực tế nhận được với giá trị mong đợi, rồi báo test PASS nếu khớp hoặc FAIL nếu không khớp.

2. Vấn đề: điều khiển trình duyệt thành công chưa phải kiểm chứng

Hãy hình dung một script tự động: mở trang ShopEasy, thêm 1 sản phẩm vào giỏ, tăng số lượng lên 2, rồi kết thúc. Nếu không có bất kỳ câu expect() nào, script này sẽ 'chạy thành công' về mặt kỹ thuật — trình duyệt không báo lỗi, không phần tử nào bị thiếu. Nhưng nó KHÔNG hề trả lời câu hỏi quan trọng nhất: tổng tiền sau khi tăng số lượng có đúng không? Đây chính là khoảng trống mà nhiều người mới bỏ qua khi mới học automation.

Test CÓ assert thật vs test 'luôn xanh' (không kiểm chứng gì) Tiêu chíTest 'luôn xanh'Test CÓ assert thậtHành độngChỉ mở trang, không kiểm tra gì thêmMở trang RỒI kiểm tra nội dung/trạng thái mong đợiKhi tính năng lỗiVẫn báo PASS màu xanh dù dữ liệu saiBáo FAIL đỏ ngay khi kết quả không khớp mong đợiGiá trị thật sựTạo cảm giác an toàn giả, không phát hiện bugPhát hiện đúng lúc dữ liệu/giao diện sai lệchVí dụ ShopEasyawait page.goto(cart) rồi kết thúc testawait expect(cartTotal).toHaveText('398.000đ')Rủi ro dài hạnĐội ngũ tin tưởng nhầm vào bộ test không đáng tinBộ test phản ánh đúng chất lượng sản phẩmTest chạy xong không lỗi KHÔNG có nghĩa là tính năng đúng — phải có assertion mới gọi là kiểm chứng.
Bảng so sánh: test 'luôn xanh' chỉ điều khiển trình duyệt vs test có assertion thật sự kiểm chứng

Điều nguy hiểm hơn cả là test 'luôn xanh' này vẫn xuất hiện trong báo cáo CI với dấu tick màu xanh, y hệt các test đang kiểm chứng thật sự. Đội ngũ nhìn vào bảng kết quả sẽ tin rằng tính năng giỏ hàng đang hoạt động tốt — trong khi thực tế không ai kiểm tra điều đó cả. Sự an toàn này là GIẢ, và nó chỉ lộ ra khi khách hàng thật gặp lỗi trên production.

📖 Test 'luôn xanh': một kịch bản automation thực hiện đầy đủ các bước thao tác nhưng không có assertion kiểm chứng kết quả, nên luôn báo PASS bất kể tính năng có đúng hay không.

3. Kiểm chứng đúng điều quan trọng: không thừa, không thiếu

Nguyên tắc cốt lõi khi viết assertion là chọn ĐÚNG điều cần kiểm chứng cho mục đích của test đó — không thiếu (bỏ sót điểm quan trọng, dẫn tới test 'luôn xanh' một phần) và không thừa (assert cả những chi tiết không liên quan, khiến test dễ vỡ vô cớ). Với màn kết quả đặt hàng ShopEasy, điều 'quan trọng' là: mã đơn hàng đúng định dạng, trạng thái là 'Đã xác nhận', và tổng tiền khớp với giỏ hàng trước đó.

Các loại assertion phổ biến khi test giao diện ShopEasy Loại assertionKiểm chứng cái gìVí dụ trên ShopEasySo khớp văn bản (text)Nội dung hiển thị đúng chuỗi mong đợiTên sản phẩm hiển thị đúng 'Áo thun nam basic'So khớp số (number)Giá trị số đúng, không lệch làm trònTổng tiền giỏ hàng đúng 398.000Trạng thái phần tử (state)Phần tử có hiển thị/bật/tắt đúng khôngNút 'Thanh toán' bị vô hiệu hoá khi giỏ hàng trốngURL / điều hướngTrình duyệt đến đúng trang sau hành độngSau khi đặt hàng, URL chuyển sang /don-hang-thanh-congThuộc tính (attribute)Thuộc tính HTML đúng giá trị mong đợiẢnh sản phẩm có alt mô tả đúng tên sản phẩmSố lượng phần tử (count)Số phần tử lặp lại đúng như kỳ vọngGiỏ hàng hiển thị đúng 3 dòng sản phẩmChọn đúng loại assertion cho đúng điều cần kiểm chứng — assert sai loại dễ bỏ sót lỗi thật.
Bảng các loại assertion phổ biến: text, số, trạng thái, URL, thuộc tính, số lượng phần tử

Assert 'thừa' thường gặp nhất ở người mới là kiểm chứng luôn cả những nội dung hay thay đổi vì lý do không liên quan tới logic — ví dụ banner khuyến mãi, ngày giờ hiển thị, hay id nội bộ không ảnh hưởng nghiệp vụ. Mỗi lần nội dung đó đổi (dù tính năng vẫn đúng), test lại báo FAIL, khiến đội ngũ mất niềm tin và dần bỏ qua các cảnh báo đỏ — kể cả khi có bug thật.

💡 Trước khi assert bất cứ điều gì, tự hỏi: 'Nếu giá trị này sai, người dùng thật có bị ảnh hưởng không?' — nếu câu trả lời là có, đó là điều quan trọng cần assert.

4. Hard assertion vs soft assertion

Có 2 cách assertion xử lý khi thất bại. Hard assertion (assert cứng) — cách mặc định của expect() trong Playwright — sẽ DỪNG test ngay lập tức khi kiểm chứng đầu tiên không khớp; các bước sau đó không chạy nữa. Soft assertion (assert mềm) ghi nhận thất bại nhưng vẫn cho phép test chạy tiếp để kiểm tra các điều kiện còn lại, rồi báo cáo TOÀN BỘ lỗi tìm được cùng lúc khi test kết thúc.

javascript
// hard assertion (mac dinh cua Playwright): dung ngay khi that bai
await expect(page.locator('#order-status')).toHaveText('Da xac nhan');
// neu dong tren FAIL, dong duoi se KHONG chay:
await expect(page.locator('#order-total')).toHaveText('398.000d');

// soft assertion: ghi nhan loi nhung van chay tiep, gom het loi cuoi test
await expect.soft(page.locator('#order-status')).toHaveText('Da xac nhan');
await expect.soft(page.locator('#order-total')).toHaveText('398.000d');
await expect.soft(page.locator('#order-id')).toHaveText(/^#SE-\d+$/);
// Playwright se bao ca 3 loi (neu co) cung luc khi test ket thuc

Chọn hard assertion khi bước kiểm chứng sau THẬT SỰ phụ thuộc vào bước trước còn đúng — ví dụ nếu chưa xác nhận trang đã tải đúng, kiểm tra tiếp các phần tử bên trong là vô nghĩa. Chọn soft assertion khi bạn muốn thấy TOÀN CẢNH các sai lệch trên cùng một màn hình trong 1 lần chạy, thay vì phải sửa từng lỗi rồi chạy lại nhiều lần mới thấy lỗi tiếp theo.

🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 25% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!