@anhth2/spec-driven-dev-plugin 0.9.2 → 0.11.0
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/commands/debug.md +50 -20
- package/commands/define-product.md +49 -19
- package/commands/{generate-tests.md → dev-gen-test.md} +85 -23
- package/commands/{generate-tests.tmpl → dev-gen-test.tmpl} +18 -4
- package/{core/commands/run-tests.md → commands/dev-run-test.md} +102 -21
- package/commands/{run-tests.tmpl → dev-run-test.tmpl} +35 -2
- package/commands/{smoke-test.md → dev-smoke-test.md} +54 -24
- package/commands/{smoke-test.tmpl → dev-smoke-test.tmpl} +5 -5
- package/commands/fix-bug.md +50 -20
- package/commands/generate-bdd.md +78 -21
- package/commands/generate-bdd.tmpl +11 -2
- package/commands/generate-code.md +123 -23
- package/commands/generate-code.tmpl +56 -4
- package/commands/generate-design-spec.md +142 -47
- package/commands/generate-design-spec.tmpl +93 -28
- package/commands/generate-prd.md +49 -19
- package/commands/generate-spec-manifest.md +49 -19
- package/commands/generate-tech-docs.md +50 -20
- package/commands/generate-tech-docs.tmpl +1 -1
- package/commands/learn.md +50 -20
- package/commands/propose-scenario.md +50 -20
- package/commands/propose-scenario.tmpl +1 -1
- package/commands/qc-analyze.md +514 -0
- package/commands/qc-analyze.tmpl +71 -0
- package/commands/qc-design-test.md +510 -0
- package/commands/qc-design-test.tmpl +67 -0
- package/commands/qc-plan.md +492 -0
- package/commands/qc-plan.tmpl +49 -0
- package/commands/qc-report.md +491 -0
- package/commands/qc-report.tmpl +48 -0
- package/commands/qc-review.md +496 -0
- package/commands/qc-review.tmpl +53 -0
- package/commands/qc-run-test.md +538 -0
- package/commands/qc-run-test.tmpl +77 -0
- package/commands/refine-prd.md +203 -24
- package/commands/refine-prd.tmpl +16 -5
- package/commands/report-bug.md +49 -19
- package/commands/review-code.md +51 -21
- package/commands/review-code.tmpl +1 -1
- package/commands/review-context.md +198 -20
- package/commands/review-context.tmpl +11 -1
- package/commands/review-tech-docs.md +49 -19
- package/commands/setup-ai-first.md +14 -7
- package/commands/sync.md +30 -20
- package/commands/sync.tmpl +16 -13
- package/commands/update-framework.md +14 -7
- package/commands/validate-traces.md +106 -45
- package/commands/validate-traces.tmpl +57 -26
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +50 -20
- package/core/commands/define-product.md +49 -19
- package/core/commands/{generate-tests.md → dev-gen-test.md} +85 -23
- package/{commands/run-tests.md → core/commands/dev-run-test.md} +102 -21
- package/core/commands/{smoke-test.md → dev-smoke-test.md} +54 -24
- package/core/commands/fix-bug.md +50 -20
- package/core/commands/generate-bdd.md +78 -21
- package/core/commands/generate-code.md +123 -23
- package/core/commands/generate-design-spec.md +142 -47
- package/core/commands/generate-prd.md +49 -19
- package/core/commands/generate-spec-manifest.md +49 -19
- package/core/commands/generate-tech-docs.md +50 -20
- package/core/commands/learn.md +50 -20
- package/core/commands/propose-scenario.md +50 -20
- package/core/commands/qc-analyze.md +514 -0
- package/core/commands/qc-design-test.md +510 -0
- package/core/commands/qc-plan.md +492 -0
- package/core/commands/qc-report.md +491 -0
- package/core/commands/qc-review.md +496 -0
- package/core/commands/qc-run-test.md +538 -0
- package/core/commands/refine-prd.md +203 -24
- package/core/commands/report-bug.md +49 -19
- package/core/commands/review-code.md +51 -21
- package/core/commands/review-context.md +198 -20
- package/core/commands/review-tech-docs.md +49 -19
- package/core/commands/setup-ai-first.md +14 -7
- package/core/commands/sync.md +30 -20
- package/core/commands/update-framework.md +14 -7
- package/core/commands/validate-traces.md +106 -45
- package/core/modules/qc-playwright/stack-profile.yaml +65 -0
- package/core/skills/code/SKILL.md +63 -26
- package/core/skills/debug/SKILL.md +78 -34
- package/core/skills/design-spec/SKILL.md +49 -19
- package/core/skills/discovery/SKILL.md +49 -19
- package/core/skills/prd/SKILL.md +28 -14
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
- package/core/skills/qc/qa-analyst/business-rules.md +55 -0
- package/core/skills/qc/qa-analyst/data-flow.md +60 -0
- package/core/skills/qc/qa-analyst/spec-breakdown.md +57 -0
- package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/core/skills/qc/qa-designer/functional/api.md +45 -0
- package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/core/skills/qc/qa-designer/integration/api.md +42 -0
- package/core/skills/qc/qa-designer/integration/db.md +39 -0
- package/core/skills/qc/qa-designer/integration/gui.md +40 -0
- package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/core/skills/qc/qa-designer/non-functional.md +40 -0
- package/core/skills/qc/qa-planner/test-plan.md +120 -0
- package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/core/skills/qc/qa-runner/e2e.md +49 -0
- package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/core/skills/qc/qa-runner/functional/api.md +35 -0
- package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/core/skills/qc/qa-runner/integration.md +47 -0
- package/core/skills/qc/qa-runner/non-functional.md +49 -0
- package/core/skills/qc/qa-runner/report/report.md +37 -0
- package/core/skills/setup-ai-first/SKILL.md +14 -7
- package/core/skills/spec/SKILL.md +28 -14
- package/core/skills/test/SKILL.md +121 -54
- package/core/steps/capture-lesson.md +1 -1
- package/core/steps/context-loader.md +35 -12
- package/core/steps/report-footer.md +14 -7
- package/core/steps/review-fanout.md +138 -0
- package/core/steps/spawn-agent.md +1 -1
- package/core/steps/trace-mirror.md +18 -0
- package/core/templates/design-spec.template.md +16 -8
- package/core/templates/project-context.yaml +8 -0
- package/docs/01-getting-started/README.md +19 -0
- package/docs/01-getting-started/core-concepts.md +102 -0
- package/docs/01-getting-started/installation.md +154 -0
- package/docs/01-getting-started/quickstart.md +85 -0
- package/docs/02-guides/README.md +27 -0
- package/docs/02-guides/developer/README.md +46 -0
- package/docs/02-guides/developer/bdd-and-trace.md +123 -0
- package/docs/02-guides/developer/commands.md +76 -0
- package/docs/02-guides/developer/pr-checklist.md +15 -0
- package/docs/02-guides/developer/scenarios.md +448 -0
- package/docs/02-guides/developer/workflow.md +59 -0
- package/docs/02-guides/product-owner/README.md +77 -0
- package/docs/02-guides/product-owner/commands.md +30 -0
- package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
- package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
- package/docs/02-guides/product-owner/scenarios.md +357 -0
- package/docs/02-guides/qc-automation.md +92 -0
- package/docs/02-guides/tester/README.md +72 -0
- package/docs/02-guides/tester/bug-reporting.md +117 -0
- package/docs/02-guides/tester/reading-specs.md +79 -0
- package/docs/02-guides/tester/scenarios.md +186 -0
- package/docs/02-guides/tester/spec-manifest.md +124 -0
- package/docs/02-guides/tester/test-checklist.md +31 -0
- package/docs/02-guides/tester/workflow.md +79 -0
- package/docs/03-concepts/README.md +19 -0
- package/docs/03-concepts/architecture.md +243 -0
- package/docs/03-concepts/pipeline.md +249 -0
- package/docs/03-concepts/traceability.md +148 -0
- package/docs/04-operations/README.md +33 -0
- package/docs/04-operations/bug-flow.md +321 -0
- package/docs/04-operations/publishing.md +137 -0
- package/docs/04-operations/sync-and-update.md +328 -0
- package/docs/05-reference/README.md +29 -0
- package/docs/05-reference/commands.md +229 -0
- package/docs/05-reference/modules.md +110 -0
- package/docs/05-reference/trace-schema.md +146 -0
- package/docs/README.md +51 -0
- package/modules/qc-playwright/stack-profile.yaml +65 -0
- package/package.json +2 -2
- package/skills/code/SKILL.md +63 -26
- package/skills/debug/SKILL.md +78 -34
- package/skills/debug/SKILL.tmpl +1 -1
- package/skills/design-spec/SKILL.md +49 -19
- package/skills/discovery/SKILL.md +49 -19
- package/skills/prd/SKILL.md +28 -14
- package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
- package/skills/qc/qa-analyst/business-rules.md +55 -0
- package/skills/qc/qa-analyst/data-flow.md +60 -0
- package/skills/qc/qa-analyst/spec-breakdown.md +57 -0
- package/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/skills/qc/qa-designer/functional/api.md +45 -0
- package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/skills/qc/qa-designer/integration/api.md +42 -0
- package/skills/qc/qa-designer/integration/db.md +39 -0
- package/skills/qc/qa-designer/integration/gui.md +40 -0
- package/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/skills/qc/qa-designer/non-functional.md +40 -0
- package/skills/qc/qa-planner/test-plan.md +120 -0
- package/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/skills/qc/qa-runner/e2e.md +49 -0
- package/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/skills/qc/qa-runner/functional/api.md +35 -0
- package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/skills/qc/qa-runner/integration.md +47 -0
- package/skills/qc/qa-runner/non-functional.md +49 -0
- package/skills/qc/qa-runner/report/report.md +37 -0
- package/skills/setup-ai-first/SKILL.md +14 -7
- package/skills/spec/SKILL.md +28 -14
- package/skills/test/SKILL.md +121 -54
- package/skills/test/SKILL.tmpl +9 -9
- package/steps/capture-lesson.md +1 -1
- package/steps/context-loader.md +35 -12
- package/steps/report-footer.md +14 -7
- package/steps/review-fanout.md +138 -0
- package/steps/spawn-agent.md +1 -1
- package/steps/trace-mirror.md +18 -0
- package/templates/design-spec.template.md +16 -8
- package/templates/project-context.yaml +8 -0
- package/ARCHITECTURE.md +0 -247
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Review Test Case — E2E Journey
|
|
8
|
+
|
|
9
|
+
Review bộ TC end-to-end và đánh giá chất lượng.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- "review TC E2E cho [Feature]" / "check coverage E2E"
|
|
13
|
+
- Sau khi qa-designer/e2e/journey xong, trước khi qa-runner
|
|
14
|
+
|
|
15
|
+
## Khi KHÔNG trigger
|
|
16
|
+
- Review TC functional 1 màn → `test-case/functional`
|
|
17
|
+
- Review charter exploratory → `test-case/exploratory`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Phase 1 — Clarify
|
|
22
|
+
|
|
23
|
+
1. Đọc tất cả TC E2E (ID dạng `E2E-<FEATURE>-NN`) trong folder chỉ định
|
|
24
|
+
2. Đọc TEST_PLAN để lấy danh sách journey + trục bao phủ dự kiến
|
|
25
|
+
3. Đọc REQUIREMENT_ANALYSIS nếu có để đối chiếu BR
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Phase 2 — Review
|
|
30
|
+
|
|
31
|
+
Đánh giá theo 4 tiêu chí:
|
|
32
|
+
|
|
33
|
+
A. COVERAGE (quan trọng nhất):
|
|
34
|
+
- Mỗi journey trong TEST_PLAN có TC tương ứng không?
|
|
35
|
+
- Trục bao phủ (vd role × loại × bộ phận) có đủ không? (Decision Table)
|
|
36
|
+
- Còn alternate flow / exception flow nào chưa có TC?
|
|
37
|
+
|
|
38
|
+
B. END-TO-END INTEGRITY:
|
|
39
|
+
- Steps có xuyên suốt qua các màn/module liên quan không?
|
|
40
|
+
- Expected có verify **toàn chuỗi**: tạo → định tuyến → đồng bộ → hiển thị danh sách?
|
|
41
|
+
- Data nhập màn A → hiện đúng màn B/DB/hệ thống ngoài không?
|
|
42
|
+
- Verify points chung (V1…Vn) áp nhất quán cho mọi journey?
|
|
43
|
+
|
|
44
|
+
C. INDEPENDENCE & PRECONDITION:
|
|
45
|
+
- Mỗi journey có tiền điều kiện rõ (data + tài khoản/role) không?
|
|
46
|
+
- Journey phụ thuộc nhau thứ tự? (vi phạm test isolation)
|
|
47
|
+
- Có hướng dẫn cleanup/teardown sau mỗi journey?
|
|
48
|
+
|
|
49
|
+
D. FORMAT & TRACE:
|
|
50
|
+
- ID đúng dạng `E2E-<FEATURE>-NN`?
|
|
51
|
+
- Mỗi TC có `Trace: [BR-xx]`; nếu không có BR phải ghi `⚠️ Chưa có Business Rule`?
|
|
52
|
+
- TC phụ thuộc gap có dòng `🚫 Block: [GAP-xx]`?
|
|
53
|
+
- Cuối file có Trace matrix + bảng TC block?
|
|
54
|
+
- Expected là 1 bullet tổng hợp (không `✅ PASS/❌ FAIL`, không "hoạt động bình thường")?
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Checklist format file `.md`
|
|
59
|
+
|
|
60
|
+
- **Metadata:** Title · Feature · Priority · Status(Draft) · Author · Tags · Trace · Block — mỗi trường 1 dòng.
|
|
61
|
+
- **Test Data:** dạng list (không bảng); ghi cả tài khoản/role cần dùng.
|
|
62
|
+
- **Steps:** phân biệt `[Action]`/`[Verify]`; KHÔNG có `- *Expected:* ...` sau từng bước.
|
|
63
|
+
- **Expected:** 1 bullet; liệt kê chuỗi verify point rõ ràng.
|
|
64
|
+
- **KHÔNG** có section `#### Python Test Mapping`.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Output
|
|
69
|
+
|
|
70
|
+
Mỗi tiêu chí: ✅ PASS | ⚠️ PARTIAL | ❌ MISSING + evidence (TC ID / journey)
|
|
71
|
+
Score: A (excellent) / B (good) / C (needs improvement) / D (redo)
|
|
72
|
+
Danh sách journey thiếu TC; TC cần sửa Expected; TC vi phạm isolation.
|
|
73
|
+
Kết luận: sẵn sàng cho `qa-runner` chưa.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Review Charter — Exploratory
|
|
8
|
+
|
|
9
|
+
Review chất lượng test charter trước khi QC chạy session.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- "review charter cho [Feature]"
|
|
13
|
+
- Sau khi qa-designer/exploratory/charter xong, trước khi chạy session
|
|
14
|
+
|
|
15
|
+
## Khi KHÔNG trigger
|
|
16
|
+
- Review TC functional → dùng qa-reviewer/test-case/functional
|
|
17
|
+
- Review session note → dùng qa-reviewer/script/exploratory
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Phase 1 — Read
|
|
22
|
+
|
|
23
|
+
Đọc tất cả charter .md trong folder chỉ định + feature description nếu có.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Phase 2 — Review
|
|
28
|
+
|
|
29
|
+
7 tiêu chí:
|
|
30
|
+
1. FOCUS: Charter đủ focus chưa? (quá rộng "Explore checkout" → cần narrow)
|
|
31
|
+
2. RISK ALIGNMENT: Target vào risk cao nhất? (tiền → Money Tour, input → Saboteur)
|
|
32
|
+
3. SFDIPOT COVERAGE: Tập hợp charter cover đủ 7 dimension?
|
|
33
|
+
4. TOUR FIT: Tour phù hợp charter?
|
|
34
|
+
5. OVERLAP: 2 charter cover cùng area? → merge
|
|
35
|
+
6. MISSING: Area nào chưa có charter?
|
|
36
|
+
7. TIME BUDGET: Tổng time-box fit resource QC?
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Output
|
|
41
|
+
|
|
42
|
+
Mỗi charter: ✅ PASS | 🔧 REWORK | ✂️ SPLIT | 🔗 MERGE + feedback cụ thể
|
|
43
|
+
Overall assessment + charter bổ sung nếu có gap
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Review Test Case — Functional
|
|
8
|
+
|
|
9
|
+
Review bộ functional TC và đánh giá chất lượng.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- "review TC cho [Feature]" / "check coverage"
|
|
13
|
+
- Sau khi qa-designer xong, trước khi PO approve hoặc trước khi qa-runner
|
|
14
|
+
|
|
15
|
+
## Khi KHÔNG trigger
|
|
16
|
+
- Review Python script → dùng qa-reviewer
|
|
17
|
+
- Review charter exploratory → dùng qa-reviewer/test-case/exploratory
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Phase 1 — Clarify
|
|
22
|
+
|
|
23
|
+
1. Đọc tất cả .Test.md trong folder được chỉ định
|
|
24
|
+
2. Đọc requirement/spec/user story nếu QC cung cấp
|
|
25
|
+
3. Nếu không có requirement → review dựa trên TC content (vẫn check internal consistency)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Phase 2 — Review
|
|
30
|
+
|
|
31
|
+
Đánh giá theo 4 tiêu chí:
|
|
32
|
+
|
|
33
|
+
A. COVERAGE (quan trọng nhất):
|
|
34
|
+
- Requirement nào chưa được phủ?
|
|
35
|
+
- TC nào không trace được về requirement? (TC dư)
|
|
36
|
+
- Thiếu negative / edge / boundary test?
|
|
37
|
+
|
|
38
|
+
B. TECHNIQUE:
|
|
39
|
+
- Field có constraints → có EP + BVA không?
|
|
40
|
+
- Logic AND/OR → có Decision Table không?
|
|
41
|
+
- State → có transition hợp lệ VÀ forbidden không?
|
|
42
|
+
- Thiếu implicit requirement? (rate limit, concurrent, audit, session, security)
|
|
43
|
+
|
|
44
|
+
C. QUALITY:
|
|
45
|
+
- Title rõ scenario + expected?
|
|
46
|
+
- Expected result CỤ THỂ (2 QC test ra cùng kết luận)?
|
|
47
|
+
- Test data có giá trị cụ thể (không placeholder)?
|
|
48
|
+
- Mỗi TC chỉ verify 1 thing?
|
|
49
|
+
- Priority đúng (core function = P0)?
|
|
50
|
+
|
|
51
|
+
D. ANTI-PATTERN:
|
|
52
|
+
- TC chung chung, không actionable?
|
|
53
|
+
- Expected dạng "hiển thị đúng" (cảm tính)?
|
|
54
|
+
- Hardcode credentials/URL?
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Checklist format file `.md` (đối chiếu skill layer qa-designer)
|
|
59
|
+
|
|
60
|
+
- **Metadata:** đủ Title, Feature, Priority, Status, Author, Tags, **Trace**; Priority `P0/P1/P2` (không emoji); Status `Draft` text thuần; mỗi trường 1 dòng riêng.
|
|
61
|
+
- **Trace:** mỗi TC link `[BR-xx](REQUIREMENT_ANALYSIS.md#3-business-rules)`; TC không có BR → phải có ⚠️ cảnh báo (không để trống/`—`).
|
|
62
|
+
- **TC bị block:** TC phụ thuộc gap có dòng `🚫 Block: [GAP-xx]`; cuối file có **Trace matrix** (BR↔TC) + **bảng TC bị block** (Gap↔TC).
|
|
63
|
+
- **Test Data:** dạng list (`- **Trường:** giá trị`), không dùng bảng.
|
|
64
|
+
- **Test Steps:** phân biệt `[Action]`/`[Verify]`; KHÔNG có `- *Expected:* ...` sau mỗi bước.
|
|
65
|
+
- **Expected Result:** 1 dòng bullet `-`, cụ thể; KHÔNG `✅ PASS/❌ FAIL`; không viết "hoạt động bình thường".
|
|
66
|
+
- **KHÔNG** có section `#### Python Test Mapping`.
|
|
67
|
+
- **1 concept/TC**; phân nhóm GUI / Functional.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Output
|
|
72
|
+
|
|
73
|
+
Mỗi tiêu chí: ✅ PASS | ⚠️ PARTIAL | ❌ MISSING + evidence cụ thể
|
|
74
|
+
Score: A (excellent) / B (good) / C (needs improvement) / D (redo)
|
|
75
|
+
Đề xuất TC cần thêm/sửa/xoá, sắp theo priority. Liệt kê TC thiếu Trace BR (⚠️) cần bổ sung.
|
|
76
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Review Test Case — Integration
|
|
8
|
+
|
|
9
|
+
Review bộ TC tích hợp (GUI↔Backend, API, DB) và đánh giá chất lượng.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- "review TC integration cho [Feature]" / "check TC tích hợp"
|
|
13
|
+
- Sau khi qa-designer/integration/* xong, trước khi qa-runner
|
|
14
|
+
|
|
15
|
+
## Khi KHÔNG trigger
|
|
16
|
+
- Review TC functional 1 màn/endpoint → `test-case/functional`
|
|
17
|
+
- Review E2E xuyên nhiều module → `test-case/e2e`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Phase 1 — Clarify
|
|
22
|
+
|
|
23
|
+
1. Đọc tất cả TC integration trong folder chỉ định; xác định loại: GUI↔Backend / API / DB
|
|
24
|
+
2. Đọc REQUIREMENT_ANALYSIS + DOC_GAPS nếu có
|
|
25
|
+
3. Xác định chuỗi tích hợp (caller → component → downstream)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Phase 2 — Review
|
|
30
|
+
|
|
31
|
+
Đánh giá theo 4 tiêu chí:
|
|
32
|
+
|
|
33
|
+
A. COVERAGE:
|
|
34
|
+
- Mỗi điểm tích hợp (API call / DB write / event) trong chuỗi có TC tương ứng?
|
|
35
|
+
- Đủ nhóm: happy → empty state / null → lỗi server (4xx/5xx) → failure/timeout → concurrency?
|
|
36
|
+
- TC GUI↔Backend: có verify cả request gửi đúng lẫn render response đúng?
|
|
37
|
+
|
|
38
|
+
B. INTEGRATION DEPTH (theo loại):
|
|
39
|
+
- **GUI↔Backend:** Expected ghi rõ API liên quan + biểu hiện UI; state loading/empty/error đủ.
|
|
40
|
+
- **API:** schema request/response đúng; failure/retry/timeout có TC; định tuyến phụ thuộc điều kiện có Decision Table.
|
|
41
|
+
- **DB:** Expected ghi `bảng.cột = giá trị` cụ thể; có TC soft-delete, audit log, unique constraint; có hướng dẫn cleanup/query kiểm tra.
|
|
42
|
+
|
|
43
|
+
C. QUALITY:
|
|
44
|
+
- Expected CỤ THỂ (không "phản hồi đúng", "lưu thành công" chung chung)?
|
|
45
|
+
- Test Data đủ (endpoint, payload mẫu, bảng/cột kiểm tra, điều kiện định tuyến)?
|
|
46
|
+
- TC concurrency: mô tả rõ 2+ request đồng thời + kết quả kỳ vọng?
|
|
47
|
+
|
|
48
|
+
D. FORMAT & TRACE:
|
|
49
|
+
- Metadata đủ; Trace `[BR-xx]` hoặc `⚠️ Chưa có Business Rule`; `🚫 Block: [GAP-xx]` nếu bị chặn?
|
|
50
|
+
- Cuối file có Trace matrix + bảng TC block?
|
|
51
|
+
- Steps phân biệt `[Action]`/`[Verify]`; Expected 1 bullet; KHÔNG `✅/❌` inline.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Checklist format file `.md`
|
|
56
|
+
|
|
57
|
+
- **Test Data:** dạng list; ghi rõ endpoint/payload/bảng cần kiểm tra.
|
|
58
|
+
- **Expected (DB):** phải có dạng `bảng.cột = giá trị` + query kiểm tra + cleanup instruction.
|
|
59
|
+
- **Expected (API):** ghi mã HTTP + cấu trúc response + downstream effect.
|
|
60
|
+
- **Expected (GUI):** ghi API gọi + biểu hiện UI (message/state/list cập nhật).
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Output
|
|
65
|
+
|
|
66
|
+
Mỗi tiêu chí: ✅ PASS | ⚠️ PARTIAL | ❌ MISSING + evidence (TC ID / điểm tích hợp)
|
|
67
|
+
Score: A (excellent) / B (good) / C (needs improvement) / D (redo)
|
|
68
|
+
Điểm tích hợp thiếu TC; TC Expected mờ nhạt; TC DB thiếu cleanup.
|
|
69
|
+
Kết luận: sẵn sàng cho `qa-runner` chưa.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Review Test Case — Non-Functional
|
|
8
|
+
|
|
9
|
+
Review bộ TC phi chức năng (performance, security, accessibility, compatibility) và đánh giá chất lượng.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- "review TC non-functional cho [Feature]" / "check TC hiệu năng/bảo mật/accessibility"
|
|
13
|
+
- Sau khi qa-designer/non-functional xong, trước khi qa-runner
|
|
14
|
+
|
|
15
|
+
## Khi KHÔNG trigger
|
|
16
|
+
- Review TC chức năng → `test-case/functional`
|
|
17
|
+
- Review TC tích hợp → `test-case/integration`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Phase 1 — Clarify
|
|
22
|
+
|
|
23
|
+
1. Đọc tất cả TC non-functional trong folder chỉ định; xác định loại: performance / security / accessibility / compatibility
|
|
24
|
+
2. Đọc REQUIREMENT_ANALYSIS để lấy SLA, ngưỡng, môi trường mục tiêu
|
|
25
|
+
3. Xác định công cụ đo đã được thống nhất (load tool, scanner, axe, lighthouse…)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Phase 2 — Review
|
|
30
|
+
|
|
31
|
+
Đánh giá theo 4 tiêu chí:
|
|
32
|
+
|
|
33
|
+
A. COVERAGE (theo loại):
|
|
34
|
+
- **Performance:** đủ scenario tải mục tiêu (normal / peak / max-data / concurrency / pagination)?
|
|
35
|
+
- **Security:** có TC cho authZ/role (truy cập trái phép), injection, PII không lộ, session/timeout, rate limit?
|
|
36
|
+
- **Accessibility:** có TC cho keyboard nav, focus order, label/aria, contrast (WCAG level rõ)?
|
|
37
|
+
- **Compatibility:** liệt kê đủ browser/device/độ phân giải mục tiêu; mỗi target có TC riêng?
|
|
38
|
+
|
|
39
|
+
B. MEASURABILITY — tiêu chí quan trọng nhất:
|
|
40
|
+
- Expected có **ngưỡng pass cụ thể** không? (vd `< 2s`, `0 critical issues`, `WCAG 2.1 AA`)
|
|
41
|
+
- Expected **không được** dùng: "nhanh", "ổn định", "hiển thị đúng", "bảo mật tốt"
|
|
42
|
+
- Có ghi công cụ đo kèm theo ngưỡng không?
|
|
43
|
+
- Performance TC: ghi rõ số user đồng thời, kích thước data, thời gian tải tối đa?
|
|
44
|
+
- Security TC: ghi rõ payload thử nghiệm (OWASP top 10 input mẫu)?
|
|
45
|
+
|
|
46
|
+
C. ENVIRONMENT & DATA:
|
|
47
|
+
- TC cần môi trường đặc biệt (load test server, staging) có ghi chú rõ không?
|
|
48
|
+
- TC cần data lớn / pre-populated data có hướng dẫn chuẩn bị?
|
|
49
|
+
- Cleanup / teardown sau mỗi TC (đặc biệt security test)?
|
|
50
|
+
|
|
51
|
+
D. FORMAT & TRACE:
|
|
52
|
+
- Metadata đủ; Trace `[BR-xx]` / SLA source rõ; `🚫 Block: [GAP-xx]` nếu bị chặn?
|
|
53
|
+
- Steps phân biệt `[Action]`/`[Verify]`; Expected 1 bullet; KHÔNG `✅/❌` inline?
|
|
54
|
+
- Cuối file có Trace matrix + bảng TC block?
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Checklist format file `.md`
|
|
59
|
+
|
|
60
|
+
- **Expected:** PHẢI có `ngưỡng + đơn vị + công cụ đo` — không có → ❌ MISSING.
|
|
61
|
+
- **Performance TC:** ghi `concurrent users`, `data volume`, `target response time`.
|
|
62
|
+
- **Security TC:** ghi `attack vector`, `input payload`, `expected block/response`.
|
|
63
|
+
- **Accessibility TC:** ghi `WCAG version + level`, `tool (axe/lighthouse)`.
|
|
64
|
+
- **Compatibility TC:** ghi `browser/OS version + device/resolution`.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Output
|
|
69
|
+
|
|
70
|
+
Mỗi tiêu chí: ✅ PASS | ⚠️ PARTIAL | ❌ MISSING + evidence (TC ID)
|
|
71
|
+
Score: A (excellent) / B (good) / C (needs improvement) / D (redo)
|
|
72
|
+
Danh sách TC Expected mờ nhạt (thiếu ngưỡng); loại non-functional thiếu coverage.
|
|
73
|
+
Kết luận: sẵn sàng cho `qa-runner` chưa; ghi rõ TC nào cần môi trường đặc biệt.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Gen Script — E2E Journey
|
|
8
|
+
|
|
9
|
+
Skill **tự chứa**: convert journey `.Test.md` → Python pytest + Playwright đầu→cuối xuyên nhiều màn/module. Chỉ cần load file này.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- Convert TC E2E journey (output qa-designer e2e/journey) sang script; TC đã Reviewed
|
|
13
|
+
|
|
14
|
+
## Khi KHÔNG trigger
|
|
15
|
+
- Test 1 màn/field → `functional/*` · 1 điểm tích hợp → `integration.md`
|
|
16
|
+
|
|
17
|
+
## Quy ước script (bám CLAUDE.md)
|
|
18
|
+
- Tiền đề: `.Test.md` đã Reviewed. KHÔNG hardcode → `Env.*`/`CONFIG`; KHÔNG `time.sleep()` → `expect()`.
|
|
19
|
+
- Dùng chuỗi Page Object xuyên các màn; verify points (V1…Vn) thành các `assert_*()` rõ ràng.
|
|
20
|
+
- **Tiền điều kiện qua fixture** (tài khoản role, dữ liệu lớp/buổi); **cleanup** sau journey; mỗi journey độc lập.
|
|
21
|
+
- Cần verify hệ thống ngoài (DB/CRM) → client/fixture riêng. Bọc mỗi chặng `with step("…")` (`from utils.steps import step`, **KHÔNG Allure**); assertion `expect()`; marker `@pytest.mark.e2e`.
|
|
22
|
+
- Naming: class `TestFeatureE2E`, method `test_E2E_<NN>_<snake>`.
|
|
23
|
+
|
|
24
|
+
## Phase 1 — Clarify
|
|
25
|
+
Đọc journey `.Test.md` · các màn/PO + hệ thống verify · tài khoản role & data cần dựng · điểm cleanup.
|
|
26
|
+
|
|
27
|
+
## Phase 2 — Generate
|
|
28
|
+
Mỗi journey → 1 test; bọc từng bước `with step("…")`; cuối journey verify đủ V1…Vn (tạo/mã/định tuyến/đồng bộ/danh sách).
|
|
29
|
+
Journey còn phụ thuộc gap → tạo test `@pytest.mark.skip(reason="GAP-xx")` hoặc xfail.
|
|
30
|
+
|
|
31
|
+
## Phase 3 — Verify
|
|
32
|
+
`py_compile` + `pytest --collect-only -q` · chạy (môi trường staging + CRM) · cập nhật Status TC.
|
|
33
|
+
**Phân loại FAIL: script-bug vs product-gap** — journey fail vì 1 bước feature chưa wire = gap (giữ FAIL/skip + bằng chứng), không phải lỗi script; sai selector/state mới sửa script.
|
|
34
|
+
|
|
35
|
+
## Output
|
|
36
|
+
Script `tests/<project>/e2e/test_<feature>.py` + Page Object/client tái dùng. Bàn giao `qa-reviewer`.
|
|
37
|
+
|
|
38
|
+
## Phase 4 — Report (bắt buộc sau khi chạy test)
|
|
39
|
+
Report = **Playwright Trace viewer + pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết).
|
|
40
|
+
|
|
41
|
+
1. Chạy test kèm pytest-html (trace đã bật sẵn ở conftest → mỗi test có `test-results/<nodeid>/trace.zip`):
|
|
42
|
+
```bash
|
|
43
|
+
pytest tests/<project>/e2e/test_<feature>.py --html=reports/<feature>/report.html --self-contained-html
|
|
44
|
+
```
|
|
45
|
+
2. Gửi cho người dùng:
|
|
46
|
+
- HTML report: `reports/<feature>/report.html` (self-contained, mở trực tiếp).
|
|
47
|
+
- Trace từng test (debug step-by-step): `python3 -m playwright show-trace test-results/<nodeid>/trace.zip`.
|
|
48
|
+
- Tóm tắt: **TOTAL / PASS / FAIL / SKIP** + duration.
|
|
49
|
+
3. TC Fail → mở trace tương ứng để xem timeline/DOM snapshot/network, phân loại script-bug vs product-gap; ghi mô tả lỗi tiếng Việt dễ hiểu vào Status/khối kết quả của `.Test.md`.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Session Template & Convert Findings — Exploratory
|
|
8
|
+
|
|
9
|
+
Skill **tự chứa**, 2 mode:
|
|
10
|
+
- **Mode 1:** sinh session note template trước khi test.
|
|
11
|
+
- **Mode 2:** convert findings (#BUG/#IDEA) → bug report + functional TC mới.
|
|
12
|
+
|
|
13
|
+
## Khi nào trigger
|
|
14
|
+
- Mode 1: "tạo template cho session" / trước exploratory session
|
|
15
|
+
- Mode 2: "convert findings" / "tạo bug report" / sau session
|
|
16
|
+
|
|
17
|
+
## Khi KHÔNG trigger
|
|
18
|
+
- Sinh charter → `qa-designer/exploratory/charter.md` · review session note → `qa-reviewer/script/exploratory.md`
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Mode 1 — Generate Session Template
|
|
23
|
+
Input: charter + tour + tester + time-box. Tạo file gồm: metadata (date/tester/charter/tour/env/data) ·
|
|
24
|
+
`#SETUP` (bước chuẩn bị) · `#TEST` (5–8 gợi ý theo tour) · `#BUG` template (title, severity, steps,
|
|
25
|
+
expected/actual) · `#QUESTION`, `#IDEA` placeholder · summary cuối session.
|
|
26
|
+
→ `docs/<project>/exploratory/sessions/<YYYY-MM-DD>_<tester>.md`
|
|
27
|
+
|
|
28
|
+
## Mode 2 — Convert Findings
|
|
29
|
+
Input: session note (#BUG + #IDEA).
|
|
30
|
+
- **Bug report** mỗi #BUG: title, severity, priority, steps to reproduce, expected/actual, hypothesis root cause.
|
|
31
|
+
- **Functional TC mới:** mỗi #BUG đã fix → 1–2 TC regression; mỗi #IDEA → TC nếu đủ rõ (hoặc backlog).
|
|
32
|
+
Đặt đúng layer; bám format TC (Test Data list, Trace BR, 🚫 Block); trace "Origin: Exploratory session <date>".
|
|
33
|
+
- **Weekly summary** (nếu yêu cầu): overview, top findings, coverage gap, recommendations.
|
|
34
|
+
|
|
35
|
+
## Output
|
|
36
|
+
Mode 1: file session note. Mode 2: bug reports + file TC trong `docs/<project>/<feature>/` + summary.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Gen Script — Functional API
|
|
8
|
+
|
|
9
|
+
Skill **tự chứa**: convert `.Test.md` API → Python pytest (requests/httpx), không qua UI. Chỉ cần load file này.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- Convert TC API (output qa-designer functional/api) sang script; TC đã Reviewed
|
|
13
|
+
|
|
14
|
+
## Khi KHÔNG trigger
|
|
15
|
+
- Test qua UI → `functional/gui-screen.md` · tích hợp đa thành phần → `integration.md`
|
|
16
|
+
|
|
17
|
+
## Quy ước script (bám CLAUDE.md)
|
|
18
|
+
- Tiền đề: `.Test.md` đã Reviewed. KHÔNG hardcode base URL/token → `Env.*`/`CONFIG`.
|
|
19
|
+
- Client API gói trong helper/fixture (base url, auth header); KHÔNG rải request rời rạc trong test.
|
|
20
|
+
- Assertion: `assert` cho status code + field response (jsonpath); `with step(...)` (`from utils.steps`) cho mỗi call.
|
|
21
|
+
- Marker `@pytest.mark.api` + category; fixture `function`; test độc lập (tạo→cleanup data qua API/teardown).
|
|
22
|
+
- Naming: class `TestFeatureAPI`, method `test_TC<NNN>_<snake>`.
|
|
23
|
+
|
|
24
|
+
## Phase 1 — Clarify
|
|
25
|
+
Đọc `.Test.md` · base url/auth/role · client/fixture đã có chưa · data setup/cleanup.
|
|
26
|
+
|
|
27
|
+
## Phase 2 — Generate
|
|
28
|
+
Mỗi TC → 1 test gọi endpoint với request từ Test Data; assert **status code + field body** theo Expected.
|
|
29
|
+
Nhóm happy/validation/auth/not-found/edge. Data từ `test_data/`.
|
|
30
|
+
|
|
31
|
+
## Phase 3 — Verify
|
|
32
|
+
`py_compile` + `pytest --collect-only -q` · chạy · cập nhật Status TC · in mapping.
|
|
33
|
+
|
|
34
|
+
## Output
|
|
35
|
+
Script `tests/<project>/functional/api/test_<feature>.py` + API client/fixture nếu mới. Bàn giao `qa-reviewer`.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Gen Script — Functional GUI Feature (đa màn hình)
|
|
8
|
+
|
|
9
|
+
Skill **tự chứa**: convert `.Test.md` feature span ≥2 màn → Python pytest + Playwright. Chỉ cần load file này.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- Convert TC feature đa màn (output qa-designer gui-feature) sang script; TC đã Reviewed
|
|
13
|
+
|
|
14
|
+
## Khi KHÔNG trigger
|
|
15
|
+
- Gọn 1 màn → `functional/gui-screen.md` · API → `functional/api.md` · đầu-cuối + đồng bộ → `e2e.md`
|
|
16
|
+
|
|
17
|
+
## Quy ước script (bám CLAUDE.md)
|
|
18
|
+
- Tiền đề: `.Test.md` đã Reviewed. KHÔNG `time.sleep()` → `expect()`/auto-wait; KHÔNG hardcode → `Env.*`/`CONFIG`.
|
|
19
|
+
- **Một Page Object / màn**; điều hướng giữa màn là action trả về PO màn kế (`return NextPage(self.page)`).
|
|
20
|
+
- PO 3 lớp (kế thừa slim `BasePage`, **KHÔNG Allure**) + bọc bước `with step("…")` (`from utils.steps import step`); assertion `expect()`; mọi interaction qua PO; selector constants `UPPER_SNAKE`.
|
|
21
|
+
- Marker + fixture pytest-playwright từ root `tests/conftest.py` (`page`/`logged_in_page`/`logged_in_page_gv`/`login_page`/`dashboard`); test độc lập + cleanup; naming `Test*{...}` / `test_TC<NNN>_<snake>`.
|
|
22
|
+
|
|
23
|
+
## Phase 1 — Clarify
|
|
24
|
+
Đọc `.Test.md` · liệt kê các màn/PO cần · state truyền giữa màn · fixture dựng tiền điều kiện (data qua nhiều bước).
|
|
25
|
+
**Probe DOM thật trước khi viết selector** (SPA React/Next không `data-testid`): dump class/`aria-label`/role → BEM `feature__el`, carousel dot thường `role="tab"` + class `--active` (không `aria-selected`).
|
|
26
|
+
|
|
27
|
+
## Phase 2 — Generate
|
|
28
|
+
**PHỦ HẾT 100%**: 1 test cho **MỌI** TC trong file (`grep -cE "^#{2,4} *TC_"` = số test phải sinh), KHÔNG chọn tập đại diện, KHÔNG để TC nào Draft; TC bất khả thi → `pytest.skip`/`xfail` + lý do.
|
|
29
|
+
Bọc mỗi chặng bằng `with step("…")`; dùng chuỗi PO theo điều hướng.
|
|
30
|
+
Phủ TC điều hướng forward/back/giữ-reset state. Data từ `test_data/`. Marker mới (`bva ep e2e`…) đăng ký `pytest.ini`.
|
|
31
|
+
|
|
32
|
+
## Phase 3 — Verify
|
|
33
|
+
`py_compile` + `pytest --collect-only -q` (**số collect = tổng TC**; thiếu → sinh nốt) · chạy · cập nhật Status TC (verify KHÔNG còn Draft) · in mapping.
|
|
34
|
+
**Gom nhóm role/account** tự áp qua `utils/test_ordering.py` (root conftest); fixture auth mới → `register_auth_fixtures([...])`. ⚠️ Run dài bị **WSL suspend** có thể gây flaky login/timeout → re-run TC đó + merge report.
|
|
35
|
+
**Phân loại FAIL: script-bug (sửa selector/logic, chạy lại) vs product-gap** (feature chưa wire/defect → giữ FAIL + ghi bằng chứng vào khối "Kết quả thực thi" đầu `.Test.md`, không fake-pass).
|
|
36
|
+
|
|
37
|
+
## Output
|
|
38
|
+
Script + nhiều Page Object (mỗi màn) trong `pages/<project>/...`. Bàn giao `qa-reviewer` (script).
|
|
39
|
+
|
|
40
|
+
## Phase 4 — Report (bắt buộc sau khi chạy test)
|
|
41
|
+
Report = **Playwright Trace viewer + pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết).
|
|
42
|
+
|
|
43
|
+
1. Chạy test kèm pytest-html (trace đã bật sẵn ở conftest → mỗi test có `test-results/<nodeid>/trace.zip`):
|
|
44
|
+
```bash
|
|
45
|
+
pytest tests/<project>/.../test_<feature>.py --html=reports/<feature>/report.html --self-contained-html
|
|
46
|
+
```
|
|
47
|
+
2. Gửi cho người dùng:
|
|
48
|
+
- HTML report: `reports/<feature>/report.html` (self-contained, mở trực tiếp).
|
|
49
|
+
- Trace từng test (debug step-by-step): `python3 -m playwright show-trace test-results/<nodeid>/trace.zip`.
|
|
50
|
+
- Tóm tắt: **TOTAL / PASS / FAIL / SKIP** + duration.
|
|
51
|
+
3. TC Fail → mở trace tương ứng để xem timeline/DOM snapshot/network, phân loại script-bug vs product-gap; ghi mô tả lỗi tiếng Việt dễ hiểu vào Status/khối kết quả của `.Test.md`.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Gen Script — Functional GUI Screen (1 màn hình)
|
|
8
|
+
|
|
9
|
+
Skill **tự chứa**: convert `.Test.md` (1 màn) → Python pytest + Playwright. Chỉ cần load file này.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- "generate script cho [Screen]" / convert TC sang Python; đã có `.Test.md` (output qa-designer gui-screen), TC đã Reviewed
|
|
13
|
+
|
|
14
|
+
## Khi KHÔNG trigger
|
|
15
|
+
- Chưa có TC `.md` → chạy qa-designer trước · TC chưa review → qa-reviewer trước
|
|
16
|
+
- Feature cross-screen → `functional/gui-feature.md` · API → `functional/api.md`
|
|
17
|
+
|
|
18
|
+
## Quy ước script (bám CLAUDE.md)
|
|
19
|
+
- Tiền đề: có `.Test.md` đã Reviewed. KHÔNG `time.sleep()` → `expect()`/auto-wait; KHÔNG hardcode → `Env.*`/`CONFIG`.
|
|
20
|
+
- Page Object 3 lớp (kế thừa slim `BasePage`, **KHÔNG Allure**): locators `_x()` → actions `verb_noun()`+`with step("…")`+`return self` → assertions `assert_x()`+`expect()`; mọi interaction **qua PO** (không `page.click()` trực tiếp); selector constants `UPPER_SNAKE` đầu class.
|
|
21
|
+
- Bọc bước bằng `with step("…")` (`from utils.steps import step`) — **KHÔNG Allure** · marker category+domain (đăng ký `pytest.ini`) · fixture pytest-playwright từ root `tests/conftest.py` (`page`/`logged_in_page`/`logged_in_page_gv`/`login_page`/`dashboard`) · test độc lập + cleanup.
|
|
22
|
+
- Naming: class `TestFeature{UI,Functional,Negative}`, method `test_TC<NNN>_<snake>`; docstring = TC title; comment TC_ID + link `.md`.
|
|
23
|
+
|
|
24
|
+
## Phase 1 — Clarify
|
|
25
|
+
Đọc `.Test.md` (confirm Reviewed) · platform (web Playwright/mobile) · Page Object đã có chưa → tạo nếu cần · fixture setup data?
|
|
26
|
+
**Probe DOM thật trước khi viết selector** (SPA không `data-testid`): dump class/`aria-label`/role bằng script Playwright tạm → ghi selector đúng (BEM `feature__el`; element interactive có thể `role="tab/menuitem"` + class `--active`).
|
|
27
|
+
|
|
28
|
+
## Phase 2 — Generate
|
|
29
|
+
**PHỦ HẾT 100%**: sinh 1 `test_TC<NNN>_<scenario>` cho **MỌI** TC trong file — KHÔNG chọn tập đại diện, KHÔNG bỏ TC nào. Đếm tổng TC đầu file (`grep -cE "^#{2,4} *TC_"`) = số test phải sinh.
|
|
30
|
+
TC không thể tự động hóa (precondition bất khả thi, cần data cố định, feature chưa wire) → vẫn viết 1 test với `pytest.skip("lý do")` / `pytest.mark.xfail` — KHÔNG để Draft.
|
|
31
|
+
Map nhóm GUI→`TestFeatureUI`, Functional→`TestFeatureFunctional`, Negative→`TestFeatureNegative`. Assertion qua `assert_*()` của PO; test data từ `test_data/`, không hardcode. Marker mới (`bva ep`…) đăng ký `pytest.ini`.
|
|
32
|
+
|
|
33
|
+
## Phase 3 — Verify
|
|
34
|
+
`py_compile` + `pytest --collect-only -q` (**số collect = tổng TC trong file**, nếu thiếu → quay lại Phase 2 sinh nốt) · chạy test · cập nhật **Status** TC (Pass/Fail/Skip) · in mapping TC_ID→function→file.
|
|
35
|
+
**Gom nhóm role/account**: thứ tự chạy đã tự gom cùng (role, account) liền nhau qua `utils/test_ordering.py` (hook ở root conftest) — fixture auth mới thì `register_auth_fixtures([...])`.
|
|
36
|
+
⚠️ Run dài có thể bị **WSL suspend** (máy ngủ) làm vài TC lỗi login/timeout = flaky (không phải gap SP) → re-run đúng các TC đó + merge vào report (xem `report/report.md`).
|
|
37
|
+
**Verify KHÔNG còn Draft**: `grep -c "Status: Draft" <file>.Test.md` = 0 trước khi bàn giao.
|
|
38
|
+
**Mỗi FAIL phân loại script-bug vs product-gap** (probe trực tiếp): sai selector/expectation → sửa script & chạy lại; feature không phản hồi sau timeout → giữ FAIL + ghi bằng chứng (không fake-pass).
|
|
39
|
+
|
|
40
|
+
## Output
|
|
41
|
+
Script `tests/<project>/.../test_<screen>.py` + Page Object `pages/<project>/.../<Screen>Page.py` (nếu mới).
|
|
42
|
+
Bàn giao `qa-reviewer` (script).
|
|
43
|
+
|
|
44
|
+
## Phase 4 — Report (bắt buộc sau khi chạy test)
|
|
45
|
+
Report = **Playwright Trace viewer + pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết).
|
|
46
|
+
|
|
47
|
+
1. Chạy test kèm pytest-html (trace đã bật sẵn ở conftest → mỗi test có `test-results/<nodeid>/trace.zip`):
|
|
48
|
+
```bash
|
|
49
|
+
pytest tests/<project>/.../test_<screen>.py --html=reports/<feature>/report.html --self-contained-html
|
|
50
|
+
```
|
|
51
|
+
2. Gửi cho người dùng:
|
|
52
|
+
- HTML report: `reports/<feature>/report.html` (self-contained, mở trực tiếp).
|
|
53
|
+
- Trace từng test (debug step-by-step): `python3 -m playwright show-trace test-results/<nodeid>/trace.zip`.
|
|
54
|
+
- Tóm tắt: **TOTAL / PASS / FAIL / SKIP** + duration.
|
|
55
|
+
3. TC Fail → mở trace tương ứng để xem timeline/DOM snapshot/network, phân loại script-bug vs product-gap; ghi mô tả lỗi tiếng Việt dễ hiểu vào Status/khối kết quả của `.Test.md`.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.0
|
|
3
|
+
updated: 2026-06-11
|
|
4
|
+
ported_from: ai-automation-qc-base
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Gen Script — Integration
|
|
8
|
+
|
|
9
|
+
Skill **tự chứa**: convert `.Test.md` tích hợp (API↔DB↔service↔queue↔UI) → Python pytest. Chỉ cần load file này.
|
|
10
|
+
|
|
11
|
+
## Khi nào trigger
|
|
12
|
+
- Convert TC integration (output qa-designer integration/*) sang script; TC đã Reviewed
|
|
13
|
+
|
|
14
|
+
## Khi KHÔNG trigger
|
|
15
|
+
- Chỉ 1 endpoint/UI đơn → `functional/*` · hành trình đầu-cuối → `e2e.md`
|
|
16
|
+
|
|
17
|
+
## Quy ước script (bám CLAUDE.md)
|
|
18
|
+
- Tiền đề: `.Test.md` đã Reviewed. KHÔNG hardcode endpoint/DSN/topic → `Env.*`/`CONFIG`.
|
|
19
|
+
- Mỗi hệ thống có client/helper riêng (API client, DB session, Kafka producer/consumer) gói trong fixture.
|
|
20
|
+
- Verify đúng chặng: response (assert), DB (query qua fixture), event (consume + assert payload).
|
|
21
|
+
- **Cleanup bắt buộc** sau khi tạo data; test độc lập; concurrency dùng thread/async khi cần.
|
|
22
|
+
- Bọc mỗi chặng `with step("…")` (`from utils.steps import step`, **KHÔNG Allure**); assertion `expect()`; marker `@pytest.mark.integration` + domain; naming `TestFeatureIntegration` / `test_TC<NNN>_<snake>`.
|
|
23
|
+
|
|
24
|
+
## Phase 1 — Clarify
|
|
25
|
+
Đọc `.Test.md` · chuỗi tích hợp & chặng cần verify · client/fixture (API/DB/Kafka) đã có chưa · setup/teardown data.
|
|
26
|
+
|
|
27
|
+
## Phase 2 — Generate
|
|
28
|
+
Mỗi TC → 1 test theo data flow: gọi action → verify từng chặng (response/DB/event). Nhóm happy/contract-negative/failure-retry/concurrency/đồng bộ.
|
|
29
|
+
|
|
30
|
+
## Phase 3 — Verify
|
|
31
|
+
`py_compile` + `pytest --collect-only -q` · chạy (cần môi trường staging/CRM/Kafka) · cập nhật Status TC.
|
|
32
|
+
|
|
33
|
+
## Output
|
|
34
|
+
Script `tests/<project>/integration/test_<feature>.py` + client/fixture (DB/Kafka/API) nếu mới. Bàn giao `qa-reviewer`.
|
|
35
|
+
|
|
36
|
+
## Phase 4 — Report (bắt buộc sau khi chạy test)
|
|
37
|
+
Report = **Playwright Trace viewer + pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết).
|
|
38
|
+
|
|
39
|
+
1. Chạy test kèm pytest-html (trace đã bật sẵn ở conftest → mỗi test có `test-results/<nodeid>/trace.zip`):
|
|
40
|
+
```bash
|
|
41
|
+
pytest tests/<project>/integration/test_<feature>.py --html=reports/<feature>/report.html --self-contained-html
|
|
42
|
+
```
|
|
43
|
+
2. Gửi cho người dùng:
|
|
44
|
+
- HTML report: `reports/<feature>/report.html` (self-contained, mở trực tiếp).
|
|
45
|
+
- Trace từng test (debug step-by-step): `python3 -m playwright show-trace test-results/<nodeid>/trace.zip`.
|
|
46
|
+
- Tóm tắt: **TOTAL / PASS / FAIL / SKIP** + duration.
|
|
47
|
+
3. TC Fail → mở trace tương ứng để xem timeline/DOM snapshot/network, phân loại script-bug vs product-gap; ghi mô tả lỗi tiếng Việt dễ hiểu vào Status/khối kết quả của `.Test.md`.
|