IT nói tiếng người
Kiểm thửMốc 1 · Nói chuyện được

🛣️ E2E Test là gì?

Đi trọn hành trình đúng như một người dùng thật.

1
Hiểu nó là gì

E2E Test chạy qua toàn bộ luồng từ giao diện xuống database rồi ngược lên, mô phỏng đúng cách người dùng thao tác.

Nói theo đời thường:
Như tự đóng vai khách: vào cửa hàng, chọn món, thanh toán, nhận hàng, xem cả quy trình có trôi không chứ không chỉ soi một khâu.

⚠ Chỗ ẩn dụ này hỏng

Đóng vai khách một lần thì biết quy trình trôi hay không. Nhưng E2E test đắt hơn mọi loại test khác vài chục lần — chậm, hay chập chờn, và hỏng chỗ nào cũng khó lần.

Sai lầm phổ biến nhất của người mới: thấy E2E “giống thật nhất” nên viết tất cả bằng E2E. Kết quả là bộ test chạy hai tiếng, đỏ liên tục, rồi cả đội bỏ luôn không thèm nhìn.

2
Code trông thế nào
test('mua hàng từ đầu tới cuối', async ({ page }) => {
  await page.goto('/')
  await page.getByPlaceholder('Tìm sản phẩm').fill('áo thun')
  await page.getByRole('button', { name:'Tìm' }).click()
  await page.getByText('Áo thun trắng').click()
  await page.getByRole('button', { name:'Mua ngay' }).click()
  await expect(page.getByText('Đặt hàng thành công')).toBeVisible()
})

Một ca như thế này chạy 10-30 giây. Nhân với 500 ca thì bạn hiểu vì sao phải tiết chế.

3
Khi nào bạn dùng nó

✓ Dùng khi

  • Luồng quan trọng nhất, mất tiền nếu hỏng: đăng nhập, thanh toán, đặt hàng
  • Cần bằng chứng cả hệ thống ghép lại vẫn chạy

✗ Đừng dùng khi

  • Kiểm tra mọi trường hợp lỗi nhỏ (để cho unit hoặc API test)
  • Tính năng còn đang đổi giao diện liên tục
Chưa cần biết: kim tự tháp test, tái dùng trạng thái đăng nhập, chạy song song.
Để dành tới Mốc 3 — Tự sửa được khi nó hỏng: Test đỏ trên CI mà xanh ở máy bạn, và bạn biết bắt đầu tìm từ đâu.
Dấu hiệu bạn đã cần học nó: Khi bộ E2E của bạn vượt 15 phút và bắt đầu đỏ ngẫu nhiên vài ca mỗi lần chạy.
4
Đi đâu tiếp

🧪 Thử 2 phút, không cần cài gì

Tự làm E2E bằng tay một lần: mở trang bạn đang test, bấm đúng luồng mua hàng từ đầu tới cuối, vừa làm vừa ghi lại từng bước. Đếm xem bao nhiêu bước. Đó chính là số dòng code bạn sắp phải viết.

⚖ Hay bị nhầm với thuật ngữ khác

← Xem tất cả thuật ngữ