Lộ trình 90 ngày từ Manual sang Automation (có AI hỗ trợ)
Kế hoạch 3 tháng cho QA manual: nền tảng tháng 1, Playwright tháng 2, CI và ổn định hoá tháng 3 — kèm cách dùng AI để học nhanh hơn mà không phụ thuộc vào nó.
“Muốn chuyển sang automation nhưng không biết bắt đầu từ đâu” — đây có lẽ là câu hỏi phổ biến nhất trong các nhóm QA. Tài liệu thì nhiều, khoá học thì lắm, nhưng khi vừa đi làm full-time vừa học, bạn cần một lộ trình ngắn, thực tế và gắn với công việc hằng ngày.
Dưới đây là lộ trình 90 ngày, mỗi ngày khoảng 1 giờ. Mục tiêu cuối cùng không phải là “biết Playwright”, mà là có 10–20 test hồi quy thật chạy tự động trên dự án của bạn.
Trước khi bắt đầu: chọn đúng mục tiêu
Đừng chọn mục tiêu “tự động hoá toàn bộ test case”. Hãy chọn một luồng quan trọng nhất của sản phẩm — luồng mà nếu hỏng thì cả team phải dừng việc. Ví dụ: đăng nhập → xem danh mục → đặt lệnh. Mọi bài tập trong 90 ngày sẽ xoay quanh luồng này.
Tiêu chí chọn test để tự động hoá:
- Ổn định: tính năng đã qua vòng test đầu, giao diện ít thay đổi.
- Giá trị cao: hỏng thì ảnh hưởng nhiều người dùng.
- Chạy thường xuyên: cần kiểm lại sau mỗi lần release.
Tháng 1: Nền tảng
Tuần 1–2: Hiểu web hoạt động thế nào
- DevTools: tab Elements (đọc cấu trúc HTML), Network (xem request/response), Console (đọc lỗi).
- HTTP cơ bản: method, status code, header, JSON.
- API: dùng Postman hoặc
curlgọi thử vài API của dự án.
Tuần 3–4: JavaScript/TypeScript vừa đủ
Bạn không cần thành lập trình viên. Chỉ cần:
- Biến, hàm, mảng, object, vòng lặp, điều kiện.
async/await— phần quan trọng nhất vì mọi thao tác trên trình duyệt đều bất đồng bộ.- Đọc hiểu thông báo lỗi.
Dùng AI ở giai đoạn này: nhờ AI giải thích từng dòng code bạn không hiểu, hoặc ra bài tập nhỏ rồi chấm bài cho bạn. Đừng nhờ nó viết hộ rồi copy — bạn sẽ không học được gì.
Kết quả tháng 1: đọc hiểu được một đoạn code test ngắn và tự gọi được API của dự án.
Tháng 2: Playwright
Tuần 5: Cài đặt và test đầu tiên
npm init playwright@latest
Lệnh trên tạo sẵn cấu trúc thư mục, file cấu hình và một test mẫu. Chạy thử:
npx playwright test
npx playwright show-report
Dùng npx playwright codegen <url> để ghi lại thao tác thành code — rất hữu ích để học cách Playwright tìm phần tử.
Tuần 6: Locator và assertion
Hai thứ quyết định test của bạn ổn định hay chập chờn.
Ưu tiên locator theo thứ người dùng nhìn thấy:
page.getByRole('button', { name: 'Đặt lệnh' });
page.getByLabel('Số lượng');
page.getByText('Lệnh đã được gửi');
Tránh CSS selector phụ thuộc cấu trúc như div > div:nth-child(3) > span — chỉ cần Dev thêm một thẻ là test vỡ. Nếu không có cách nào khác, nhờ Dev thêm data-testid.
Dùng assertion có tự chờ:
await expect(page.getByText('Lệnh đã được gửi')).toBeVisible();
Playwright tự chờ tới khi điều kiện đúng (hoặc hết thời gian), nên bạn gần như không cần waitForTimeout.
Tuần 7–8: Viết test cho luồng đã chọn
import { test, expect } from '@playwright/test';
test('đổi kỳ 5Y thì chart cập nhật', { tag: '@regression' }, async ({ page }) => {
await page.goto('/thi-truong/vang');
await page.getByRole('tab', { name: '5Y' }).click();
await expect(page.getByRole('tab', { name: '5Y' })).toHaveAttribute('aria-selected', 'true');
await expect(page.getByTestId('price-chart')).toBeVisible();
});
Thêm test tầng API cho cùng luồng — chạy nhanh hơn và ít chập chờn hơn test giao diện:
test('API giá vàng kỳ 5Y trả dữ liệu', { tag: '@regression' }, async ({ request }) => {
const res = await request.get('/api/v1/prices', { params: { symbol: 'GOLD', period: '5Y' } });
expect(res.status()).toBe(200);
expect((await res.json()).data.length).toBeGreaterThan(0);
});
Chạy riêng nhóm hồi quy:
npx playwright test --grep @regression
Kết quả tháng 2: 10–20 test cho luồng quan trọng, chạy ổn định trên máy bạn.
Tháng 3: CI và ổn định hoá
Tuần 9–10: Chạy tự động trên GitHub Actions
name: Regression
on:
workflow_dispatch:
push:
branches: [develop]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: 22
- run: npm ci
- run: npx playwright install --with-deps chromium
- run: npx playwright test --grep @regression
env:
BASE_URL: ${{ vars.STAGING_URL }}
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: playwright-report
path: playwright-report/
Trong playwright.config.ts, đặt use: { baseURL: process.env.BASE_URL } để cùng một bộ test chạy được trên nhiều môi trường. Mật khẩu tài khoản test đặt trong Secrets của repo, không bao giờ ghi vào code.
Tuần 11: Xử lý test chập chờn (flaky)
Test lúc pass lúc fail là kẻ thù số một của automation — team sẽ nhanh chóng bỏ qua kết quả. Cách xử lý:
- Bật trace khi chạy lại:
retriestrong cấu hình kết hợptrace: 'on-first-retry', rồi mở trace để xem từng bước. - Thay mọi
waitForTimeoutbằng assertion có tự chờ. - Mỗi test tự chuẩn bị dữ liệu của mình, không phụ thuộc thứ tự chạy.
- Test nào chập chờn mà chưa sửa được thì tạm tách ra, đừng để nó làm nhiễu cả bộ.
Tuần 12: Đưa vào quy trình của team
- Thống nhất khi nào chạy: sau mỗi lần merge vào nhánh chính, trước mỗi lần go-live.
- Ai xem kết quả, test fail thì ai xử lý.
- Nhờ Dev review code test của bạn — cách học nhanh nhất.
Kết quả tháng 3: bộ test hồi quy chạy tự động, có báo cáo, team tin vào kết quả.
AI giúp được gì, và không giúp được gì
Nên dùng AI để:
- Giải thích code, thông báo lỗi, khái niệm mới.
- Viết bản nháp test từ test case có sẵn — rồi bạn đọc và sửa từng dòng.
- Gợi ý locator, refactor code lặp lại.
- Đọc trace và gợi ý nguyên nhân test fail.
Đừng giao cho AI:
- Quyết định test nào cần tự động hoá — việc này cần hiểu rủi ro sản phẩm.
- Merge code test mà bạn chưa hiểu.
- Kết luận một test fail là “do môi trường” mà chưa kiểm lại bằng tay.
Kết
90 ngày không biến bạn thành chuyên gia automation, nhưng đủ để bạn có kết quả thật trên dự án thật — thứ có giá trị hơn mọi chứng chỉ khi nói chuyện với quản lý hay nhà tuyển dụng. Và quan trọng hơn: mỗi test hồi quy chạy tự động là một lần bạn không phải click lại bằng tay trước giờ release.