testeiya 0.3.9 → 0.3.14
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 +353 -27
- package/dist/prompt/index.js +6 -2
- package/dist/prompt/index.js.map +1 -1
- package/dist/prompt/print.js +8 -0
- package/dist/prompt/print.js.map +1 -1
- package/dist/prompt/system-prompt.js +14 -4
- package/dist/prompt/system-prompt.js.map +1 -1
- package/dist/prompt/testomatio.js +3 -3
- package/dist/prompt/tools.js +28 -7
- package/dist/prompt/tools.js.map +1 -1
- package/dist/src/args.js +198 -46
- package/dist/src/args.js.map +1 -1
- package/dist/src/cli.js +64 -20
- package/dist/src/cli.js.map +1 -1
- package/dist/src/doctor.js +171 -0
- package/dist/src/doctor.js.map +1 -0
- package/dist/src/env.js +39 -5
- package/dist/src/env.js.map +1 -1
- package/dist/src/mcp.js +3 -3
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/model.js +15 -10
- package/dist/src/model.js.map +1 -1
- package/dist/src/models.js +38 -0
- package/dist/src/models.js.map +1 -0
- package/dist/src/output.js +216 -0
- package/dist/src/output.js.map +1 -0
- package/dist/src/run.js +141 -27
- package/dist/src/run.js.map +1 -1
- package/dist/src/session.js +46 -25
- package/dist/src/session.js.map +1 -1
- package/dist/src/sessions.js +72 -0
- package/dist/src/sessions.js.map +1 -0
- package/dist/src/skills.js +130 -0
- package/dist/src/skills.js.map +1 -0
- package/package.json +7 -3
- package/prompt/index.ts +11 -2
- package/prompt/print.ts +9 -0
- package/prompt/system-prompt.ts +18 -4
- package/prompt/testomatio.ts +3 -3
- package/prompt/tools.ts +30 -7
- package/skills/codeceptjs/ci-fix-tests/SKILL.md +119 -0
- package/skills/codeceptjs/codeceptjs-auth/SKILL.md +141 -0
- package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +100 -0
- package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +196 -0
- package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +83 -0
- package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +126 -0
- package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +109 -0
- package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +295 -0
- package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +339 -0
- package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +459 -0
- package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +338 -0
- package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +78 -0
- package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +102 -0
- package/skills/playwright/playwright-best-practices/SKILL.md +303 -0
- package/skills/playwright/playwright-best-practices/advanced/authentication-flows.md +360 -0
- package/skills/playwright/playwright-best-practices/advanced/authentication.md +871 -0
- package/skills/playwright/playwright-best-practices/advanced/clock-mocking.md +364 -0
- package/skills/playwright/playwright-best-practices/advanced/mobile-testing.md +409 -0
- package/skills/playwright/playwright-best-practices/advanced/multi-context.md +288 -0
- package/skills/playwright/playwright-best-practices/advanced/multi-user.md +393 -0
- package/skills/playwright/playwright-best-practices/advanced/network-advanced.md +452 -0
- package/skills/playwright/playwright-best-practices/advanced/third-party.md +464 -0
- package/skills/playwright/playwright-best-practices/architecture/pom-vs-fixtures.md +363 -0
- package/skills/playwright/playwright-best-practices/architecture/test-architecture.md +369 -0
- package/skills/playwright/playwright-best-practices/architecture/when-to-mock.md +383 -0
- package/skills/playwright/playwright-best-practices/browser-apis/browser-apis.md +391 -0
- package/skills/playwright/playwright-best-practices/browser-apis/iframes.md +403 -0
- package/skills/playwright/playwright-best-practices/browser-apis/service-workers.md +504 -0
- package/skills/playwright/playwright-best-practices/browser-apis/websockets.md +403 -0
- package/skills/playwright/playwright-best-practices/core/annotations.md +424 -0
- package/skills/playwright/playwright-best-practices/core/assertions-waiting.md +361 -0
- package/skills/playwright/playwright-best-practices/core/configuration.md +452 -0
- package/skills/playwright/playwright-best-practices/core/fixtures-hooks.md +417 -0
- package/skills/playwright/playwright-best-practices/core/global-setup.md +434 -0
- package/skills/playwright/playwright-best-practices/core/locators.md +242 -0
- package/skills/playwright/playwright-best-practices/core/page-object-model.md +315 -0
- package/skills/playwright/playwright-best-practices/core/projects-dependencies.md +453 -0
- package/skills/playwright/playwright-best-practices/core/test-data.md +492 -0
- package/skills/playwright/playwright-best-practices/core/test-suite-structure.md +361 -0
- package/skills/playwright/playwright-best-practices/core/test-tags.md +298 -0
- package/skills/playwright/playwright-best-practices/debugging/console-errors.md +420 -0
- package/skills/playwright/playwright-best-practices/debugging/debugging.md +504 -0
- package/skills/playwright/playwright-best-practices/debugging/error-testing.md +360 -0
- package/skills/playwright/playwright-best-practices/debugging/flaky-tests.md +496 -0
- package/skills/playwright/playwright-best-practices/frameworks/angular.md +530 -0
- package/skills/playwright/playwright-best-practices/frameworks/nextjs.md +469 -0
- package/skills/playwright/playwright-best-practices/frameworks/react.md +531 -0
- package/skills/playwright/playwright-best-practices/frameworks/vue.md +574 -0
- package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/ci-cd.md +468 -0
- package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/docker.md +283 -0
- package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/github-actions.md +546 -0
- package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/gitlab.md +397 -0
- package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/other-providers.md +521 -0
- package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/parallel-sharding.md +371 -0
- package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/performance.md +453 -0
- package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/reporting.md +424 -0
- package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/test-coverage.md +497 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/accessibility.md +359 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/api-testing.md +719 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/browser-extensions.md +506 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/canvas-webgl.md +493 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/component-testing.md +500 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/drag-drop.md +576 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/electron.md +509 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/file-operations.md +377 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/file-upload-download.md +562 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/forms-validation.md +561 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/graphql-testing.md +331 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/i18n.md +508 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/performance-testing.md +476 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/security-testing.md +430 -0
- package/skills/playwright/playwright-best-practices/testing-patterns/visual-regression.md +634 -0
- package/skills/playwright/playwright-cli/SKILL.md +420 -0
- package/skills/playwright/playwright-cli/references/element-attributes.md +23 -0
- package/skills/playwright/playwright-cli/references/playwright-tests.md +39 -0
- package/skills/playwright/playwright-cli/references/request-mocking.md +87 -0
- package/skills/playwright/playwright-cli/references/running-code.md +241 -0
- package/skills/playwright/playwright-cli/references/session-management.md +225 -0
- package/skills/playwright/playwright-cli/references/storage-state.md +275 -0
- package/skills/playwright/playwright-cli/references/test-generation.md +433 -0
- package/skills/playwright/playwright-cli/references/tracing.md +139 -0
- package/skills/playwright/playwright-cli/references/video-recording.md +143 -0
- package/skills/skills.lock.json +41 -37
- package/skills/skills.yaml +1 -0
- package/skills/testomatio/explorbot/explorbot-fundamentals/SKILL.md +76 -0
- package/skills/testomatio/explorbot/explorbot-fundamentals/references/no-install.md +36 -0
- package/skills/testomatio/explorbot/explorbot-plan/SKILL.md +108 -0
- package/skills/testomatio/explorbot/explorbot-setup/SKILL.md +86 -0
- package/skills/testomatio/explorbot/prima/SKILL.md +87 -0
- package/skills/testomatio/qa-process/qa-explain-behavior/SKILL.md +111 -0
- package/skills/testomatio/qa-process/qa-explain-behavior/references/answer-shapes.md +116 -0
- package/skills/testomatio/qa-process/qa-explain-behavior/references/examples.md +157 -0
- package/skills/testomatio/qa-process/qa-lead-strategy-advisor/SKILL.md +91 -0
- package/skills/testomatio/qa-process/qa-lead-strategy-advisor/references/output-format.md +71 -0
- package/skills/testomatio/qa-process/testing-workflow/SKILL.md +227 -0
- package/skills/testomatio/test-automation/automate-manual-test-cases/CLAUDE.md +56 -0
- package/skills/testomatio/test-automation/automate-manual-test-cases/SKILL.md +242 -0
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/CODECEPTJS_BEST_PRACTICES.md +182 -0
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/FINAL_SUMMARY_TEMPLATE.md +22 -0
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/PLAYWRIGHT_BEST_PRACTICES.md +90 -0
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/POM_BEST_PRACTICES.md +53 -0
- package/skills/testomatio/test-automation/automate-manual-test-cases/references/TEST_DATA_MANAGEMENT.md +52 -0
- package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/SKILL.md +107 -0
- package/skills/testomatio/test-automation/debug-fix-failed-flaky-autotests/references/DEBUGGING_QUICK_REFERENCE.md +113 -0
- package/skills/testomatio/test-automation/qa-automation-test-consolidation/SKILL.md +29 -0
- package/skills/testomatio/test-automation/qa-data-seeder/SKILL.md +83 -0
- package/skills/testomatio/test-automation/run-tests-with-testomatio-reporter/SKILL.md +153 -0
- package/skills/testomatio/test-automation/setup-change-aware-pr-testing/SKILL.md +190 -0
- package/skills/testomatio/test-automation/setup-ci-automation/SKILL.md +76 -0
- package/skills/testomatio/test-automation/testomat-allure-adapter/SKILL.md +289 -0
- package/skills/testomatio/test-management/detect-duplicate-test-cases/SKILL.md +86 -0
- package/skills/testomatio/test-management/detect-duplicate-test-cases/references/DUPLICATE_INSTRUCTIONS.md +54 -0
- package/skills/testomatio/test-management/improve-test-cases/SKILL.md +114 -0
- package/skills/testomatio/test-management/improve-test-cases/references/TESTOMAT_MARKDOWN_EXAMPLE.md +66 -0
- package/skills/testomatio/test-management/pull-request-diff-analyzer/SKILL.md +141 -0
- package/skills/testomatio/test-management/qa-e2e-tests-reporting/SKILL.md +354 -0
- package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_ARTIFACTS.md +82 -0
- package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_HTML_REPORT.md +37 -0
- package/skills/testomatio/test-management/qa-e2e-tests-reporting/references/TESTOMATIO_REPORTERS_CONFIG.md +118 -0
- package/skills/testomatio/test-management/qa-pr-requirements-analyzer/SKILL.md +149 -0
- package/skills/testomatio/test-management/qa-pr-requirements-analyzer/references/summary-example.md +54 -0
- package/skills/testomatio/test-management/qa-requirement-reviewer/SKILL.md +126 -0
- package/skills/testomatio/test-management/qa-requirement-reviewer/references/requirements_reviewer_examples.md +128 -0
- package/skills/testomatio/test-management/qa-split-testing-levels-pyramid/SKILL.md +55 -0
- package/skills/testomatio/test-management/qa-sprint-report-by-testomatio/SKILL.md +220 -0
- package/skills/testomatio/test-management/qa-sprint-report-by-testomatio/references/qa-sprint-report.md +126 -0
- package/skills/testomatio/test-management/qa-test-code-coverage/SKILL.md +174 -0
- package/skills/testomatio/test-management/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md +138 -0
- package/skills/testomatio/test-management/qa-test-code-coverage/references/E2E_FRAMEWORKS.md +65 -0
- package/skills/testomatio/test-management/qa-test-code-coverage/scripts/check-coverage.mjs +40 -0
- package/skills/testomatio/test-management/qa-thinking/SKILL.md +36 -0
- package/skills/testomatio/test-management/qa-write-test-cases/SKILL.md +267 -0
- package/skills/testomatio/test-management/qa-write-test-cases/references/test-case-format.md +387 -0
- package/skills/testomatio/test-management/qa-write-test-cases/references/testomat-tms-guide.md +72 -0
- package/skills/testomatio/test-management/qa-write-test-cases/references/writing-rule.md +159 -0
- package/skills/testomatio/test-management/scan-automation-project/SKILL.md +152 -0
- package/skills/testomatio/test-management/sync-test-cases-with-tms/SKILL.md +107 -0
- package/skills/testomatio/test-management/sync-test-cases-with-tms/references/TESTOMATIO_CLI.md +140 -0
- package/skills/testomatio/test-management/testomatio-mcp/SKILL.md +195 -0
- package/skills/testomatio/test-management/testomatio-mcp/references/MCP_SETUP.md +177 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-sprint-report-by-testomatio
|
|
3
|
+
description: Generate a QA Sprint Progress Summary Report from Testomat.io TMS data. Use when the user wants to produce a structured end-of-sprint report covering test design coverage, execution results, defect trends, and quality signals. The skill reads data via Testomat.io MCP tools, maps it to the report sections, and outputs an `.html` file by default (or `.md` if explicitly requested).
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: Testomat.io
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# QA Sprint Report by Testomat.io
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- End of sprint — produce a shareable QA report for stakeholders.
|
|
15
|
+
- Sprint review — need a structured view of what was tested, passed, failed, blocked.
|
|
16
|
+
- Mid-sprint status — capture current execution progress.
|
|
17
|
+
- The user mentions "sprint report", "QA summary", "sprint progress", or similar.
|
|
18
|
+
|
|
19
|
+
## How to Identify the Sprint
|
|
20
|
+
|
|
21
|
+
The user may identify the sprint in one of these ways (in priority order):
|
|
22
|
+
|
|
23
|
+
1. **Milestone name or ID** — e.g. "Sprint 42", "Sprint 2024.3" — use `milestones_list(type="Sprint")` to find it.
|
|
24
|
+
2. **Run group title** — e.g. "Sprint 42 Run" — use `rungroups_list` / `rungroups_get`.
|
|
25
|
+
3. **Direct run ID or run title** — use `runs_get` or `runs_list`.
|
|
26
|
+
4. **Plan title or ID** — use `plans_list` / `plans_get`.
|
|
27
|
+
5. **No identifier provided** — ask the user to specify the sprint milestone, run group, or run.
|
|
28
|
+
|
|
29
|
+
> If the user provides only a sprint name like "Sprint 42", always resolve it to a concrete milestone/rungroup/run first. Do not assume the title directly maps to an ID.
|
|
30
|
+
|
|
31
|
+
## Rules
|
|
32
|
+
|
|
33
|
+
- **Do not fabricate data.** If MCP does not return a value, use `[None]` or hide the section. Never invent numbers or statuses.
|
|
34
|
+
- **Resolve sprint first.** Never assume a sprint name maps directly to a run ID without verification.
|
|
35
|
+
- **Hide unavailable sections.** If analytics (Section 8) is not available, omit it entirely rather than leaving placeholder text.
|
|
36
|
+
- **One blank line between actions.** In any generated code or CLI snippets.
|
|
37
|
+
- **Use TQL for filtering.** Always prefer `tql` filters over client-side filtering when calling `runs_list`, `tests_list`, `testruns_list`.
|
|
38
|
+
- **HTML is the default output.** Generate `.html` first; only offer `.md` if the user explicitly asks for it or their initial prompt includes a request to save as `.md`.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
# MCP Tools Mapping
|
|
43
|
+
|
|
44
|
+
Each report section maps to specific MCP tools. See the full section structure and metrics in the template:
|
|
45
|
+
|
|
46
|
+
- [qa-sprint-report.md](./references/qa-sprint-report.md) — section layout with fill-in placeholders
|
|
47
|
+
|
|
48
|
+
### Quick Commands
|
|
49
|
+
|
|
50
|
+
| Action | MCP Tool | Key Parameters |
|
|
51
|
+
|--------|----------|----------------|
|
|
52
|
+
| Find sprint milestone | `milestones_list` | `type="Sprint"`, `status="active"` |
|
|
53
|
+
| List runs for sprint | `runs_list` | `tql`: `milestone == '{id}'` |
|
|
54
|
+
| Get run details | `runs_get` | `run_id` |
|
|
55
|
+
| Get test results | `testruns_list` | `run_id`, `filter_status` |
|
|
56
|
+
| Get suite tests | `tests_list` | `suite_id`, `per_page=100` |
|
|
57
|
+
| Check analytics availability | `system_ping` | (Enterprise flag in response) |
|
|
58
|
+
| Get test health analytics | `analytics_tests` | `kind`, `days`, `from`, `to` |
|
|
59
|
+
| Get stats analytics | `analytics_stats` | `kind`, `from`, `to` |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
# Workflow
|
|
64
|
+
|
|
65
|
+
### Step 1: Resolve Sprint Identity
|
|
66
|
+
|
|
67
|
+
Ask the user if no sprint identifier is provided. Try to resolve:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
1. milestones_list(type="Sprint") — find milestone matching sprint name
|
|
71
|
+
2. rungroups_list — find rungroup with sprint title
|
|
72
|
+
3. runs_list(tql="title % 'Sprint N'") — find runs by title
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Step 2: Gather Sprint Metadata & Time Range
|
|
76
|
+
|
|
77
|
+
Collect for the report header:
|
|
78
|
+
|
|
79
|
+
- `milestones_get(milestone_id)` or `rungroups_get(rungroup_id)` for sprint title/dates.
|
|
80
|
+
- Ask user for QA Lead name if not in TMS.
|
|
81
|
+
|
|
82
|
+
**Critical: Extract Sprint Time Range**
|
|
83
|
+
|
|
84
|
+
Resolve the sprint time range in this priority order:
|
|
85
|
+
|
|
86
|
+
1. **User-provided** — If the user specified a time range in their original prompt, use it.
|
|
87
|
+
2. **Milestone/Rungroup dates** — Extract `start_date` / `due_date` from `milestones_get` or `rungroups_get`.
|
|
88
|
+
3. **Run timestamps** — If milestone/rungroup has no dates, derive from earliest `created_at` and latest `finished_at` across the sprint's runs (`runs_get`).
|
|
89
|
+
4. **Manual input** — If no time range can be determined from TMS, ask the user to specify the sprint period manually.
|
|
90
|
+
|
|
91
|
+
The time range is required for:
|
|
92
|
+
- `analytics_tests(kind="...", from="YYYY-MM-DD", to="YYYY-MM-DD")`
|
|
93
|
+
- `analytics_stats(kind="...", from="YYYY-MM-DD", to="YYYY-MM-DD")`
|
|
94
|
+
- Filtering runs by sprint period
|
|
95
|
+
|
|
96
|
+
### Step 3: Collect Run Data
|
|
97
|
+
|
|
98
|
+
1. `runs_list(tql="milestone == '{id}'")` — all runs for the sprint milestone
|
|
99
|
+
2. For each run, call `runs_get` to get status, counts, environments
|
|
100
|
+
3. `testruns_list(run_id, filter_status)` — get passed/failed/skipped per run
|
|
101
|
+
|
|
102
|
+
### Step 4: Build Report Sections
|
|
103
|
+
|
|
104
|
+
Iterate sections 1–9 of the template, populating each with MCP data. Apply rules:
|
|
105
|
+
|
|
106
|
+
- If a metric is not available → use `[None]` in the cell
|
|
107
|
+
- If an entire section has no data → hide the section (do not show placeholder text)
|
|
108
|
+
- Section 8 (Analytics) → check `system_ping` response for Enterprise capability; if not available, hide
|
|
109
|
+
|
|
110
|
+
### Step 5: Write Output File
|
|
111
|
+
|
|
112
|
+
Write the filled report to:
|
|
113
|
+
```
|
|
114
|
+
{user-specified-path}/QA_Sprint_Progress_Report_{SprintName}_{YYYY-MM-DD}.html
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
If no path specified, save to current working directory.
|
|
118
|
+
|
|
119
|
+
### Step 6: Offer Markdown Export
|
|
120
|
+
|
|
121
|
+
After writing the `.html` file, ask the user if they also want to export the report as a `.md` file:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
❓ The report has been saved to `{path}`.
|
|
125
|
+
Would you like to also export it as a `.md` file?
|
|
126
|
+
|
|
127
|
+
1. ✏️ Yes, save as `.md` in the same location
|
|
128
|
+
2. 👍 No, keep the `.html` only
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**If user picks option 1:**
|
|
132
|
+
1. Convert the HTML content to Markdown format.
|
|
133
|
+
1. Generate ".md" markdown format report using template from the references - [qa-sprint-report.md](./references/qa-sprint-report.md).
|
|
134
|
+
2. Save as `QA_Sprint_Progress_Report_{SprintName}_{YYYY-MM-DD}.md` in the **same directory** as the HTML file.
|
|
135
|
+
|
|
136
|
+
**If user picks option 2:**
|
|
137
|
+
- Confirm the `.html` path and end the workflow.
|
|
138
|
+
|
|
139
|
+
## HTML Template Styling
|
|
140
|
+
|
|
141
|
+
When exporting to HTML, apply the following styles:
|
|
142
|
+
|
|
143
|
+
### Color Palette
|
|
144
|
+
|
|
145
|
+
| Token | Hex | Usage |
|
|
146
|
+
|-------|-----|-------|
|
|
147
|
+
| `--primary-color` | `#6366f1` | Headers, badges, links |
|
|
148
|
+
| `--primary-hover` | `#4f46e5` | Hover states |
|
|
149
|
+
| `--success-color` | `#10b981` | Passed/ready badges |
|
|
150
|
+
| `--danger-color` | `#ef4444` | Failed/blocked badges |
|
|
151
|
+
| `--warning-color` | `#f59e0b` | In-progress badges |
|
|
152
|
+
| `--info-color` | `#3b82f6` | Info badges |
|
|
153
|
+
| `--gray-50` to `--gray-900` | `#f9fafb` → `#111827` | Text hierarchy |
|
|
154
|
+
|
|
155
|
+
### Typography
|
|
156
|
+
|
|
157
|
+
- **Font Family:** Inter (Google Fonts) with fallback: `-apple-system, BlinkMacSystemFont, sans-serif`
|
|
158
|
+
- **Font Weights:** 300 (light), 400 (regular), 500 (medium), 600 (semibold), 700 (bold), 800 (extrabold)
|
|
159
|
+
- **Monospace:** `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas` — for ticket IDs and code
|
|
160
|
+
- **Icons:** Font Awesome 6.4.0 (`fa-solid`)
|
|
161
|
+
|
|
162
|
+
### Status Badges
|
|
163
|
+
|
|
164
|
+
| Status | Background | Text Color |
|
|
165
|
+
|--------|------------|------------|
|
|
166
|
+
| `passed`, `ready` | `#d1fae5` | `#065f46` |
|
|
167
|
+
| `failed`, `blocked` | `#fee2e2` | `#991b1b` |
|
|
168
|
+
| `progress` | `#fef3c7` | `#92400e` |
|
|
169
|
+
| `info` | `#dbeafe` | `#1e40af` |
|
|
170
|
+
|
|
171
|
+
### Key Elements
|
|
172
|
+
|
|
173
|
+
| Element | Description |
|
|
174
|
+
|---------|-------------|
|
|
175
|
+
| `.main-container` | White glass card (`rgba(255,255,255,0.98)`) with `backdrop-filter: blur(20px)`, max-width 1300px, border-radius 20px |
|
|
176
|
+
| `.header` | Gradient background (`linear-gradient(135deg, #6366f1, #4f46e5)`), white text, flex layout |
|
|
177
|
+
| `.section-card` | White background, 1px border `--gray-200`, border-radius 12px, box-shadow |
|
|
178
|
+
| `.report-table` | Full-width, collapse borders, hover highlight on rows |
|
|
179
|
+
| `.meta-grid` | CSS Grid (`repeat(auto-fit, minmax(220px, 1fr))`), gap 20px |
|
|
180
|
+
| `.instruction-card` | Info box with left 5px border in `--primary-color`, background `#eef2ff` |
|
|
181
|
+
| `.tms-link` | Primary color link with hover underline |
|
|
182
|
+
|
|
183
|
+
### HTML Structure
|
|
184
|
+
|
|
185
|
+
```html
|
|
186
|
+
<div class="main-container">
|
|
187
|
+
<header class="header">
|
|
188
|
+
<div class="header-title">
|
|
189
|
+
<h1>QA Sprint Progress Report</h1>
|
|
190
|
+
<p><i class="fa-solid fa-cubes"></i> [Project Name]</p>
|
|
191
|
+
</div>
|
|
192
|
+
<div class="header-badge">
|
|
193
|
+
<i class="fa-solid fa-calendar-days"></i> Sprint: [Sprint Number]
|
|
194
|
+
</div>
|
|
195
|
+
</header>
|
|
196
|
+
|
|
197
|
+
<section class="instruction-section">
|
|
198
|
+
<div class="instruction-card">
|
|
199
|
+
<h5><i class="fa-solid fa-circle-info"></i> How to Use This Template</h5>
|
|
200
|
+
<ul>...</ul>
|
|
201
|
+
</div>
|
|
202
|
+
</section>
|
|
203
|
+
|
|
204
|
+
<main class="content-section">
|
|
205
|
+
<div class="section-card">
|
|
206
|
+
<div class="section-title"><i class="fa-solid fa-chart-pie"></i> 1. Sprint Summary Scorecard</div>
|
|
207
|
+
<div class="meta-grid">...</div>
|
|
208
|
+
</div>
|
|
209
|
+
<!-- Repeat section-card for each section -->
|
|
210
|
+
</main>
|
|
211
|
+
</div>
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
# Report Template Reference
|
|
217
|
+
|
|
218
|
+
| Section | Description |
|
|
219
|
+
|---------|-------------|
|
|
220
|
+
| [qa-sprint-report.md](./references/qa-sprint-report.md) | Full template with all sections, emoji, and fill-in placeholders |
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# QA Sprint Progress Summary Report Example
|
|
2
|
+
|
|
3
|
+
The **QA Sprint Progress Summary Report** provides a structured, end-of-cycle view of all testing activities carried out during a sprint. It captures test design coverage, execution results, defect trends, and quality signals to keep stakeholders informed on product readiness.
|
|
4
|
+
|
|
5
|
+
> All sections and metrics in this report are sourced from **Testomat.io TMS** via MCP tools. If a metric or data point is not available in the TMS, the corresponding section is omitted or the value is set to `[None]`. Sections that rely solely on unavailable data are hidden entirely.
|
|
6
|
+
|
|
7
|
+
## 📋 General Sprint Meta
|
|
8
|
+
* **Project / Stream:** [Project Name / Stream]
|
|
9
|
+
* **QA Manager:** [Your Name]
|
|
10
|
+
* **Sprint Cycle:** [Sprint Number / Name]
|
|
11
|
+
* **Timeline Period:** [DD.MM.YYYY – DD.MM.YYYY]
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 📊 1. Sprint Summary Scorecard
|
|
16
|
+
|
|
17
|
+
| Metric | Value | Notes & Data Source |
|
|
18
|
+
| :--- | :---: | :--- |
|
|
19
|
+
| 🖊️ **New Test Cases Added to TMS** | [N] | Net new TCs authored in Testomat.io during this sprint. |
|
|
20
|
+
| 📋 **Total TCs in Project (End of Sprint)** | [N] | `tests_list` count at sprint close. |
|
|
21
|
+
| ⚙️ **Automation Rate** | [XX%] | Automated TCs ÷ Total TCs — from `analytics_stats(kind="automation-rate-by-date")`. |
|
|
22
|
+
| 📈 **Overall Pass Rate** | [XX%] | From `analytics_stats(kind="success-rate-by-date")` for the sprint window. |
|
|
23
|
+
| 🏁 **Tickets Tested** | [N] | Total number of tickets which were finished during the sprint. |
|
|
24
|
+
| ✅ **Tickets Completed (All Tests Passed)** | [N] | Formally approved and ready for delivery/release -> finished with all passed tests. |
|
|
25
|
+
| 🐛 **Defects/Bugs Identified** | [N] | Newly identified defects during execution. |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 🛠️ 2. Test Design & Coverage Expansion
|
|
30
|
+
|
|
31
|
+
| Ticket ID | Suite / Feature Area | Test Case Title(s) | Total TCs | TMS State |
|
|
32
|
+
| :--- | :--- | :--- | :---: | :--- |
|
|
33
|
+
| **[PROJ-123]** | Authentication | [TC Title 1]; [TC Title 2] | [N] | [Manual / Automated] |
|
|
34
|
+
| **[PROJ-456]** | Data Export | [TC Title 1] | [N] | [Automated] |
|
|
35
|
+
| **[PROJ-789]** | Data Export | [TC Title 1]; [TC Title 2] | [N] | [Mix: Automated & Manual] |
|
|
36
|
+
| *— No new test cases added —* | | | | |
|
|
37
|
+
|
|
38
|
+
> **TMS State** column: pull from `tests_list` → `state` field (`Manual` / `Automated` / `Mix: Automated & Manual`).
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 🎯 3. Testing Execution Progress by Ticket, Suite
|
|
43
|
+
|
|
44
|
+
> Report group is **Suite** (the primary TMS grouping). Each row corresponds to a Testomat.io Suite. Use `testruns_list(run_id="...")` to populate Passed / Failed / Skipped counts per suite.
|
|
45
|
+
|
|
46
|
+
| Ticket Name / Suite / Feature Area | Run Title | Total TCs | Passed | Failed | Skipped | Blocked | Execution % | Suite Release Status |
|
|
47
|
+
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :--- |
|
|
48
|
+
| [Suite Name — e.g. Billing] | [Run Title] | [N] | `[N]` | `[N]` | `[N]` | `[N]` | `[XX]%` | 🟡 In Progress |
|
|
49
|
+
| [Suite Name — e.g. Profile] | [Run Title] | [N] | `[N]` | `[N]` | `[N]` | `[N]` | `[XX]%` | ✅ Completed (All Tests Passed) |
|
|
50
|
+
| [Suite Name — e.g. Analytics] | [Run Title] | [N] | `[N]` | `[N]` | `[N]` | `[N]` | `[XX]%` | 🔴 Blocked |
|
|
51
|
+
| **TOTAL** | | **[N]** | **`[N]`** | **`[N]`** | **`[N]`** | **`[N]`** | **`[XX]%`** | **Overall Pass Rate:** `[XX%]` |
|
|
52
|
+
|
|
53
|
+
> **Status Key:**
|
|
54
|
+
> ✅ **Completed (All Tests Passed):** 100% test execution completed with zero critical defects.
|
|
55
|
+
> 🟡 **In Progress:** Validations are actively running or includes in-progress cases; no major technical hurdles encountered (🟡 >51% pass = In Progress).
|
|
56
|
+
> 🔴 **Blocked:** Discovered failure, issues (🔴<50% pass or blocked).
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## ✅ 4. Tickets Moved to Sign-Off (already passed)
|
|
61
|
+
* `[PROJ-XXX]` — `[User Story Name]` | **Verified:** `[DD.MM.YYYY]` | **TMS Run:** `[Link to Testomat.io Run]`
|
|
62
|
+
* `[PROJ-YYY]` — `[User Story Name]` | **Verified:** `[DD.MM.YYYY]` | **TMS Run:** `[Link to Testomat.io Run]`
|
|
63
|
+
* *— No tickets signed off during this period —*
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 🔁 5. Quality Feedback Loop (Returned to Dev)
|
|
68
|
+
* `[PROJ-881]` — *`[Feature Name]`*: `[AC #2 failed: App crashes when session expires / Linked to BUG-99]` (**Return Count:** `[1st time / 2nd time]`)
|
|
69
|
+
* *— No tickets returned to development —*
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 🐛 6. Sprint Bug Tracking
|
|
74
|
+
|
|
75
|
+
| Bug ID | Title / Summary Description | Priority | Linked Ticket |
|
|
76
|
+
| :--- | :--- | :---: | :--- | :--- |
|
|
77
|
+
| `[BUG-001]` | `[Short descriptive bug title]` | 🔴 Critical | `[PROJ-XXX]` |
|
|
78
|
+
| `[BUG-002]` | `[Short descriptive bug title]` | 🟠 Major | `[PROJ-XXX]` |
|
|
79
|
+
| *— No bugs registered this week —* | | |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 📊 8. TMS Test Health Analytics
|
|
84
|
+
|
|
85
|
+
> Data sourced via MCP `analytics_tests` and `analytics_stats` for the **current sprint period** only in case if you have access to this analytics.
|
|
86
|
+
(If most of the metrics could not be obtained, this section should be removed from the results.)
|
|
87
|
+
|
|
88
|
+
### 8.1 Test Health Overview
|
|
89
|
+
| Metric | Value | Notes |
|
|
90
|
+
| :--- | :---: | :--- |
|
|
91
|
+
| 🔀 **Flaky Tests** | [N] | `analytics_tests(kind="flaky", days=N)` |
|
|
92
|
+
| ⏭️ **Never Executed** | [N] | `analytics_tests(kind="never-executed", maturity_days=N)` |
|
|
93
|
+
| 🌿 **Evergreen (Stable)** | [N] | `analytics_tests(kind="evergreen", days=N)` |
|
|
94
|
+
| ⏭️ **Skipped Tests** | [N] | `analytics_tests(kind="skipped", days=N)` |
|
|
95
|
+
| 🐛 **Tests with Defects** | [N] | `analytics_tests(kind="defects", days=N)` |
|
|
96
|
+
| 🐌 **Slow Tests (>N ms)** | [N] | `analytics_tests(kind="slow", threshold_ms=N)` |
|
|
97
|
+
|
|
98
|
+
### 8.2 Success Rate Trend
|
|
99
|
+
> `analytics_stats(kind="success-rate-by-date", from="DD.MM.YYYY", to="DD.MM.YYYY")`
|
|
100
|
+
|
|
101
|
+
| Date | Success Rate % |
|
|
102
|
+
| :--- | :---: |
|
|
103
|
+
| [DD.MM.YYYY] | [XX%] |
|
|
104
|
+
| [DD.MM.YYYY] | [XX%] |
|
|
105
|
+
| [DD.MM.YYYY] | [XX%] |
|
|
106
|
+
|
|
107
|
+
### 8.3 Execution Volume Trend
|
|
108
|
+
> `analytics_stats(kind="testruns-by-date", from="DD.MM.YYYY", to="DD.MM.YYYY")`
|
|
109
|
+
|
|
110
|
+
| Date | Test Runs Executed |
|
|
111
|
+
| :--- | :---: |
|
|
112
|
+
| [DD.MM.YYYY] | [N] |
|
|
113
|
+
| [DD.MM.YYYY] | [N] |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 📊 9. Sprint Health & Project Readiness Assessment
|
|
118
|
+
|
|
119
|
+
| Assessment Area | Risk Level | Details & Impact Narrative |
|
|
120
|
+
| :--- | :---: | :--- |
|
|
121
|
+
| 🟢 **Sprint Completion Risk** | `[Green / Yellow / Red]` | Narrative based on execution % and sign-off rate. |
|
|
122
|
+
| 📦 **Spillover / Scope Creep Risk** | `[None / Low / High]` | Highlight any items vulnerable to rolling over into the next cycle. |
|
|
123
|
+
| 🖥️ **Environment & CI/CD Stability** | `[Stable / Degraded]` | Log testing framework bottlenecks, env down times, or pipeline blockers. |
|
|
124
|
+
|
|
125
|
+
**Sprint Summary Overview:**
|
|
126
|
+
[Write a summary 1-5 sentences overview by current sprint based on the provided info from this report.]
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-test-code-coverage
|
|
3
|
+
description: Map test cases — manual (markdown) and automated e2e (Playwright, Cypress, WebdriverIO, CodeceptJS, Puppeteer, Appium) — to source code files and produce a `coverage.tests.yml` mapping consumed by `@testomatio/reporter --filter "coverage:..."`. Use this skill when the user wants to run only the tests affected by a code change, generate a coverage file (manual, e2e, or both), build a traceability matrix between tests and source code, or set up change-aware regression.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: Testomat.io
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Tests to Code Coverage
|
|
11
|
+
|
|
12
|
+
Analyze the project's tests — manual markdown cases and automated e2e tests — and its source code. Produce `coverage.tests.yml` — a map from source files (or globs) to test identifiers: suite IDs, test IDs, tags. Testomat.io keeps manual and automated tests in one project, so one coverage file serves both. `@testomatio/reporter` consumes it to run only the tests affected by a diff (Step 6).
|
|
13
|
+
|
|
14
|
+
## Critical Constraints
|
|
15
|
+
|
|
16
|
+
- **Map the tests that exist — manual markdown cases, automated e2e tests, or both.** No unit tests. Do not suggest creating new tests.
|
|
17
|
+
- You may write to exactly three places, nothing else:
|
|
18
|
+
- the coverage file — default `coverage.tests.yml`, or the path the user gave;
|
|
19
|
+
- the `.testeiya/` cache dir — clone automated test repos, pull manual cases from Testomat.io (Step 1);
|
|
20
|
+
- `.gitignore` — add a `.testeiya/` line if it is missing.
|
|
21
|
+
- **Never modify a source or test file.**
|
|
22
|
+
- Never pull or clone tests into a tracked folder — only into the gitignored `.testeiya/`.
|
|
23
|
+
- **Everything in the coverage file must come from this project:** file keys from its source tree, identifiers from the Step 2 inventory. Never copy a path or ID from this skill's docs — they are placeholders.
|
|
24
|
+
- **No ad-hoc scripts, no parsers, never Python.** File reads and `grep` only; the single exception is the bundled checker (Step 5); beyond that a one-line `node -e '…'` is the limit.
|
|
25
|
+
- **Be proactive — never stop at a representative sample.** A few entries per domain is a failed run. Keep mapping without asking permission to continue until the completion criterion in Step 4 is met.
|
|
26
|
+
- Stop if you cannot write the output file, or no tests are found and the user declines every option in Step 1.
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
### Step 1: Discover the project
|
|
31
|
+
|
|
32
|
+
- Run the `scan-automation-project` skill to inventory the project. Use its output as the source of truth — do not duplicate the scan.
|
|
33
|
+
- Capture from its result:
|
|
34
|
+
- Manual Tests — the `.test.md` files and their suite/test titles.
|
|
35
|
+
- Automated Tests — the e2e test files and framework(s). See [E2E Frameworks](./references/E2E_FRAMEWORKS.md) if the scan is ambiguous.
|
|
36
|
+
- Project Overview — languages, frameworks, complexity (drives the subagent split in Step 4).
|
|
37
|
+
- Map whatever exists: both kinds go into one coverage file; a single kind is fine too.
|
|
38
|
+
- ❓ If the scan finds no tests at all (it checks the `.testeiya/` cache too), ask the user:
|
|
39
|
+
1. Pull manual cases from Testomat.io — have `sync-test-cases-with-tms` pull into the cache: `npx check-tests pull -d .testeiya/manual-tests`, add `.testeiya/` to `.gitignore` if missing, re-run the scan.
|
|
40
|
+
2. Clone the automated tests repo: `git clone <url> .testeiya/e2e-tests`, add `.testeiya/` to `.gitignore` if missing, re-run the scan.
|
|
41
|
+
3. Point to a directory the scan missed, then re-run the scan there.
|
|
42
|
+
4. Stop.
|
|
43
|
+
- ❓ If two automated frameworks are detected (say Jest and Playwright), ask which one is the e2e framework — coverage filtering runs per runner.
|
|
44
|
+
|
|
45
|
+
### Step 2: Extract test information
|
|
46
|
+
|
|
47
|
+
Build one inventory of identifiers across both kinds:
|
|
48
|
+
|
|
49
|
+
- Suite IDs — `@S` + 8 chars.
|
|
50
|
+
- Test IDs — `@T` + 8 chars.
|
|
51
|
+
- Tags — other `@word` markers.
|
|
52
|
+
- Context — titles, steps, page objects, routes hit. This drives the mapping in Step 4.
|
|
53
|
+
|
|
54
|
+
Where IDs live:
|
|
55
|
+
|
|
56
|
+
- Manual cases follow the [Classical Tests Markdown Format](../qa-write-test-cases/references/test-case-format.md) — IDs in `<!-- suite ... id: @S... -->` / `<!-- test ... id: @T... -->` blocks, tags in titles and `tags:` lines.
|
|
57
|
+
- Automated tests carry IDs in `describe` / `it` / `test` / `Feature` / `Scenario` titles — see [E2E Frameworks](./references/E2E_FRAMEWORKS.md).
|
|
58
|
+
|
|
59
|
+
Read the files, or `grep` the directories that hold the tests:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
grep -rnE 'id:[[:space:]]*@[ST]' <dir> # manual suite/test IDs
|
|
63
|
+
grep -rnoE '@[ST][0-9a-f]{8}' <dir> # IDs in automated test titles
|
|
64
|
+
grep -rhoE '@[A-Za-z0-9_-]+' <dir> | sort -u # every @token, tags included
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Missing IDs mean the tests were never synced with Testomat.io — the reporter cannot select them:
|
|
68
|
+
|
|
69
|
+
- ❓ Manual files without IDs: ask whether to push them first via `sync-test-cases-with-tms`, or skip those files.
|
|
70
|
+
- Automated tests without IDs in most files: stop and instruct the user to run `npx check-tests@latest <Framework> "<glob>" --update-ids` first (per-framework commands: [E2E Frameworks](./references/E2E_FRAMEWORKS.md)).
|
|
71
|
+
|
|
72
|
+
### Step 3: Plan the coverage map by domain
|
|
73
|
+
|
|
74
|
+
**Do not crawl the codebase file by file.** Identify the application's domain areas first; Step 4 then maps area by area.
|
|
75
|
+
|
|
76
|
+
- Derive the areas from both sides:
|
|
77
|
+
- the suite tree from Step 2 — the suite hierarchy is the QA team's own map of the product;
|
|
78
|
+
- the source structure — modules, routes, services, entry points.
|
|
79
|
+
- Pair each area with the suites that test it and the source folders that implement it.
|
|
80
|
+
- Order the areas by criticality, most critical first: payments/billing, auth and access control, data integrity, core business flows — then supporting features, then peripheral UI. Suite size is a signal: what QA tests heavily, they consider critical.
|
|
81
|
+
- Show the ordered plan to the user before mapping.
|
|
82
|
+
- Business code only: skip test code, manual test directories, dependency/build/vendor folders, framework configs, lock files.
|
|
83
|
+
- **Templates and views are mappable source** (`.vue`, `.erb`, `.blade.php`, …) — tests check the rendered UI, so map them like code.
|
|
84
|
+
- ❓ If areas or their priority are unclear, ask the user.
|
|
85
|
+
|
|
86
|
+
### Step 4: Map source files to tests
|
|
87
|
+
|
|
88
|
+
**The Step 2 inventory is the work list. The map is complete only when every suite in it is either present in the coverage file or recorded as unmapped with a reason.** Work through the areas in Step 3's order — most critical first, so even an interrupted run covers what matters most. Run two passes — always both:
|
|
89
|
+
|
|
90
|
+
- Code → tests: for each area, map its source files and subtrees to the identifiers of the tests that check them.
|
|
91
|
+
- Tests → code: walk the inventory; for every suite still absent from the map, find the source it exercises and add it — or record why it cannot be mapped (feature has no code here, external system, needs user input).
|
|
92
|
+
|
|
93
|
+
Scale the passes to the project — codebase size and suite count from Step 1:
|
|
94
|
+
|
|
95
|
+
- Small codebase and few suites — run both passes in this session.
|
|
96
|
+
- Large codebase or dozens of suites — spawn subagents in parallel: one per domain area for the code→tests pass, then one per batch of still-unmapped suites for the tests→code pass. Give each subagent:
|
|
97
|
+
- its slice — one area (its suites and source folders), or a batch of suites;
|
|
98
|
+
- the full test inventory from Step 2 — subagents must not re-extract it;
|
|
99
|
+
- the mapping rules below and the [Coverage File Format](./references/COVERAGE_FILE_FORMAT.md);
|
|
100
|
+
- the instruction to return a YAML fragment for its slice only.
|
|
101
|
+
- Merge the fragments into one map, drop duplicate keys and empty entries. Only the main session writes the file (Step 5).
|
|
102
|
+
|
|
103
|
+
For each candidate source file, pick the identifier that keeps selecting the right tests as the test suite grows:
|
|
104
|
+
|
|
105
|
+
- Suite (`@S`) — the default. Most tests in the suite relate to the file.
|
|
106
|
+
- Tag (`@word`) — the relevant tests live across several suites.
|
|
107
|
+
- Test (`@T`) — the exception. Use only when just one or two tests in a suite match the file.
|
|
108
|
+
|
|
109
|
+
Rules:
|
|
110
|
+
|
|
111
|
+
- **More than a few test IDs from one suite or category → replace them with the suite or tag.** Tests added there later are picked up automatically; a list of test IDs goes stale.
|
|
112
|
+
- Never list a test ID whose suite is already in the same entry.
|
|
113
|
+
- Keys are source file paths or globs, relative to the repo root; use a glob when a whole subtree maps to the same identifiers.
|
|
114
|
+
- Manual and automated identifiers mix freely in one entry.
|
|
115
|
+
- No empty entries.
|
|
116
|
+
- Annotate each identifier with a `#` comment naming its suite/test/tag title.
|
|
117
|
+
|
|
118
|
+
YAML grammar: [Coverage File Format](./references/COVERAGE_FILE_FORMAT.md).
|
|
119
|
+
|
|
120
|
+
### Step 5: Save and validate the coverage file
|
|
121
|
+
|
|
122
|
+
- Write the YAML to the output path, keeping the `#` comments.
|
|
123
|
+
- Keys are paths to source files in this repo — never `.testeiya/...` paths.
|
|
124
|
+
- Check it with the bundled checker. It ships in this skill's `scripts/` directory (next to this SKILL.md), not in the project — resolve its path from the skill location:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
npx js-yaml coverage.tests.yml | node <path-to-this-skill>/scripts/check-coverage.mjs
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- The checker flags keys missing on disk and empty entries, and prints every identifier referenced — cross-check them against the Step 2 inventory; only you know which are real.
|
|
131
|
+
- Reconcile the other direction too: every suite in the inventory must appear in the file or in the unmapped list. Anything missing from both means the tests→code pass is not finished — go back to Step 4.
|
|
132
|
+
|
|
133
|
+
### Step 6: Report coverage completeness
|
|
134
|
+
|
|
135
|
+
Show the user:
|
|
136
|
+
|
|
137
|
+
- Suites mapped vs. total suites in the inventory; same for tests and tags where meaningful.
|
|
138
|
+
- Every unmapped suite with its reason.
|
|
139
|
+
- The produced YAML (or its path and entry count when large).
|
|
140
|
+
|
|
141
|
+
### Step 7: Show next steps
|
|
142
|
+
|
|
143
|
+
Tell the user how to use the file with `@testomatio/reporter`:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# Automated tests — the project's runner command must be passed in
|
|
147
|
+
npx @testomatio/reporter run "npx playwright test" \
|
|
148
|
+
--filter "coverage:file=coverage.tests.yml,diff=main"
|
|
149
|
+
|
|
150
|
+
# Manual tests — creates a pending run with only the affected cases
|
|
151
|
+
npx @testomatio/reporter run --kind manual \
|
|
152
|
+
--filter "coverage:file=coverage.tests.yml,diff=main"
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
- Per-framework runner commands and a GitHub Actions example: [Coverage File Format](./references/COVERAGE_FILE_FORMAT.md).
|
|
156
|
+
- To group manual and automated runs of one regression cycle, set the same `TESTOMATIO_RUNGROUP` env var on both commands.
|
|
157
|
+
- Recommend committing the coverage file so CI and teammates use the same mapping.
|
|
158
|
+
- In CI, diff against the base branch — `diff=origin/main` — and checkout with `fetch-depth: 0`.
|
|
159
|
+
- Pulled or cloned tests stay in the gitignored `.testeiya/` cache for re-runs — don't delete it or move it into a tracked folder.
|
|
160
|
+
|
|
161
|
+
### Step 8: Suggest follow-ups
|
|
162
|
+
|
|
163
|
+
- Wire the map into CI — runs created per PR and launched on preview/merge: delegate to `setup-change-aware-pr-testing`.
|
|
164
|
+
- Run the affected tests right now from the terminal: delegate to `run-tests-with-testomatio-reporter`.
|
|
165
|
+
- Coverage gaps — source features no test maps to. On approval, propose new cases (delegate to `qa-write-test-cases`).
|
|
166
|
+
- Dead tests — tests whose features no longer exist in source.
|
|
167
|
+
- Answer questions like "do we have tests for X?" from the inventory.
|
|
168
|
+
- Editing pulled manual cases: edit them in `.testeiya/manual-tests/` and push back with `sync-test-cases-with-tms`.
|
|
169
|
+
|
|
170
|
+
## References
|
|
171
|
+
|
|
172
|
+
- [Coverage File Format](./references/COVERAGE_FILE_FORMAT.md) — coverage YAML grammar, reporter contract, GitHub Actions example.
|
|
173
|
+
- [E2E Frameworks](./references/E2E_FRAMEWORKS.md) — framework detection signals, where IDs live, per-framework `check-tests` commands.
|
|
174
|
+
- [Manual test markdown format](../qa-write-test-cases/references/test-case-format.md) — canonical, owned by `qa-write-test-cases`.
|
package/skills/testomatio/test-management/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Coverage File Format
|
|
2
|
+
|
|
3
|
+
`coverage.tests.yml` (any path works) maps source files to manual and automated test identifiers — one grammar for both kinds. It is read by `@testomatio/reporter run --filter "coverage:file=<path>,diff=<branch>"`.
|
|
4
|
+
|
|
5
|
+
Every path and identifier in this document is a placeholder showing the shape. Real file keys come from the project's source tree; real IDs come from its test inventory. Never copy a value from here into a coverage file.
|
|
6
|
+
|
|
7
|
+
## Top-level shape
|
|
8
|
+
|
|
9
|
+
A YAML map. Keys are file paths or globs relative to the repository root. Values are lists of identifiers — Suite IDs, Test IDs, or tags.
|
|
10
|
+
|
|
11
|
+
```yaml
|
|
12
|
+
<file or glob>:
|
|
13
|
+
- "@S<8 chars>" # Suite ID
|
|
14
|
+
- "@T<8 chars>" # Test ID
|
|
15
|
+
- "@<tag>" # Tag (matches anything tagged with that label)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Identifier types
|
|
19
|
+
|
|
20
|
+
| Identifier | Format | Shape | Meaning |
|
|
21
|
+
| ---------- | ------------ | ------------- | ---------------------------------------- |
|
|
22
|
+
| Suite ID | `@S` + 8 hex | `@S1a2b3c4d` | All tests inside the suite are selected. |
|
|
23
|
+
| Test ID | `@T` + 8 hex | `@T5e6f7a8b` | Only this specific test is selected. |
|
|
24
|
+
| Tag | `@<word>` | `@smoke` | All tests tagged with the label. |
|
|
25
|
+
|
|
26
|
+
For automated tests, IDs live in describe / it / test names:
|
|
27
|
+
|
|
28
|
+
```javascript
|
|
29
|
+
describe('<suite title> @S1a2b3c4d', () => {
|
|
30
|
+
it('<test title> @T5e6f7a8b', () => { ... });
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
They are populated by `npx check-tests <Framework> "<glob>" --update-ids` after the tests are imported into Testomat.io.
|
|
35
|
+
|
|
36
|
+
## File keys
|
|
37
|
+
|
|
38
|
+
Either an exact path or a glob:
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
# Exact file
|
|
42
|
+
<path/to/file>:
|
|
43
|
+
- "@S1a2b3c4d"
|
|
44
|
+
|
|
45
|
+
# Glob — any file under the directory
|
|
46
|
+
<path/to/dir>/**:
|
|
47
|
+
- "@<tag>"
|
|
48
|
+
|
|
49
|
+
# Multiple identifiers per file
|
|
50
|
+
<path/to/file>:
|
|
51
|
+
- "@S1a2b3c4d"
|
|
52
|
+
- "@T5e6f7a8b"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Comments
|
|
56
|
+
|
|
57
|
+
Use `#` to annotate each identifier with its human-readable title or purpose:
|
|
58
|
+
|
|
59
|
+
```yaml
|
|
60
|
+
<path/to/file>:
|
|
61
|
+
- "@S1a2b3c4d" # Suite: <suite title>
|
|
62
|
+
- "@T5e6f7a8b" # Test: <test title>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Reporter usage
|
|
66
|
+
|
|
67
|
+
For automated tests the runner command **must** be the first positional argument — `--filter` generates a `--grep` that the runner consumes.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Playwright
|
|
71
|
+
npx @testomatio/reporter run "npx playwright test" \
|
|
72
|
+
--filter "coverage:file=coverage.tests.yml,diff=main"
|
|
73
|
+
|
|
74
|
+
# Cypress
|
|
75
|
+
npx @testomatio/reporter run "npx cypress run" \
|
|
76
|
+
--filter "coverage:file=coverage.tests.yml,diff=main"
|
|
77
|
+
|
|
78
|
+
# WebdriverIO / Mocha / Jest / CodeceptJS — pass the corresponding runner command
|
|
79
|
+
npx @testomatio/reporter run "npx codeceptjs run" \
|
|
80
|
+
--filter "coverage:file=coverage.tests.yml,diff=main"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
For manual tests pass `--kind manual` instead of a runner — the reporter creates a pending run in Testomat.io with only the affected cases:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npx @testomatio/reporter run --kind manual \
|
|
87
|
+
--filter "coverage:file=coverage.tests.yml,diff=main"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The `diff` value must be a stable branch (`main`, `origin/main`) the reporter can run `git diff` against.
|
|
91
|
+
|
|
92
|
+
## GitHub Actions example
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
name: Run Tests Based on Changes
|
|
96
|
+
|
|
97
|
+
on:
|
|
98
|
+
pull_request:
|
|
99
|
+
branches: [main]
|
|
100
|
+
|
|
101
|
+
jobs:
|
|
102
|
+
e2e-tests:
|
|
103
|
+
runs-on: ubuntu-latest
|
|
104
|
+
steps:
|
|
105
|
+
- uses: actions/checkout@v4
|
|
106
|
+
with:
|
|
107
|
+
fetch-depth: 0
|
|
108
|
+
|
|
109
|
+
# install browsers and prepare app for testing here
|
|
110
|
+
|
|
111
|
+
- name: Run affected E2E tests
|
|
112
|
+
env:
|
|
113
|
+
TESTOMATIO: ${{ secrets.TESTOMATIO }}
|
|
114
|
+
run: |
|
|
115
|
+
npx @testomatio/reporter run "npx playwright test" \
|
|
116
|
+
--filter "coverage:file=coverage.tests.yml,diff=origin/main"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Checking the coverage file
|
|
120
|
+
|
|
121
|
+
One command — no parser of your own. Run it with the project root as working directory (file keys resolve against it), but the checker itself lives in the skill's `scripts/` directory, not in the project:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npx js-yaml coverage.tests.yml | node <path-to-this-skill>/scripts/check-coverage.mjs
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
`npx js-yaml` parses the YAML (it fails loudly on a malformed file, so a broken one never reaches the script). `check-coverage.mjs` (~25 lines, zero deps) reads that parsed map on stdin, flags any key whose path is missing on disk, flags any key with no identifiers, lists every `@S…` / `@T…` / tag the file references, and exits non-zero on a problem.
|
|
128
|
+
|
|
129
|
+
The script can't tell which identifiers are real — check the listed ones against the set you extracted earlier in the workflow. Don't re-parse the test set, don't write your own YAML parser, and never use `python`.
|
|
130
|
+
|
|
131
|
+
## Authoring tips
|
|
132
|
+
|
|
133
|
+
- Prefer Suite IDs when most of a suite relates to a file.
|
|
134
|
+
- Use tags for cross-cutting concerns that span suites.
|
|
135
|
+
- Use Test IDs only when one or two tests in a suite are relevant — a long test-ID list goes stale as tests are added, a suite or tag keeps selecting new ones.
|
|
136
|
+
- Never list a test ID whose suite is already in the entry — the suite ID already selects it.
|
|
137
|
+
- Avoid empty entries.
|
|
138
|
+
- Commit the coverage file to the repo so CI and teammates use the same mapping.
|