Bỏ qua

Module 02: Prompt Engineering Cho QC — Viết Yêu Cầu Test Rõ Ràng

🎯 Mục Tiêu Module

  • Hiểu tại sao Prompt quan trọng trong framework
  • Biết cách viết Prompt Template chuẩn
  • Thực hành chuyển yêu cầu test thô thành Prompt chuẩn
  • Hiểu nguyên tắc "Garbage In, Garbage Out"

2.1. Tại Sao Prompt Quan Trọng?

Nguyên tắc: Garbage In, Garbage Out

┌─────────────────────────────────────────────────────┐
│                                                     │
│  Prompt không rõ ràng ──► AI hiểu sai ──► Code sai │
│                                                     │
│  Prompt rõ ràng ────────► AI hiểu đúng ──► Code đúng│
│                                                     │
└─────────────────────────────────────────────────────┘

Ví dụ thực tế

❌ Prompt tệ:

"Test cái trang đăng nhập"

Vấn đề: - Không có URL - Không có bước cụ thể - Không có kết quả mong muốn - Không có test data - AI phải tự suy luận → dễ sai

✅ Prompt tốt (Thực tế khi chat với AI):

**URL:** https://practice.automationtesting.in/my-account/
**Test Scope:** Đăng nhập thành công

**Steps:**
1. Mở trang đăng nhập
2. Nhập "testuser123" vào ô Username
3. Nhập "Test@123456" vào ô Password
4. Click nút "Login"

**Assertions:**
- Đảm bảo text "Hello testuser123" hiển thị trên màn hình
- Đảm bảo URL hiện tại chứa chuỗi `/my-account/`

Lợi ích: - AI biết chính xác cần làm gì - Có test data cụ thể - Có assertion để kiểm tra kết quả - Có thể tái sử dụng


2.2. Prompt Template Chuẩn

Cấu trúc Prompt Template (Khuyên dùng Markdown)

Thực tế khi làm việc với AI IDE (như Antigravity), bạn không cần gõ YAML cứng nhắc. Viết bằng Markdown theo gạch đầu dòng là cách tự nhiên nhất để AI hiểu.

**1. THÔNG TIN CHUNG**
- **URL:** {URL trang web cần test}
- **Test Scope:** {Mô tả ngắn gọn luồng test}

**2. DỮ LIỆU ĐẦU VÀO (Nếu có)**
- Tài khoản: {Username} / {Password}

**3. CÁC BƯỚC THỰC HIỆN (STEPS)**
- Step 1: {Hành động} → Điền {Giá trị}
- Step 2: {Hành động} → Bấm {Nút}

**4. KIỂM TRA KẾT QUẢ (ASSERTIONS)**
- Kiểm tra element {Tên element} hiển thị / không hiển thị
- Kiểm tra giá trị {Biến} bằng {Kỳ vọng}

**5. RÀNG BUỘC KỸ THUẬT (CONSTRAINTS)**
- Chỉ dùng user-facing locators của Playwright (`getByRole`, `getByText`, `getByTestId`).
- Hạn chế tối đa việc dùng XPath và CSS Selector dễ gãy.
- Tuyệt đối không dùng `page.waitForTimeout()`. Dùng auto-wait của Playwright.

Giải thích từng phần

Phần Mô tả Ví dụ
TARGET_URL URL trang bắt đầu test https://practice.automationtesting.in/my-account/
TEST_SCOPE Mô tả flow ngắn gọn Đăng nhập thành công
PRIORITY Mức độ quan trọng High
STEPS Các bước thực hiện Nhập username, click Login
DATA_INPUTS Dữ liệu test Username, password
ASSERTIONS Kiểm tra kết quả Thấy text "Hello"
CONSTRAINTS Ràng buộc kỹ thuật Không dùng xpath

2.3. Các Loại Hành Động (Actions)

Click Actions

STEPS:
  1. Click nút "Login"
  2. Click link "My Account"
  3. Click checkbox "Remember me"
  4. Click radio button "Male"

Input Actions

STEPS:
  1. Nhập "testuser" vào ô Username
  2. Nhập "Test@123" vào ô Password
  3. Xóa nội dung ô Search và nhập "Playwright"
STEPS:
  1. Mở trang https://practice.automationtesting.in/
  2. Click link "Shop" để vào trang sản phẩm
  3. Scroll xuống cuối trang

Wait Actions

STEPS:
  1. Chờ trang load xong
  2. Chờ element "Loading" biến mất
  3. Chờ thông báo "Success" xuất hiện

2.4. Các Loại Assertion

Text Assertion

ASSERTIONS:
  - Text "Hello testuser" should be visible
  - Tiêu đề sản phẩm should contain "HTML5 Forms"
  - Giá sản phẩm should be "$18.00"

Element Assertion

ASSERTIONS:
  - Nút "Add to basket" should be visible
  - Link "Logout" should be clickable
  - Ảnh sản phẩm should be displayed

URL Assertion

ASSERTIONS:
  - URL should contain "/my-account/"
  - URL should be "https://practice.automationtesting.in/"

Count Assertion

ASSERTIONS:
  - Số lượng sản phẩm trong giỏ should be 3
  - Số lượng item trong danh sách should be 6

2.5. Quy Tắc Viết Prompt

Quy tắc 1: Cụ thể, không mơ hồ

❌ "Click vào nút"
✅ "Click nút 'Add to basket' có text 'Add to basket'"

❌ "Nhập dữ liệu"
✅ "Nhập 'testuser@gmail.com' vào ô Email"

Quy tắc 2: Mỗi step chỉ làm 1 việc

❌ "Nhập username và password rồi click Login"
  1. Nhập "testuser" vào ô Username
  2. Nhập "Test@123" vào ô Password
  3. Click nút "Login"

Quy tắc 3: Luôn có assertion

❌ Không có assertion → Không biết test pass hay fail
✅ Có assertion rõ ràng → Tự động kiểm tra kết quả

Quy tắc 4: Gộp hoặc tách Test Data rõ ràng

❌ Hardcode lộn xộn trong bước: "Nhập tài khoản 1 rồi nhập tài khoản 2"
✅ Liệt kê dữ liệu lên trên hoặc đưa trực tiếp vào câu văn một cách dứt khoát:
  "Nhập 'testuser' vào ô Username và 'Test@123' vào ô Password"

Quy tắc 5: Mô tả kết quả mong muốn rõ ràng

❌ "Click Login" (AI sẽ viết code click xong rồi... thôi)
✅ "Click nút 'Login', chờ quá trình xử lý xong và chuyển sang trang Dashboard"

2.6. Skill 1 — AI Agent Chuẩn Hóa Prompt

Skill 1 làm gì?

┌─────────────────────────────────────────────────────┐
│                                                     │
│  Input thô từ QC                                    │
│  "Test đăng nhập trang automation testing"          │
│                                                     │
│                    ▼                                │
│                                                     │
│  Skill 1 (AI Agent)                                 │
│  - Phân tích yêu cầu                               │
│  - Map vào Prompt Template                          │
│  - Kiểm tra thiếu thông tin                         │
│  - Hỏi lại QC nếu cần                              │
│                                                     │
│                    ▼                                │
│                                                     │
│  Output: Prompt chuẩn                               │
│  - TARGET_URL: ...                                  │
│  - STEPS: ...                                       │
│  - ASSERTIONS: ...                                  │
│  - DATA_INPUTS: ...                                 │
│                                                     │
└─────────────────────────────────────────────────────┘

Skill 1 cần hỏi lại khi thiếu

Thông tin thiếu Hành động
URL Hỏi ngay — Không thể test nếu không có URL
Steps cụ thể Hỏi — Cần biết chính xác cần làm gì
Assertion Cảnh báo — Vẫn cho phép tiếp tục nhưng đánh dấu [TODO]
Test data Gợi ý — Đề xuất giá trị mặc định, đánh dấu [SUGGESTED]

Ví dụ Skill 1 hỏi lại

QC: "Test đăng nhập"

Skill 1: Tôi cần thêm thông tin:

1. URL trang đăng nhập là gì?
2. Username và password test là gì?
3. Sau khi đăng nhập thành công, mong đợi thấy gì?

Hoặc tôi có thể dùng giá trị mặc định:

- URL: https://practice.automationtesting.in/my-account/
- Username: [SUGGESTED] testuser
- Password: [SUGGESTED] Test@123
- Expected: [TODO] — Bạn bổ sung sau

📝 Bài Tập

Bài tập 1: Viết Prompt Template

Chuyển yêu cầu test sau thành Prompt Template chuẩn:

Yêu cầu: Test flow mua hàng trên trang automation testing
- Vào shop
- Chọn sản phẩm "HTML5 Forms"
- Thêm vào giỏ
- Kiểm tra giỏ hàng có sản phẩm
- Thanh toán

Bài tập 2: Tìm lỗi Prompt

Tìm lỗi trong Prompt sau và sửa lại:

TARGET_URL: practice.automationtesting.in
TEST_SCOPE: Login
STEPS:

1. Nhập thông tin
2. Click Login
3. Kiểm tra

Bài tập 3: Viết 3 Prompt

Viết 3 Prompt Template cho 3 flow trên https://practice.automationtesting.in/:

  1. Flow đăng ký tài khoản
  2. Flow tìm kiếm sản phẩm
  3. Flow liên hệ (Contact)

✅ Checklist Hoàn Thành Module

  • [ ] Hiểu tại sao Prompt quan trọng
  • [ ] Biết cấu trúc Prompt Template
  • [ ] Biết các loại Action
  • [ ] Biết các loại Assertion
  • [ ] Nắm 5 quy tắc viết Prompt
  • [ ] Hiểu vai trò của Skill 1
  • [ ] Hoàn thành bài tập