$npx -y skills add anhtester/codex-testing-kit --skill generate-api-tests-from-swaggerSinh API test cases và automation scripts từ Swagger/OpenAPI specification. Hỗ trợ 2 mode — SPEC (chỉ test cases) và FULL (test cases + automation scripts).
| 1 | # Workflow: Sinh API Tests từ Swagger/OpenAPI |
| 2 | |
| 3 | > **BẮT BUỘC (MANDATORY SKILL):** Bạn PHẢI nạp và đọc kỹ nội dung của skill **`$qa-automation-engineer`** (tại `.agents/skills/qa-automation-engineer/SKILL.md`) trước khi bắt đầu. Ngoài ra, tham khảo thêm skill **`$test-data-generator`** để sinh test data đúng chuẩn. |
| 4 | |
| 5 | Workflow này giúp agent phân tích Swagger/OpenAPI specification, xác định các endpoints, sinh API test cases có cấu trúc, và (tùy mode) tự động sinh automation scripts hoàn chỉnh. |
| 6 | |
| 7 | ## ⚠️ Nguyên tắc thực thi |
| 8 | |
| 9 | - **Tất cả output bằng Tiếng Việt** |
| 10 | - **KHÔNG đoán** schema/endpoint — phải đọc spec thực tế (JSON/YAML) |
| 11 | - **Phải chờ user xác nhận** scope tại Bước 2 trước khi sinh chi tiết |
| 12 | - Nếu user chưa cung cấp Swagger URL/file → hỏi trước khi bắt đầu |
| 13 | - ⚠️ **Rule E3:** Khi test FAIL → tự đọc log → phân tích → sửa → chạy lại. KHÔNG hỏi user trong quá trình fix lỗi |
| 14 | |
| 15 | ## 2 Chế độ (Mode) |
| 16 | |
| 17 | | Mode | Khi nào sử dụng | Output | |
| 18 | |---|---|---| |
| 19 | | **SPEC** (mặc định) | User cần API test cases dưới dạng tài liệu | API Test Cases (Markdown) + Test Data Matrix | |
| 20 | | **FULL** | User yêu cầu cả automation scripts | Như SPEC + Automation Scripts + Project Structure | |
| 21 | |
| 22 | > Nếu user nói "generate automation", "viết code test API", hoặc yêu cầu scripts → tự động chuyển sang **Mode FULL**. |
| 23 | |
| 24 | ## Các bước thực hiện |
| 25 | |
| 26 | ### Bước 1: Tiếp nhận & Phân tích Spec (Parse & Analyze) |
| 27 | |
| 28 | 1. **Thu thập Swagger/OpenAPI spec** từ user: |
| 29 | - **URL trực tiếp** (VD: `https://api.example.com/swagger.json`) → dùng `read_url_content` để fetch |
| 30 | - **File local** (JSON/YAML) → dùng `view_file` để đọc |
| 31 | - **Swagger UI URL** → trích xuất URL spec gốc (thường là `/v2/api-docs` hoặc `/v3/api-docs`) |
| 32 | - **Scalar API Reference URL** → inspect HTML để tìm `data-configuration` chứa URL spec (thường là `/swagger/json`, `/reference/json`, hoặc relative path trong attribute `url`). VD: `https://book.anhtester.com/swagger` → spec tại `https://book.anhtester.com/swagger/json` |
| 33 | - **Các dạng API Doc khác** (Redoc, Stoplight, RapiDoc) → tìm URL spec trong page source hoặc network requests |
| 34 | 2. **Parse spec** và trích xuất thông tin: |
| 35 | - Base URL, API version, authentication scheme (Bearer, API Key, OAuth2, Basic) |
| 36 | - Danh sách tất cả endpoints: `method + path` |
| 37 | - Request parameters: path, query, header, body (schema + required fields) |
| 38 | - Response schemas: status codes, response body structure |
| 39 | - Models/Definitions: reusable data models |
| 40 | 3. **Phân loại endpoints** theo nhóm: |
| 41 | - **CRUD operations** — Create, Read, Update, Delete |
| 42 | - **Authentication** — Login, Register, Token refresh |
| 43 | - **Business Logic** — Các API xử lý nghiệp vụ phức tạp |
| 44 | - **Utility** — Health check, config, metadata |
| 45 | |
| 46 | ### Bước 2: Xác nhận Scope & Tech Stack (CHECKPOINT — ⏸️ DỪNG LẠI) |
| 47 | |
| 48 | 1. **Trình bày tóm tắt** cho user review: |
| 49 | - Tổng số endpoints phát hiện (phân nhóm) |
| 50 | - Authentication method |
| 51 | - Danh sách endpoint groups + số lượng API mỗi nhóm |
| 52 | - Mode đề xuất (SPEC hay FULL) |
| 53 | 2. **Hỏi user xác nhận:** |
| 54 | - "Bạn muốn test tất cả endpoints hay chỉ tập trung vào nhóm nào?" |
| 55 | - "Bạn muốn output là test cases (SPEC) hay cả automation scripts (FULL)?" |
| 56 | - Nếu Mode FULL: "Tech stack mong muốn?" (mặc định theo bảng bên dưới) |
| 57 | 3. **Chờ user xác nhận** scope trước khi sang Bước 3 |
| 58 | |
| 59 | **Tech Stack mặc định (Mode FULL):** |
| 60 | |
| 61 | | Framework | Ngôn ngữ | Khi nào dùng | |
| 62 | |---|---|---| |
| 63 | | **REST Assured** | Java | Mặc định cho Java projects, TestNG runner | |
| 64 | | **Playwright API Testing** | TypeScript | Khi user dùng Playwright hoặc TypeScript stack | |
| 65 | | **Supertest + Jest** | TypeScript/JS | Khi user dùng Node.js backend | |
| 66 | | **Requests + Pytest** | Python | Khi user dùng Python stack | |
| 67 | |
| 68 | ### Bước 3: Sinh API Test Scenarios & Test Data |
| 69 | |
| 70 | 1. **Với mỗi endpoint** trong scope đã xác nhận, sinh test scenarios theo 7 loại: |
| 71 | - **✅ Happy Path** — Request hợp lệ, response đúng schema + status code |
| 72 | - **❌ Negative — Validation** — Thiếu required fields, sai data type, vượt max length |
| 73 | - **❌ Negative — Auth** — Không có token, token hết hạn, token sai role |
| 74 | - **🔲 Boundary** — Min/max values, empty string, null, special characters |
| 75 | - **⚡ Edge Cases** — Concurrent requests, duplicate creation, large payload, unicode/emoji |
| 76 | - **🔒 Security** — SQL injection, XSS, IDOR, sensitive data exposure (xem mục 5 bên dưới) |
| 77 | - **📄 Pagination & Filtering** — Phân trang, sắp xếp, tìm kiếm (xem mục 6 bên dưới) |
| 78 | |
| 79 | 2. **Với mỗi scenario**, xác định rõ: |
| 80 | - **Request:** Method, URL, Headers, Body/Params (giá trị cụ thể) |
| 81 | - **Expected Response:** Status code, Response body structure, Error message |
| 82 | - **Priority:** P1 (Critical) / P2 (High) / P3 (Medium) / P4 (Low) |
| 83 | |
| 84 | 3. **Sinh Test Data Matrix** (sử dụng skill `$test-data-generator`): |
| 85 | - Data valid cho Happy Path |
| 86 | - Data invalid cho Negative cases (mỗi field 1 |