Site icon Khoa Phạm BK Blog

Ứng dụng AI trong kiểm thử tự động phần mềm: cách tiếp cận và workflow thực tế

Nếu cách bạn “dùng AI cho test” vẫn là paste stack trace vào chat rồi copy đoạn code lạ vào repo — khả năng cao team sẽ sớm gặp flaky test, leak secret và PR bị kẹt vì không ai hiểu test đang assert cái gì. Mình không muốn thêm một layer hype nữa; mình muốn một workflow bạn có thể mang vào sprint tuần sau.

Ảnh: Unsplash — Christopher Gower.

AI trong automation testing là “trợ lý có trí nhớ ngắn”, không phải QA thay thế

Mình hay ví LLM giống đồng nghiệp mới vào dự án: đọc nhanh, viết nhanh, nhưng không tự biết luật nội bộ của team bạn — selector ưu tiên cái nào, fixture dữ liệu lấy ở đâu, branch nào được phép chạy test destructive. Nhiệm của mình là neo ngữ cảnh đủ chặt để output của AI có thể review và merge được.

AI sinh test nhanh — nhưng “đúng nghiệp vụ” và “ổn định trên CI” là hai trận đánh khác nhau.

Ba lớp việc nên tách rõ trước khi mở tab chat

Workflow 5 bước mình dùng khi “AI hóa” một luồng regression

  1. Đóng băng phạm vi: một luồng, một môi trường (local/docker/staging), một trình duyệt mục tiêu.
  2. Sinh checklist kiểm thử thủ công trước: bắt AI viết bullet theo Given–When–Then; mình sửa tay các bước mơ hồ.
  3. Sinh skeleton automation: file test, hook beforeEach, page object mỏng — chưa nhồi assert phức tạp.
  4. Harden selector + ổn định timing: ưu tiên locator ổn định, tránh sleep mù; chờ điều kiện mạng lưới rõ ràng.
  5. Gắn CI như cổng chất lượng: chạy trên PR nhỏ, báo artifact trace khi fail; flaky được log riêng.
Ảnh: Unsplash — James Harrison.

Prompt mẫu: từ acceptance criteria sang Playwright (TypeScript)

Dán khối dưới vào chat/coding agent của bạn, thay ngoặc vuông bằng repo thật. Mục tiêu là ép AI tuân policy thay vì bịa API lạ.

Bạn là assistant giúp viết test Playwright (TypeScript) cho team [TÊN_TEAM].

Ngữ cảnh:
- App: [MÔ_TẢ_NGẮN]
- URL base staging: process.env.BASE_URL (không hardcode prod)
- Selector policy: ưu tiên getByRole / getByTestId; tránh XPath dài
- Không dùng page.waitForTimeout trừ khi giải thích được lý do

Acceptance criteria:
1) [GIVEN_WHEN_THEN_1]
2) [GIVEN_WHEN_THEN_2]

Yêu cầu output:
- Một file test duy nhất, import @playwright/test
- beforeEach: login fixture hoặc mock API [GHI_RÕ_CÁCH_TEAM_LÀM]
- Mỗi bước có comment ngắn nối với acceptance criterion
- Assert cụ thể: URL, text hiển thị, request network (nếu cần)

Hãy in ra code đầy đủ, không bỏ sót import.

Sau khi có code, mình luôn chạy local một lần, rồi mới cho AI “vòng 2” để tách page object hoặc thêm case biên — tránh refactor sớm trên nền code chưa chạy được.

Test data, secret và môi trường: đừng để AI tự quyết

LLM không biết vault của công ty bạn đang đặt ở đâu. Mình cho AI thấy shape của env (process.env.E2E_USER) chứ không dán password. Với dữ liệu random, mình để AI sinh factory theo schema (faker seed cố định trên CI để reproduce).

Ảnh: Unsplash — Danial RiCaRoS.

Agent exploratory và self-healing: hữu ích nhưng dễ “tự sướng”

Agent có thể lang thang UI để tìm crash hay layout break — giống một đợt smoke exploratory nhanh. Self-healing selector nghe hay, nhưng nếu không log diff rõ ràng, bạn sẽ mất niềm tin vào chính báo đỏ của pipeline. Mình chỉ bật các cơ chế tự sửa khi có telemetry + diff review đi kèm.

Nói thẳng phần giới hạn — đừng giao hết cho AI những thứ sau

Ảnh: Unsplash — Carlos Muza.

Tổng kết và việc nên làm ngay tuần tới

AI trong automation testing mạnh nhất ở chỗ rút ngắn thời gian từ ý tưởng đến skeleton có thể chạy — miễn là bạn giữ được chuẩn selector, dữ liệu và cổng CI. Đừng để repo thành bảo tàng đoạn code mà không ai dám xóa.

Tóm lại những gì cần nhớ:

Nếu bạn chưa thử, hãy chọn một luồng regression đang làm tay đau nhất, viết acceptance criteria ngắn, chạy prompt mẫu ở trên và mở PR chỉ với file test đó — không refactor dàn trải. Phần còn lại sẽ thành thói quen.

Chúc anh em code vui! 🚀

Tags: #khoaphambk #AI #AutomationTesting #QA #Playwright #Cypress #DevOps

Exit mobile version