From jx-qa
Extract E2E test cases from BRD/PRD markdown documents and insert them into an Excel (.xlsx) test plan spreadsheet. Triggers on: "extract E2E test cases from BRD", "generate E2E tests from requirements", "add E2E test steps to test plan spreadsheet", "turn acceptance criteria into E2E test cases", or any request to generate/extract/write E2E test cases from a requirements document into an xlsx file. Do not trigger for test plan reviews, coverage analysis, Playwright script generation, or unit/integration test generation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/jx-qa:extract <brd_path> [xlsx_path] [mapping_path] [area_path] [assigned_to]<brd_path> [xlsx_path] [mapping_path] [area_path] [assigned_to]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Extract E2E test cases from requirement documents and insert them into a structured Excel test plan.
Extract E2E test cases from requirement documents and insert them into a structured Excel test plan.
Gather these before starting:
| Input | Required | Source |
|---|---|---|
| BRD/PRD markdown path | Yes | User provides or references raw/articles/ |
| Existing xlsx test plan | Yes if appending, No if creating new | User provides or found in test-plans/ |
| Mapping JSON | No — infer column structure from xlsx row 1 if absent | raw/data/*-mapping-*.json |
If no xlsx exists and no mapping JSON, use the default 9-column Azure DevOps format:
ID | Work Item Type | Title | Test Step | Step Action | Step Expected | Area Path | Assigned To | State
| Argument | Required | Example | Notes |
|---|---|---|---|
brd_path | Yes | raw/articles/BRD_PRD.md | Path to BRD/PRD markdown file |
xlsx_path | No | test-plans/casacolina-test-plan-2026-04-28.xlsx | Existing test plan to fork. Omit to create new |
mapping_path | No | raw/data/casacolina-test-plan-mapping-2026-04-28.json | Column mapping JSON. Inferred from xlsx if absent |
area_path | No | CasaColinaCare.com | Override Area Path. Default: from existing xlsx |
assigned_to | No | RAMON ASENIERO JR <[email protected]> | Override Assigned To. Default: from existing xlsx |
Example invocation:
Extract E2E test cases from raw/articles/BRD_PRD.md and add to test-plans/casacolina-test-plan-2026-04-28.xlsx
Default xlsx discovery (when not provided): ls test-plans/*.xlsx. If 0 results, ask user. If 1, use it. If 2+, ask which.
Read the BRD/PRD markdown in full. Extract every testable requirement by scanning for:
AC-xxx-xx patterns, checkbox lists under user storiesFR-xxx-xx patternsNFR-xxx-xx patternsDedup rule: When an FR explicitly maps to specific ACs (e.g., "FR-010-02: ... Supports: US-010-01"), prefer the ACs for test case generation. Skip the FR to avoid duplicate coverage. Each requirement should produce exactly one test case unless it covers genuinely independent behaviors.
Present the classification in this table format, then stop and wait for explicit user confirmation:
| Req ID | Summary | Classification | Reason | Proposed Test Title |
|---|---|---|---|---|
| AC-010-01 | Bio uses nickname in prose | E2E | Rendered content assertion | Bio displays nickname Kriss on About page |
| AC-010-04 | Lint passes | NOT E2E | CLI tooling | — |
Ask: "Confirm these classifications? You can move items between E2E and NOT-E2E, or edit proposed titles." Do not proceed until user confirms.
Some ACs contain both E2E-verifiable and code-level assertions. Extract only the E2E-verifiable portion. Example: "bio uses nickname AND imports constant from constants.ts" → test case covers "bio uses nickname" only; the import check is code-level.
Before generating test cases, understand the target xlsx format.
wb.active.Test Case, Title filled, step columns blankAsk user for: Area Path, Assigned To, State values. Create new workbook with column headers in row 1.
For each E2E requirement, create one test case:
Header row fields:
ID: blank (auto-assigned externally)Work Item Type: Test CaseTitle: Clear, descriptive (e.g., "Bio paragraph displays nickname Kriss on About page")Test Step / Step Action / Step Expected: blankArea Path / Assigned To / State: from existing data or user inputStep rows — writing rules:
Go to [URL]) or setup for non-UI E2E testsText "Kriss founded Casa Colina Care" is present in bio paragraph not Verify it worksTraceability: Note which AC/FR/NFR IDs each test case covers (e.g., "Covers: AC-010-01, AC-010-03"). Include in the output report, not in the xlsx cells.
shutil.copy2(original, new_file) — byte-preserving copy, never modify originalopenpyxlVersion naming: {basename}-{v}.xlsx where {v} is next available integer.
Example: casacolina-test-plan-2026-04-28.xlsx → casacolina-test-plan-2026-04-28-2.xlsx.
If -2 exists, use -3.
openpyxl.Workbook()test-plan-{YYYY-MM-DD}.xlsximport shutil
import openpyxl
# Fork
shutil.copy2(src_path, dst_path)
wb = openpyxl.load_workbook(dst_path)
# Select correct sheet (see Phase 3 worksheet selection logic)
ws = wb.active # or wb[sheet_name] if multiple sheets
# Append test cases (header row + step rows per test case)
ws.append([None, "Test Case", title, "", "", "", area, assigned, state])
ws.append(["", "", "", 1, action, expected, "", "", ""])
# ... more steps
wb.save(dst_path)
After writing, re-read the new xlsx and confirm:
Print a coverage report:
## Coverage Report
✅ Covered:
- AC-010-01, AC-010-03 → "Bio paragraph displays nickname Kriss on About page"
- AC-010-02 → "Name card retains full formal name on About page"
- NFR-010-01 → "No layout regression after nickname text change"
⏭️ Skipped (not E2E):
- AC-010-04, AC-010-09 → lint check (CLI tooling)
- AC-010-05, AC-010-10 → type check (CLI tooling)
- AC-010-06 → unit test pass (test runner)
- AC-010-07, AC-010-08 → code inspection (static analysis)
📊 Total: 3 test cases generated, 7 criteria skipped
Every extracted requirement must appear in the coverage report exactly once — as covered, deduped, or skipped with reason. If any requirement is unaccounted for, flag it as a gap.
If zero E2E criteria found: report explicitly, do not create an empty workbook.
pip install openpyxl after user confirms.xlsx is supported. Fail closed with clear message: "This skill requires .xlsx format. Please re-export your file as .xlsx."shutil.copy2 preserves original; warn user if macros/charts detected in source workbooknpx claudepluginhub jairosoft-com/jodex-plugins --plugin jx-qaProvides a checklist for code reviews covering functionality, security, performance, maintainability, tests, and quality. Use for pull requests, audits, team standards, and developer training.