@relipa/ai-flow-kit 0.1.2-beta.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/bin/aiflow.js +40 -1
- package/custom/harness/playwright/.env.example +10 -0
- package/custom/harness/playwright/playwright.config.ts +34 -0
- package/custom/harness/playwright/tests/e2e/auth.setup.ts +25 -0
- package/custom/harness/playwright/tests/e2e/fixtures/test.ts +6 -0
- package/custom/harness/playwright/tests/e2e/pages/BasePage.ts +9 -0
- package/custom/harness/playwright/tests/e2e/support/auth.ts +5 -0
- package/custom/mcp-presets/playwright.json +8 -0
- package/custom/rules/test-patterns.md +70 -0
- package/custom/skills/automation-testing/SKILL.md +239 -0
- package/custom/skills/automation-testing/templates/BasePage.ts +29 -0
- package/custom/skills/automation-testing/templates/PageObject.example.ts +29 -0
- package/custom/skills/automation-testing/templates/playwright.config.ts +39 -0
- package/custom/skills/automation-testing/templates/spec.example.ts +29 -0
- package/custom/skills/coverage-check/SKILL.md +202 -0
- package/custom/skills/evidence-aggregation/SKILL.md +246 -0
- package/custom/skills/execute-flow/SKILL.md +479 -0
- package/custom/skills/execute-flow/templates/playwright.config.ts +39 -0
- package/custom/skills/generate-test-report/SKILL.md +99 -0
- package/custom/skills/generate-test-report/templates/test-report.md +58 -0
- package/custom/skills/generate-testcase/SKILL.md +303 -0
- package/custom/skills/generate-testcase/templates/testcase.md +88 -0
- package/custom/skills/log-bug/SKILL.md +131 -0
- package/custom/skills/pr-impact-analysis/SKILL.md +180 -0
- package/custom/skills/retest-orchestration/SKILL.md +191 -0
- package/custom/skills/script-sync/SKILL.md +208 -0
- package/custom/skills/test-analysis/SKILL.md +262 -0
- package/custom/templates/shared/gate-workflow.md +306 -2
- package/docs/common/CHANGELOG.md +84 -0
- package/docs/common/QUICK_START.md +30 -0
- package/docs/common/cli-reference.md +48 -7
- package/package.json +1 -1
- package/scripts/create-score-excel.js +20 -7
- package/scripts/detect.js +10 -0
- package/scripts/guide.js +9 -0
- package/scripts/prompt.js +36 -0
- package/scripts/scaffold-playwright.js +106 -0
- package/scripts/task.js +21 -7
- package/scripts/update.js +124 -124
- package/scripts/use.js +30 -12
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: generate-testcase
|
|
3
|
+
description: Use when TESTER needs to create test checklist or test cases from requirements. Follows 5-step process across Gate 2 Phase 2a (Dev Artifacts Check + scenarios/checklist), 2b (generate testcase + test-plan.md), 2c (review & optimize with action list). TESTER must approve each phase before AI proceeds.
|
|
4
|
+
keywords: testcase, checklist, qa, testing, test plan, scenarios, validation, boundary value, equivalence partitioning
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Generate Testcase — Gate 2 (Phase 2a → 2c)
|
|
8
|
+
|
|
9
|
+
> **Phạm vi:** Gate 2 Phase 2a → 2b → 2c trong workflow 4-gate (`docs/workflow.md`)
|
|
10
|
+
> **TESTER phải gõ `APPROVED` sau mỗi bước — AI KHÔNG tự động chuyển bước.**
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Quy trình 5 bước (theo thứ tự, không bỏ qua)
|
|
15
|
+
|
|
16
|
+
### Bước 1 — Phân tích Requirement
|
|
17
|
+
|
|
18
|
+
Trước khi tạo bất kỳ testcase nào:
|
|
19
|
+
- Đọc `test-plan/test-analysis.md` (Gate 1 output đã approved)
|
|
20
|
+
- Xác định: scope, field types, business rules, validations, roles
|
|
21
|
+
- Nếu requirement chưa rõ → hỏi TESTER từng câu một, chờ trả lời
|
|
22
|
+
- **KHÔNG tạo testcase ở bước này**
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
### Bước 2 — Dev Artifacts Check (Phase 2a — trước checklist)
|
|
27
|
+
|
|
28
|
+
Xác định phạm vi ảnh hưởng thật từ code dev **trước khi** generate scenarios:
|
|
29
|
+
|
|
30
|
+
- **Nếu TESTER khai báo `PR: <url>`** hoặc AI phát hiện PR link trên ticket → **invoke `pr-impact-analysis` skill**:
|
|
31
|
+
- Fetch PR diff qua `gh pr view`, phân tích theo layer, map code → regression scope
|
|
32
|
+
- Lưu kết quả vào `test-plan/impact-analysis.md`
|
|
33
|
+
- Lấy danh sách regression scenarios để bổ sung vào checklist Bước 3
|
|
34
|
+
- **Nếu chưa có PR** → tạo `test-plan/impact-analysis.md` với nội dung "chưa có dev artifacts — sẽ re-check ở Gate 3", **không block bước**
|
|
35
|
+
- **Nếu không có PR nào và ticket không đề cập** → bỏ qua, đi thẳng Bước 3
|
|
36
|
+
|
|
37
|
+
> ⚠️ PR diff chỉ dùng để **mở rộng coverage** (thêm regression TCs). Tuyệt đối không dùng để xác định expected result — expected result chỉ lấy từ ticket/spec của BA/PM.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### Bước 3 — Generate Checklist (Phase 2a)
|
|
42
|
+
|
|
43
|
+
Liệt kê scenarios theo nhóm, output vào `test-plan/checklist.md`:
|
|
44
|
+
|
|
45
|
+
| ID | Scenario/Checklist Item | Mục đích kiểm tra | Expected Result |
|
|
46
|
+
|
|
47
|
+
**Nhóm cần cover:**
|
|
48
|
+
|
|
49
|
+
📗 **Functional**
|
|
50
|
+
- Happy Path / Positive Cases
|
|
51
|
+
- Negative Cases
|
|
52
|
+
- Validation Cases (input validation, format, required fields)
|
|
53
|
+
- Boundary Value Analysis
|
|
54
|
+
- Edge Cases
|
|
55
|
+
- Equivalence Partitioning
|
|
56
|
+
- Decision Table Cases
|
|
57
|
+
- State Transition Cases
|
|
58
|
+
- Permission / Role-based Cases
|
|
59
|
+
- UI/UX Cases
|
|
60
|
+
|
|
61
|
+
📘 **Non-Functional**
|
|
62
|
+
- Accessibility Cases (WCAG compliance)
|
|
63
|
+
- Compatibility Cases (Browser/Device/OS)
|
|
64
|
+
- Localization / i18n Cases
|
|
65
|
+
|
|
66
|
+
📙 **Data & Integration**
|
|
67
|
+
- Data Integrity Cases
|
|
68
|
+
- Concurrent Access Cases
|
|
69
|
+
- Integration / API Cases
|
|
70
|
+
- Error Handling / Recovery Cases
|
|
71
|
+
|
|
72
|
+
📕 **Exploratory**
|
|
73
|
+
- Error Guessing
|
|
74
|
+
- Pairwise Testing
|
|
75
|
+
|
|
76
|
+
📙 **Regression** _(nếu Dev Artifacts Check Bước 2 tìm thấy impacted areas)_
|
|
77
|
+
- Mỗi item ghi rõ: "Regression — [vùng ảnh hưởng] — [lý do từ PR diff]"
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
⏸️ GATE 2 — PHASE 2a: SCENARIOS READY
|
|
81
|
+
Scenarios: [N] total
|
|
82
|
+
- Functional: [N] | Non-functional: [N] | Integration: [N] | Exploratory: [N] | Regression: [N]
|
|
83
|
+
→ Review: test-plan/checklist.md
|
|
84
|
+
→ Type APPROVED to proceed to Phase 2b
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
### Bước 4 — Generate Testcase + Test Plan (Phase 2b)
|
|
90
|
+
|
|
91
|
+
> ⚠️ CHỈ TẠO — KHÔNG REVIEW. Review ở Bước 5.
|
|
92
|
+
|
|
93
|
+
**Dùng template:** `templates/testcase.md` — giữ nguyên toàn bộ cột và cấu trúc sections.
|
|
94
|
+
|
|
95
|
+
**Quy tắc TC_ID:** `[ScreenID]_[3 chữ số]`
|
|
96
|
+
- `ScreenID` là **mã màn hình/chức năng theo quy ước của từng dự án** — không cố định. Ví dụ: `AD10_001`, `LOGIN_001`, `ORD_002`, `USR_015`
|
|
97
|
+
- Nếu dự án chưa có convention → hỏi TESTER trước khi tạo TC đầu tiên
|
|
98
|
+
- Nếu đã có TC cũ trong dự án → đọc các file `test-plan/test-cases/` hiện tại để suy ra convention đang dùng
|
|
99
|
+
|
|
100
|
+
**Nhóm testcase theo sections:**
|
|
101
|
+
- **3.1 Access & Authorization** — URL trực tiếp, menu, phân quyền theo role
|
|
102
|
+
- **3.2 UI/UX** — Layout, placeholder, label, dấu *, responsive
|
|
103
|
+
- **3.3 Input Validation** — Theo từng field type (xem Validation Rules bên dưới)
|
|
104
|
+
- **3.4 Business Rules** — Logic nghiệp vụ, unique, dynamic form, save to DB
|
|
105
|
+
- **3.5 Exceptions & Systems** — Double click, mất mạng, back button
|
|
106
|
+
|
|
107
|
+
**Yêu cầu từng cột:**
|
|
108
|
+
- **Steps:** Đánh số `1. 2. 3.` — rõ ràng, execute được ngay
|
|
109
|
+
- **Expected Result:** Cụ thể, verify được — ví dụ: `"Hiển thị thông báo 'Lưu thành công' và chuyển về trang danh sách"`
|
|
110
|
+
- **Severity:** Critical / High / Medium / Low
|
|
111
|
+
- Mỗi testcase độc lập, có thể execute riêng lẻ
|
|
112
|
+
|
|
113
|
+
Output testcases: `test-plan/test-cases/[ScreenID]-testcases.md`
|
|
114
|
+
|
|
115
|
+
**Tạo thêm `test-plan/test-plan.md`** — kế hoạch tổng thể:
|
|
116
|
+
|
|
117
|
+
```markdown
|
|
118
|
+
# Test Plan — [Feature Name]
|
|
119
|
+
|
|
120
|
+
**Ticket:** [ID] | **Date:** [YYYY-MM-DD] | **Tester:** [Name]
|
|
121
|
+
|
|
122
|
+
## 1. Objectives
|
|
123
|
+
[Mục tiêu của đợt testing này — 1-2 câu]
|
|
124
|
+
|
|
125
|
+
## 2. Scope
|
|
126
|
+
- **In-scope:** [danh sách module/màn hình từ test-analysis.md Section 1]
|
|
127
|
+
- **Out-of-scope:** [từ test-analysis.md Section 9]
|
|
128
|
+
|
|
129
|
+
## 3. Test Types
|
|
130
|
+
| Type | Số lượng | Ghi chú |
|
|
131
|
+
|------|---------|---------|
|
|
132
|
+
| Functional (positive) | [N] | |
|
|
133
|
+
| Functional (negative) | [N] | |
|
|
134
|
+
| Edge cases | [N] | |
|
|
135
|
+
| Regression | [N] | từ Dev Artifacts Check |
|
|
136
|
+
| Accessibility / Compatibility | [N] | |
|
|
137
|
+
|
|
138
|
+
## 4. Entry Criteria
|
|
139
|
+
- [ ] Gate 1 APPROVED — test-analysis.md
|
|
140
|
+
- [ ] Test environment sẵn sàng (app running tại BASE_URL)
|
|
141
|
+
- [ ] Test data đã chuẩn bị
|
|
142
|
+
|
|
143
|
+
## 5. Exit Criteria
|
|
144
|
+
- [ ] 100% TCs executed
|
|
145
|
+
- [ ] 0 Critical bugs unresolved
|
|
146
|
+
- [ ] 0 High bugs unresolved (hoặc có deferred plan rõ ràng)
|
|
147
|
+
- [ ] Test report ký duyệt (Gate 4 APPROVED)
|
|
148
|
+
|
|
149
|
+
## 6. Schedule Estimate
|
|
150
|
+
| Phase | Effort |
|
|
151
|
+
|-------|--------|
|
|
152
|
+
| Gate 2 (Planning) | [S/M/L] |
|
|
153
|
+
| Gate 3 (Execution) | [S/M/L] |
|
|
154
|
+
| Gate 4 (Report) | S |
|
|
155
|
+
| **Total** | **[S/M/L/XL]** |
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
⏸️ GATE 2 — PHASE 2b: TESTCASES GENERATED
|
|
160
|
+
Test cases: [N] total ([N] positive / [N] negative / [N] edge)
|
|
161
|
+
Test plan: test-plan/test-plan.md
|
|
162
|
+
→ Review: test-plan/test-cases/
|
|
163
|
+
→ Type APPROVED to proceed to Phase 2c (Review & Optimize)
|
|
164
|
+
→ Or provide feedback to update
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
### Bước 5 — Review & Optimize (Phase 2c)
|
|
170
|
+
|
|
171
|
+
> ⚠️ CHỈ REVIEW — KHÔNG tạo lại toàn bộ.
|
|
172
|
+
|
|
173
|
+
Kiểm tra theo thứ tự, output vào `test-plan/review-report.md`:
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
1. ❌ DUPLICATE TESTCASE
|
|
177
|
+
| TC_ID | TC trùng với | Đề xuất |
|
|
178
|
+
|
|
179
|
+
2. ⚠️ TESTCASE CÓ VẤN ĐỀ
|
|
180
|
+
| TC_ID | Vấn đề | Đề xuất sửa |
|
|
181
|
+
(Scenario mơ hồ / Steps không cụ thể / Expected Result không verify được / thiếu Precondition)
|
|
182
|
+
|
|
183
|
+
3. 🔧 TESTCASE CẦN OPTIMIZE
|
|
184
|
+
| TC_ID | Vấn đề | Đề xuất |
|
|
185
|
+
(Quá dài → tách / có thể gộp / thiếu test data)
|
|
186
|
+
|
|
187
|
+
4. ➕ MISSING TESTCASE
|
|
188
|
+
(Case chưa cover → đề xuất TC mới đầy đủ với TC_ID, Scenario, Steps, Expected Result)
|
|
189
|
+
|
|
190
|
+
5. 📊 COVERAGE GAPS
|
|
191
|
+
(Vùng/feature chưa phủ đủ, business rules còn thiếu, edge cases bị miss)
|
|
192
|
+
|
|
193
|
+
6. ♿ ACCESSIBILITY / COMPATIBILITY CHECK
|
|
194
|
+
(Đã đủ chưa? Đề xuất bổ sung nếu thiếu)
|
|
195
|
+
|
|
196
|
+
7. 📋 DANH SÁCH CẦN SỬA
|
|
197
|
+
Tổng hợp TẤT CẢ action items từ sections 1–6, sắp xếp theo Priority:
|
|
198
|
+
|
|
199
|
+
| TC_ID | Vấn đề | Đề xuất sửa | Priority |
|
|
200
|
+
|-------|--------|------------|---------|
|
|
201
|
+
| AD10_003 | Duplicate với AD10_001 | Xóa AD10_003 | High |
|
|
202
|
+
| AD10_007 | Expected Result mơ hồ | Sửa thành "Hiển thị error 'Email không hợp lệ'" | High |
|
|
203
|
+
| AD10_012 | Thiếu TC keyboard navigation | Thêm TC mới AD10_015 | Medium |
|
|
204
|
+
| AD10_005 | Steps quá dài, 2 luồng | Tách thành AD10_005 và AD10_016 | Low |
|
|
205
|
+
|
|
206
|
+
Priority: High (phải fix trước Phase 2d) / Medium / Low (có thể defer)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
⏸️ GATE 2 — PHASE 2c: REVIEW COMPLETE
|
|
211
|
+
Issues: [N] duplicate | [N] problematic | [N] to optimize | [N] missing
|
|
212
|
+
→ Review: test-plan/review-report.md
|
|
213
|
+
→ Type APPROVED to proceed to Phase 2d (Coverage Check & Final Output)
|
|
214
|
+
→ Or provide specific fixes to apply
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Validation Rules — 14 Field Types
|
|
220
|
+
|
|
221
|
+
### 1. String Field (textbox, textarea)
|
|
222
|
+
- **Required:** empty → error; non-empty → accepted
|
|
223
|
+
- **Length:** 0, 1, max-1, max, max+1
|
|
224
|
+
- **Format** (nếu có rule): invalid format, valid format
|
|
225
|
+
- **Special chars:** ký tự đặc biệt (%&# ...), leading/trailing spaces, toàn khoảng trắng
|
|
226
|
+
- **Case sensitivity:** lowercase, uppercase, mixed
|
|
227
|
+
|
|
228
|
+
### 2. Number Field
|
|
229
|
+
- **Required:** empty
|
|
230
|
+
- **Datatype:** số hợp lệ, chữ cái (abc), ký tự đặc biệt (@#$), số âm, 0, thập phân
|
|
231
|
+
- **Range:** value < min → error; = min; between; = max; > max → error
|
|
232
|
+
- **Boundary:** min-1, max+1
|
|
233
|
+
- **Format:** leading zero (00123), overflow int
|
|
234
|
+
|
|
235
|
+
### 3. Radio Button
|
|
236
|
+
- **Required:** không chọn → error; chọn 1 → accepted
|
|
237
|
+
- **Behavior:** mutually exclusive, chuyển đổi option
|
|
238
|
+
- **Boundary:** test từng option
|
|
239
|
+
- **Default:** verify nếu có default
|
|
240
|
+
|
|
241
|
+
### 4. Checkbox
|
|
242
|
+
- **Required** (nếu có): 0 checked → error; ≥1 → accepted
|
|
243
|
+
- **Behavior:** chọn nhiều, bỏ chọn từng cái, check all, uncheck all
|
|
244
|
+
- **Max selection** (nếu có): = max; > max → error
|
|
245
|
+
- **Default:** verify
|
|
246
|
+
|
|
247
|
+
### 5. Dropdown
|
|
248
|
+
- **Required:** không chọn → error; chọn hợp lệ → accepted
|
|
249
|
+
- **Selection:** từng option, thay đổi selection
|
|
250
|
+
- **Boundary:** option đầu, option cuối, scroll list dài
|
|
251
|
+
- **Data integrity:** label vs value, disabled option
|
|
252
|
+
|
|
253
|
+
### 6. Date Picker
|
|
254
|
+
- **Required, Format sai** (32/13/2025) → error
|
|
255
|
+
- **Range:** ngày < min → error; = min; trong range; = max; > max → error
|
|
256
|
+
- **Boundary:** ngày cuối tháng (28,29,30,31), 29/02 năm nhuận
|
|
257
|
+
- **Input:** nhập tay vs chọn calendar, copy-paste
|
|
258
|
+
|
|
259
|
+
### 7. File Upload
|
|
260
|
+
- **Required, Type:** đúng format → accepted; sai format → error
|
|
261
|
+
- **Size:** < max, = max → accepted; > max → error
|
|
262
|
+
- **File name:** ký tự đặc biệt, tên dài
|
|
263
|
+
- **Multiple** (nếu có): số lượng vượt giới hạn → error
|
|
264
|
+
- **Drag & drop, File spoofing** (đổi đuôi .exe → .jpg, check MIME type)
|
|
265
|
+
|
|
266
|
+
### 8. Password Field
|
|
267
|
+
- **Required, Length:** < min → error; = min → accepted; > max → error
|
|
268
|
+
- **Complexity** (theo rule): thiếu hoa / thường / số / ký tự đặc biệt → error; đủ → accepted
|
|
269
|
+
- **Security:** hiển thị dạng mask, toggle show/hide
|
|
270
|
+
|
|
271
|
+
### 9. Confirm Password
|
|
272
|
+
- Empty → error; không khớp → error; khớp → accepted
|
|
273
|
+
|
|
274
|
+
### 10. Search Field
|
|
275
|
+
- Empty → show all / no result (theo spec)
|
|
276
|
+
- Keyword hợp lệ → trả về đúng kết quả
|
|
277
|
+
- Ký tự đặc biệt, keyword dài, không tồn tại → "No data"
|
|
278
|
+
|
|
279
|
+
### 11. Textarea
|
|
280
|
+
- Length: min/max boundary; rất dài (stress)
|
|
281
|
+
- Multi-line input, copy-paste text dài
|
|
282
|
+
|
|
283
|
+
### 12. Toggle/Switch
|
|
284
|
+
- Default state (ON/OFF); toggle ON→OFF; toggle OFF→ON
|
|
285
|
+
- Ảnh hưởng field khác (enable/disable)
|
|
286
|
+
|
|
287
|
+
### 13. Hidden/System Field
|
|
288
|
+
- Giá trị được set đúng; không bị user chỉnh sửa (inspect element)
|
|
289
|
+
|
|
290
|
+
### 14. Auto-complete
|
|
291
|
+
- Nhập ký tự → hiển thị suggestion; không match → không hiển thị
|
|
292
|
+
- Chọn từ list → đúng value; nhập tự do (nếu cho phép)
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Severity Level
|
|
297
|
+
|
|
298
|
+
| Level | Mô tả |
|
|
299
|
+
|---|---|
|
|
300
|
+
| **Critical** | Crash app, mất data, không vào được màn hình |
|
|
301
|
+
| **High** | Chức năng chính không hoạt động đúng |
|
|
302
|
+
| **Medium** | Chức năng phụ bị ảnh hưởng, workaround có thể có |
|
|
303
|
+
| **Low** | UI/UX nhỏ, cosmetic, không ảnh hưởng chức năng |
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# [Screen_ID]_[Screen_Name] - Test Cases
|
|
2
|
+
|
|
3
|
+
## 1. Thông tin chung
|
|
4
|
+
|
|
5
|
+
| Mục | Chi tiết |
|
|
6
|
+
|:---|:---|
|
|
7
|
+
| **Mã màn hình - Tên màn hình** | [VD: AD10_Create Product] |
|
|
8
|
+
| **Tài liệu tham chiếu (SRS)** | [VD: [Project]_SRS_v1.0] |
|
|
9
|
+
| **Người tạo (Author)** | |
|
|
10
|
+
| **Ngày tạo (Created Date)** | |
|
|
11
|
+
| **Người kiểm duyệt (Reviewer)** | |
|
|
12
|
+
| **Ngày kiểm duyệt (Review Date)** | |
|
|
13
|
+
|
|
14
|
+
## 2. Kết quả kiểm thử tổng hợp (Test Execution Summary)
|
|
15
|
+
|
|
16
|
+
| Vòng kiểm thử (Round) | Đạt (Passed) | Lỗi (Failed) | Chưa test (Untest) | Chờ (Pending) | Tổng số (Total) | Tỷ lệ đạt (%) |
|
|
17
|
+
|:---|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
18
|
+
| Round 1 | 0 | 0 | 0 | 0 | 0 | 0% |
|
|
19
|
+
| Round 2 | 0 | 0 | 0 | 0 | 0 | 0% |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 3. Danh sách Test Cases Chi Tiết
|
|
24
|
+
|
|
25
|
+
### 3.1. Kiểm thử Truy cập & Phân quyền (Access & Authorization)
|
|
26
|
+
|
|
27
|
+
| TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
|
|
28
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
29
|
+
| [ID]_001 | Truy cập trực tiếp qua URL khi chưa đăng nhập | High | Người dùng chưa đăng nhập hệ thống | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống không cho phép truy cập.<br>Tự động chuyển hướng về trang đăng nhập (Login). | | | | | | | | |
|
|
30
|
+
| [ID]_002 | Truy cập trực tiếp qua URL khi đã đăng nhập | Medium | Người dùng đã đăng nhập thành công | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống cho phép truy cập.<br>Hiển thị đúng giao diện màn hình. | | | | | | | | |
|
|
31
|
+
| [ID]_003 | Truy cập qua button/menu điều hướng | Low | Người dùng đang ở màn hình danh sách | 1. Click vào nút "Thêm mới" hoặc menu tương ứng. | - | Hệ thống mở màn hình đăng ký/thực hiện tương ứng thành công. | | | | | | | | |
|
|
32
|
+
|
|
33
|
+
### 3.2. Kiểm thử Giao diện Người dùng (UI/UX)
|
|
34
|
+
|
|
35
|
+
| TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
|
|
36
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
37
|
+
| [ID]_004 | Kiểm tra hiển thị giao diện tổng quan | Low | Màn hình hiển thị bình thường | 1. Quan sát giao diện màn hình.<br>2. Kiểm tra layout, màu sắc, font chữ, khoảng cách giữa các trường. | - | 1. Layout cân đối, font chữ và cỡ chữ đồng nhất.<br>2. Các trường bắt buộc nhập có dấu sao đỏ (*).<br>3. Không có lỗi chính tả.<br>4. Định dạng placeholder hiển thị chính xác theo thiết kế. | | | | | | | | |
|
|
38
|
+
|
|
39
|
+
### 3.3. Kiểm thử Validation các trường nhập liệu (Input Validation)
|
|
40
|
+
|
|
41
|
+
*(Tạo riêng từng bảng hoặc nhóm theo từng Field để dễ theo dõi)*
|
|
42
|
+
|
|
43
|
+
#### * Đối với Trường [Tên Trường] — Text
|
|
44
|
+
|
|
45
|
+
| TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
|
|
46
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
47
|
+
| [ID]_0xx | Kiểm tra giá trị mặc định | Low | Đã truy cập màn hình | 1. Quan sát trường [Tên Trường]. | - | Giá trị mặc định là trống (blank).<br>Hiển thị đúng Placeholder theo thiết kế. | | | | | | | | |
|
|
48
|
+
| [ID]_0xx | Kiểm tra trường bắt buộc nhập để trống | High | Đã truy cập màn hình | 1. Để trống trường [Tên Trường].<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | Empty | 1. Hiển thị thông báo lỗi: "Hãy nhập [Tên Trường]".<br>2. Field bị highlight viền đỏ. | | | | | | | | |
|
|
49
|
+
| [ID]_0xx | Kiểm tra nhập ký tự khoảng trắng (Spaces) | Medium | Đã truy cập màn hình | 1. Nhập toàn khoảng trắng vào trường.<br>2. Bấm nút thực hiện hoặc focus out. | `" "` | Hệ thống xem như để trống.<br>Báo lỗi bắt buộc nhập (nếu là trường Required) hoặc tự động trim khoảng trắng. | | | | | | | | |
|
|
50
|
+
| [ID]_0xx | Kiểm tra nhập khoảng trắng ở đầu/cuối chuỗi | Low | Đã truy cập màn hình | 1. Nhập chuỗi có khoảng trắng ở đầu/cuối.<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | `" data_test "` | Hệ thống tự động cắt bỏ (trim) khoảng trắng ở đầu và cuối chuỗi trước khi lưu vào DB. | | | | | | | | |
|
|
51
|
+
| [ID]_0xx | Kiểm tra nhập độ dài tối thiểu/tối đa (Boundary Value) | Medium | Đã truy cập màn hình, biết Maxlength = N | 1. Nhập chuỗi độ dài N-1 ký tự.<br>2. Nhập chuỗi độ dài N ký tự.<br>3. Nhập chuỗi độ dài > N ký tự. | Chuỗi test tương ứng | - Độ dài <= N: cho phép nhập và lưu bình thường.<br>- Độ dài > N: hệ thống chặn trực tiếp trên UI hoặc báo lỗi hợp lệ. | | | | | | | | |
|
|
52
|
+
| [ID]_0xx | Kiểm tra nhập ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Nhập các ký tự đặc biệt (!@#$%^&*).<br>2. Bấm nút thực hiện. | `"!@#$%"` | Hệ thống lưu trữ đúng định dạng ký tự đã nhập (hoặc báo lỗi nếu có quy định hạn chế định dạng). | | | | | | | | |
|
|
53
|
+
| [ID]_0xx | Kiểm tra thao tác Copy/Paste | Low | Đã truy cập màn hình | 1. Copy một chuỗi hợp lệ.<br>2. Paste vào trường thông tin.<br>3. Bấm nút thực hiện. | - | Cho phép paste dữ liệu vào field thành công và xử lý lưu bình thường. | | | | | | | | |
|
|
54
|
+
|
|
55
|
+
#### * Đối với Trường Số (Number / Price / Quantity)
|
|
56
|
+
|
|
57
|
+
| TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
|
|
58
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
59
|
+
| [ID]_0xx | Kiểm tra nhập chữ cái và ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Cố gắng nhập chữ cái (a, b, c...) hoặc ký tự đặc biệt.<br>2. Bấm nút thực hiện. | `"abc"`, `"@#$"` | UI ngăn không cho nhập chữ cái/ký tự đặc biệt, chỉ chấp nhận chữ số. | | | | | | | | |
|
|
60
|
+
| [ID]_0xx | Kiểm tra nhập số âm | High | Đã truy cập màn hình | 1. Nhập số âm.<br>2. Bấm nút thực hiện. | `-10` | Báo lỗi giá trị phải lớn hơn hoặc bằng 0 (hoặc chặn dấu trừ `-` trực tiếp từ UI). | | | | | | | | |
|
|
61
|
+
| [ID]_0xx | Kiểm tra nhập số thập phân | High | Đã truy cập màn hình | 1. Nhập số có dấu phẩy thập phân.<br>2. Bấm nút thực hiện. | `1.5`, `2,3` | Báo lỗi chỉ chấp nhận số nguyên (hoặc chấp nhận số thập phân tùy đặc tả nghiệp vụ). | | | | | | | | |
|
|
62
|
+
| [ID]_0xx | Kiểm tra hiển thị định dạng phân tách hàng nghìn | Low | Đã truy cập màn hình | 1. Nhập số lớn.<br>2. Focus out khỏi trường nhập liệu. | `1000000` | Số tự động định dạng phân tách hàng nghìn (VD: `1,000,000`). | | | | | | | | |
|
|
63
|
+
|
|
64
|
+
#### * Đối với Trường File Upload (Hình ảnh)
|
|
65
|
+
|
|
66
|
+
| TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
|
|
67
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
68
|
+
| [ID]_0xx | Kiểm tra không upload file (Trường tùy chọn) | Medium | Đã truy cập màn hình | 1. Không chọn file upload.<br>2. Bấm nút thực hiện. | - | Hệ thống cho phép thực hiện thành công mà không báo lỗi. | | | | | | | | |
|
|
69
|
+
| [ID]_0xx | Kiểm tra upload file sai định dạng | High | Định dạng cho phép: jpeg, png | 1. Chọn upload file có định dạng không được phép (xlsx, gif, pdf...).<br>2. Tiến hành upload. | File `.pdf`, `.xlsx` | Upload không thành công. Hiển thị thông báo lỗi đúng thiết kế: "Hình ảnh phải là định dạng jpeg hoặc png." | | | | | | | | |
|
|
70
|
+
| [ID]_0xx | Kiểm tra upload dung lượng vượt quá giới hạn | High | Giới hạn dung lượng: tối đa 10MB | 1. Chọn file có kích thước > 10MB.<br>2. Tiến hành upload. | File kích thước `10.5MB` | Upload thất bại. Hiển thị lỗi cảnh báo: "Dung lượng hình ảnh vượt quá 10MB." | | | | | | | | |
|
|
71
|
+
| [ID]_0xx | Kiểm tra upload file giả mạo đuôi mở rộng (Spoofing) | High | Đã truy cập màn hình | 1. Đổi đuôi file thực thi nguy hiểm `.exe` thành `.jpg`.<br>2. Chọn upload file này. | File `.exe` đổi tên thành `.jpg` | Hệ thống kiểm tra phần thân file (MIME type) thực tế và báo lỗi không đúng định dạng. | | | | | | | | |
|
|
72
|
+
| [ID]_0xx | Kiểm tra kéo thả file (Drag & Drop) | Low | Đã truy cập màn hình | 1. Kéo file ảnh thả vào vùng upload. | File `.png` hợp lệ | Upload file thành công và hiển thị thumbnail ảnh xem trước trên giao diện. | | | | | | | | |
|
|
73
|
+
|
|
74
|
+
### 3.4. Kiểm thử Logic Nghiệp vụ (Business Rules - BR)
|
|
75
|
+
|
|
76
|
+
| TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
|
|
77
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
78
|
+
| [ID]_0xx | Kiểm tra ràng buộc trùng lặp dữ liệu duy nhất (Unique) | High | Đã tồn tại bản ghi trong DB | 1. Nhập thông tin trùng khóa chính/mã duy nhất với bản ghi cũ.<br>2. Điền các thông tin hợp lệ khác.<br>3. Bấm Đăng ký. | Mã trùng lặp | Hệ thống báo lỗi trùng lặp: "Mã/Tên này đã tồn tại trong hệ thống. Vui lòng kiểm tra lại." | | | | | | | | |
|
|
79
|
+
| [ID]_0xx | Kiểm tra logic liên kết dữ liệu động (Dynamic Form Control) | High | Điều kiện thay đổi hiển thị | 1. Tích chọn/Bỏ tích chọn [Checkbox điều kiện]. | - | Giao diện tự động thay đổi hiển thị ẩn/hiện hoặc disable/enable các trường thông tin liên quan theo đúng mô tả Business Rule. | | | | | | | | |
|
|
80
|
+
| [ID]_0xx | Kiểm tra lưu dữ liệu vào Database thành công | Critical | Nhập đầy đủ và chính xác tất cả dữ liệu hợp lệ | 1. Nhập toàn bộ dữ liệu hợp lệ.<br>2. Bấm nút Đăng ký.<br>3. Kiểm tra DB và màn hình danh sách. | Dữ liệu hợp lệ | 1. Lưu bản ghi mới thành công.<br>2. Hiển thị thông báo thành công.<br>3. Dữ liệu trong Database khớp hoàn toàn các trường thông tin đã điền trên UI. | | | | | | | | |
|
|
81
|
+
|
|
82
|
+
### 3.5. Kiểm thử Ngoại lệ & Hệ thống (Exceptions & Systems)
|
|
83
|
+
|
|
84
|
+
| TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
|
|
85
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
86
|
+
| [ID]_0xx | Bấm nút Đăng ký nhiều lần liên tiếp (Double Click) | High | Đã điền đầy đủ dữ liệu hợp lệ | 1. Click liên tiếp nhiều lần vào nút Đăng ký/Lưu. | - | Nút bấm bị disable ngay sau lượt click đầu tiên. Hệ thống chỉ xử lý và tạo duy nhất 1 bản ghi trong DB, không tạo trùng lặp. | | | | | | | | |
|
|
87
|
+
| [ID]_0xx | Kiểm tra mất kết nối mạng đột ngột khi bấm Lưu | High | Điền đầy đủ dữ liệu hợp lệ | 1. Bấm nút Lưu.<br>2. Đồng thời ngắt kết nối mạng. | - | Hệ thống hiển thị loading và thông báo lỗi kết nối mạng, không bị crash hoặc treo màn hình trắng. | | | | | | | | |
|
|
88
|
+
| [ID]_0xx | Kiểm tra nhấn nút Quay lại | Low | Đã điền một số dữ liệu | 1. Nhập một số thông tin.<br>2. Bấm nút Quay lại. | - | Hệ thống chuyển hướng về màn hình danh sách trước đó.<br>Bản ghi mới không được tạo trong DB. | | | | | | | | |
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: log-bug
|
|
3
|
+
description: Use when a test case fails during Gate 3 execution and a bug needs to be logged with full reproduction steps and evidence. Creates a structured bug report file in the bugs/ directory. Different from investigate-bug which is for developers debugging root causes.
|
|
4
|
+
keywords: bug report, log bug, test fail, defect, reproduction steps, evidence, severity, gate 3
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Log Bug — Gate 3
|
|
8
|
+
|
|
9
|
+
> **Phạm vi:** Gate 3 — mỗi khi test case fail, AI tạo file bug report chuẩn trong `bugs/`.
|
|
10
|
+
> **TESTER** xác nhận severity và nội dung trước khi submit lên Backlog/Jira.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Khi nào log bug
|
|
15
|
+
|
|
16
|
+
- Test case fail sau khi execute (Playwright hoặc manual)
|
|
17
|
+
- Actual result khác Expected result — dù là lỗi nhỏ
|
|
18
|
+
- App crash, timeout, lỗi console không mong đợi
|
|
19
|
+
- Hành vi không nhất quán giữa các lần chạy
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Quy trình
|
|
24
|
+
|
|
25
|
+
### Bước 1 — Xác định thông tin bug
|
|
26
|
+
|
|
27
|
+
Thu thập ngay khi test fail:
|
|
28
|
+
- TC ID và tên test case bị fail
|
|
29
|
+
- Actual result nhận được vs Expected result trong testcase
|
|
30
|
+
- Screenshot/log evidence từ `evidence/[TC-ID]/`
|
|
31
|
+
- Browser, OS, build/version đang test
|
|
32
|
+
|
|
33
|
+
### Bước 2 — Đánh giá Severity
|
|
34
|
+
|
|
35
|
+
| Severity | Tiêu chí |
|
|
36
|
+
|---|---|
|
|
37
|
+
| **Critical** | App crash, mất data, không vào được màn hình, security breach |
|
|
38
|
+
| **High** | Chức năng chính không hoạt động, không có workaround |
|
|
39
|
+
| **Medium** | Chức năng phụ bị lỗi, có workaround tạm thời |
|
|
40
|
+
| **Low** | UI/UX nhỏ, cosmetic, typo, không ảnh hưởng chức năng |
|
|
41
|
+
|
|
42
|
+
### Bước 3 — Tạo file bug report
|
|
43
|
+
|
|
44
|
+
**File naming:** `bugs/BUG-[số thứ tự 3 chữ số]-[tên ngắn kebab-case].md`
|
|
45
|
+
**Ví dụ:** `bugs/BUG-001-login-button-not-disabled-on-submit.md`
|
|
46
|
+
|
|
47
|
+
**Dùng template bên dưới.**
|
|
48
|
+
|
|
49
|
+
### Bước 4 — Thông báo TESTER
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
🐛 BUG LOGGED: BUG-[XXX]
|
|
53
|
+
|
|
54
|
+
TC: [TC_ID] — [Tên test case]
|
|
55
|
+
Severity: [Critical / High / Medium / Low]
|
|
56
|
+
File: bugs/BUG-[XXX]-[name].md
|
|
57
|
+
|
|
58
|
+
→ Review bug report
|
|
59
|
+
→ Type RETEST: [TC_ID] after dev fixes to re-execute
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Bug Report Template
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
# BUG-[XXX] — [Tiêu đề mô tả ngắn gọn vấn đề]
|
|
68
|
+
|
|
69
|
+
## Thông tin chung
|
|
70
|
+
|
|
71
|
+
| Property | Value |
|
|
72
|
+
|---|---|
|
|
73
|
+
| **Bug ID** | BUG-[XXX] |
|
|
74
|
+
| **Severity** | Critical / High / Medium / Low |
|
|
75
|
+
| **TC ID** | [TC_ID] |
|
|
76
|
+
| **Reported By** | [Tester Name] |
|
|
77
|
+
| **Report Date** | [Date] |
|
|
78
|
+
| **Status** | Open |
|
|
79
|
+
|
|
80
|
+
## Môi trường
|
|
81
|
+
|
|
82
|
+
| Property | Value |
|
|
83
|
+
|---|---|
|
|
84
|
+
| **Browser** | [Chrome 120 / Firefox 121 / ...] |
|
|
85
|
+
| **OS** | [Windows 11 / macOS / ...] |
|
|
86
|
+
| **Build/Version** | [v1.2.3 / commit hash] |
|
|
87
|
+
| **Test Environment** | [Staging / Dev / UAT] |
|
|
88
|
+
|
|
89
|
+
## Mô tả
|
|
90
|
+
|
|
91
|
+
[Mô tả ngắn gọn vấn đề trong 1-2 câu]
|
|
92
|
+
|
|
93
|
+
## Preconditions
|
|
94
|
+
|
|
95
|
+
[Điều kiện cần thiết trước khi reproduce bug]
|
|
96
|
+
|
|
97
|
+
## Steps to Reproduce
|
|
98
|
+
|
|
99
|
+
1. [Bước 1]
|
|
100
|
+
2. [Bước 2]
|
|
101
|
+
3. [Bước 3]
|
|
102
|
+
...
|
|
103
|
+
|
|
104
|
+
## Expected Result
|
|
105
|
+
|
|
106
|
+
[Kết quả mong đợi theo testcase / spec]
|
|
107
|
+
|
|
108
|
+
## Actual Result
|
|
109
|
+
|
|
110
|
+
[Kết quả thực tế nhận được]
|
|
111
|
+
|
|
112
|
+
## Evidence
|
|
113
|
+
|
|
114
|
+
- Screenshot: [evidence/[TC-ID]/step-XX-description.png]
|
|
115
|
+
- Video: [evidence/[TC-ID]/recording.mp4] (nếu có)
|
|
116
|
+
- Console log: [evidence/[TC-ID]/console.log] (nếu có)
|
|
117
|
+
|
|
118
|
+
## Notes
|
|
119
|
+
|
|
120
|
+
[Ghi chú thêm nếu có: intermittent, chỉ xảy ra trên specific browser, ...]
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Mandatory Rules
|
|
126
|
+
|
|
127
|
+
- ❌ KHÔNG tự đánh giá root cause — chỉ mô tả WHAT happened, không WHY
|
|
128
|
+
- ❌ KHÔNG bỏ qua bug dù severity thấp — log tất cả, TESTER quyết định defer
|
|
129
|
+
- ✅ Steps to Reproduce PHẢI đủ để dev reproduce mà không cần hỏi thêm
|
|
130
|
+
- ✅ Evidence PHẢI link cụ thể đến file screenshot/log trong `evidence/`
|
|
131
|
+
- ✅ Expected Result PHẢI lấy từ testcase / spec của BA, không từ cách dev implement
|