CYBERSOFT
Đăng nhập

Codegen + Auto-assertions + CLI/skills mode cho AI coding agent

Chuyên công nghệDịch vụ SaaSPlaywrightAI AgentTipNền tảng
🗓 1 tháng trước21 phút đọc·👁 1,015 lượt xem👤 323 người đọc

Dùng codegen chuyên nghiệp: ghi luồng, auto-assertion toBeVisible() mới, dọn dẹp mã sinh ra thành POM, chế độ CLI/skills tiết kiệm token cho AI agent, cặp công cụ với con người, cạm bẫy locator giòn và góc phỏng vấn.

1. Codegen là gì và vì sao đội QA vẫn cần nó năm 2026

Codegen là công cụ ghi-lại-thao-tác của Playwright: bạn mở trình duyệt bằng lệnh, thực hiện các thao tác như một người dùng thật, và Playwright tự sinh ra mã kiểm thử TypeScript hoặc JavaScript tương ứng. Nhiều người tưởng codegen chỉ dành cho người mới, nhưng thực tế ở các đội lớn nó vẫn là điểm khởi đầu nhanh nhất để dựng khung một bộ test. Thay vì gõ tay từng locator, ta để công cụ đề xuất locator ưu tiên theo vai trò truy cập, rồi con người tinh chỉnh lại. Điều quan trọng cần nhớ là codegen sinh ra bản nháp, không phải sản phẩm cuối. Bài viết này đi sâu vào cách dùng codegen một cách chuyên nghiệp, kết hợp với auto-assertion mới và chế độ CLI thân thiện với AI coding agent.

  • Sinh nhanh khung test và locator ưu tiên theo vai trò (getByRole).
  • Học locator tốt bằng cách quan sát công cụ gợi ý gì.
  • Ghi lại luồng phức tạp mà gõ tay dễ sai (nhiều bước, nhiều iframe).
  • Bản nháp để review, không phải mã cuối cần dọn dẹp.
Codegen không thay thế tư duy thiết kế test. Nó tăng tốc phần cơ khí (gõ locator, mở form), còn phần oracle — khẳng định bất biến nghiệp vụ — vẫn là việc của người kiểm thử.

2. Khởi động phiên codegen và các chế độ đầu ra

Để bắt đầu, bạn chạy lệnh codegen kèm URL trang cần kiểm thử. Playwright mở một cửa sổ trình duyệt kèm một cửa sổ Inspector hiển thị mã sinh ra theo thời gian thực. Bạn có thể chọn ngôn ngữ đích, đặt kích thước màn hình, thậm chí nạp sẵn trạng thái đăng nhập từ tệp storage state để không phải đăng nhập lại mỗi lần ghi. Trên máy CI hoặc trong container, bạn thường ghi ở chế độ headed trên máy cá nhân rồi copy mã sang. Điểm mạnh của codegen hiện đại là nó ưu tiên locator bền vững thay vì XPath giòn.

bash
# Ghi test cơ bản
npx playwright codegen https://app.demo.local/login

# Chọn ngôn ngữ đích + kích thước màn hình
npx playwright codegen --target=typescript --viewport-size=1280,800 https://app.demo.local

# Nạp sẵn trạng thái đăng nhập để ghi luồng cần auth
npx playwright codegen --load-storage=auth.json https://app.demo.local/dashboard

# Lưu trạng thái đăng nhập sau khi login thủ công trong cửa sổ codegen
npx playwright codegen --save-storage=auth.json https://app.demo.local/login
1 · RECORD click "Đăng nhập" fill email assert visible 2 · GENERATE getByRole('button', {name:'Login'}) expect(x).toBeVisible() // auto assertion 3 · REVIEW stable locator xoá nth() giòn POM + tên hoá
Ba pha của codegen: Record → Generate (kèm auto-assertion) → Review/dọn dẹp.
💡 Dùng --save-storage một lần để bắt trạng thái đăng nhập, rồi --load-storage cho mọi phiên ghi sau. Bạn tránh nhập OTP/2FA lặp đi lặp lại và giữ mã ghi được sạch, chỉ chứa nghiệp vụ thật.

3. Auto-assertions: toBeVisible() sinh tự động (v1.57)

Trước đây codegen chỉ ghi lại hành động: click, fill, press. Từ phiên bản 1.57, codegen còn tự sinh ra các assertion cơ bản, đặc biệt là toBeVisible(). Khi bạn di chuột lên một phần tử trong chế độ assertion, Inspector cho phép chèn một khẳng định rằng phần tử đó hiển thị, có văn bản gì, hoặc ở trạng thái checked. Điều này giải quyết một than phiền kinh điển: mã ghi được không có oracle nên chỉ mô phỏng thao tác chứ không thực sự kiểm chứng điều gì. Auto-assertion đưa các điểm kiểm tra vào ngay lúc ghi, giúp test có ý nghĩa hơn ngay từ bản nháp.

typescript
// Mã codegen v1.57 sinh ra — kèm assertion tự động
import { test, expect } from '@playwright/test';

test('login flow', async ({ page }) => {
  await page.goto('https://app.demo.local/login');
  await page.getByLabel('Email').fill('qa@demo.local');
  await page.getByLabel('Mật khẩu').fill('S3cret!');
  await page.getByRole('button', { name: 'Đăng nhập' }).click();

  // Assertion tự sinh khi ta hover phần tử ở chế độ assertion:
  await expect(page.getByRole('heading', { name: 'Bảng điều khiển' })).toBeVisible();
  await expect(page.getByTestId('user-menu')).toBeVisible();
});
⚠️ toBeVisible() chỉ là điểm neo, KHÔNG phải oracle nghiệp vụ. Nó khẳng định giao diện xuất hiện, không khẳng định số dư đúng, tồn kho không âm, hay tiền được bảo toàn. Sau khi ghi, hãy thay/bổ sung bằng assertion trên bất biến thật.
🔒

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 23% 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!