qa-skills 3.0.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/README.md +168 -0
- package/bin/cli.js +42 -0
- package/dist/agents/registry.d.ts +5 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +101 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/types.d.ts +9 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/dependencies.d.ts +21 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +125 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/installer.d.ts +25 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +437 -0
- package/dist/installer.js.map +1 -0
- package/dist/scaffold.d.ts +27 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +182 -0
- package/dist/scaffold.js.map +1 -0
- package/package.json +40 -0
- package/skills/qa-accessibility-test-writer/SKILL.md +127 -0
- package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +349 -0
- package/skills/qa-accessibility-test-writer/references/best-practices.md +184 -0
- package/skills/qa-accessibility-test-writer/references/wcag-tests.md +331 -0
- package/skills/qa-api-contract-curator/SKILL.md +104 -0
- package/skills/qa-api-contract-curator/references/breaking-changes.md +363 -0
- package/skills/qa-api-contract-curator/references/openapi-structure.md +404 -0
- package/skills/qa-browser-data-collector/SKILL.md +132 -0
- package/skills/qa-browser-data-collector/references/data-collection-checklist.md +91 -0
- package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +113 -0
- package/skills/qa-bug-ticket-creator/SKILL.md +148 -0
- package/skills/qa-bug-ticket-creator/references/bug-report-format.md +149 -0
- package/skills/qa-bug-ticket-creator/references/severity-guide.md +81 -0
- package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +39 -0
- package/skills/qa-changelog-analyzer/SKILL.md +134 -0
- package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +138 -0
- package/skills/qa-changelog-analyzer/references/impact-mapping.md +120 -0
- package/skills/qa-clickup-integration/SKILL.md +166 -0
- package/skills/qa-clickup-integration/references/api-patterns.md +102 -0
- package/skills/qa-clickup-integration/references/field-mapping.md +71 -0
- package/skills/qa-codeceptjs-writer/SKILL.md +136 -0
- package/skills/qa-codeceptjs-writer/references/best-practices.md +207 -0
- package/skills/qa-codeceptjs-writer/references/config.md +255 -0
- package/skills/qa-codeceptjs-writer/references/patterns.md +285 -0
- package/skills/qa-coverage-analyzer/SKILL.md +166 -0
- package/skills/qa-coverage-analyzer/references/best-practices.md +142 -0
- package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +155 -0
- package/skills/qa-coverage-analyzer/references/tools.md +204 -0
- package/skills/qa-cypress-writer/SKILL.md +134 -0
- package/skills/qa-cypress-writer/references/assertions.md +121 -0
- package/skills/qa-cypress-writer/references/best-practices.md +82 -0
- package/skills/qa-cypress-writer/references/config.md +121 -0
- package/skills/qa-cypress-writer/references/patterns.md +170 -0
- package/skills/qa-data-factory/SKILL.md +126 -0
- package/skills/qa-data-factory/references/factory-patterns.md +164 -0
- package/skills/qa-data-factory/references/faker-guide.md +131 -0
- package/skills/qa-diagram-generator/SKILL.md +125 -0
- package/skills/qa-diagram-generator/references/c4-model.md +53 -0
- package/skills/qa-diagram-generator/references/charts.md +58 -0
- package/skills/qa-diagram-generator/references/class-diagram.md +85 -0
- package/skills/qa-diagram-generator/references/er-diagram.md +69 -0
- package/skills/qa-diagram-generator/references/flowchart.md +92 -0
- package/skills/qa-diagram-generator/references/from-screenshot.md +45 -0
- package/skills/qa-diagram-generator/references/gantt.md +49 -0
- package/skills/qa-diagram-generator/references/journey.md +50 -0
- package/skills/qa-diagram-generator/references/mindmap.md +75 -0
- package/skills/qa-diagram-generator/references/sequence.md +69 -0
- package/skills/qa-diagram-generator/references/state-diagram.md +56 -0
- package/skills/qa-discovery-interview/SKILL.md +182 -0
- package/skills/qa-discovery-interview/references/completeness-checklist.md +53 -0
- package/skills/qa-discovery-interview/references/conflict-patterns.md +101 -0
- package/skills/qa-discovery-interview/references/qa-categories.md +147 -0
- package/skills/qa-discovery-interview/templates/qa-brief-template.md +168 -0
- package/skills/qa-environment-checker/SKILL.md +142 -0
- package/skills/qa-environment-checker/references/dependency-matrix.md +101 -0
- package/skills/qa-environment-checker/references/health-checks.md +209 -0
- package/skills/qa-environment-checker/templates/env-readiness-template.md +64 -0
- package/skills/qa-flaky-detector/SKILL.md +153 -0
- package/skills/qa-flaky-detector/references/ci-analysis.md +140 -0
- package/skills/qa-flaky-detector/references/flaky-patterns.md +247 -0
- package/skills/qa-github-issues-enhanced/SKILL.md +175 -0
- package/skills/qa-github-issues-enhanced/references/issue-templates.md +425 -0
- package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +130 -0
- package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +188 -0
- package/skills/qa-httpx-writer/SKILL.md +138 -0
- package/skills/qa-httpx-writer/references/assertions.md +195 -0
- package/skills/qa-httpx-writer/references/best-practices.md +140 -0
- package/skills/qa-httpx-writer/references/config.md +212 -0
- package/skills/qa-httpx-writer/references/patterns.md +262 -0
- package/skills/qa-jest-writer/SKILL.md +131 -0
- package/skills/qa-jest-writer/references/assertions.md +125 -0
- package/skills/qa-jest-writer/references/best-practices.md +136 -0
- package/skills/qa-jest-writer/references/config.md +134 -0
- package/skills/qa-jest-writer/references/patterns.md +172 -0
- package/skills/qa-jira-integration/SKILL.md +135 -0
- package/skills/qa-jira-integration/references/api-patterns.md +143 -0
- package/skills/qa-jira-integration/references/field-mapping.md +79 -0
- package/skills/qa-jira-integration/references/xray-integration.md +85 -0
- package/skills/qa-jmeter-writer/SKILL.md +171 -0
- package/skills/qa-jmeter-writer/references/best-practices.md +157 -0
- package/skills/qa-jmeter-writer/references/config.md +204 -0
- package/skills/qa-jmeter-writer/references/patterns.md +242 -0
- package/skills/qa-junit5-writer/SKILL.md +157 -0
- package/skills/qa-junit5-writer/references/assertions.md +118 -0
- package/skills/qa-junit5-writer/references/config.md +97 -0
- package/skills/qa-junit5-writer/references/patterns.md +162 -0
- package/skills/qa-k6-writer/SKILL.md +155 -0
- package/skills/qa-k6-writer/references/best-practices.md +236 -0
- package/skills/qa-k6-writer/references/config.md +219 -0
- package/skills/qa-k6-writer/references/patterns.md +304 -0
- package/skills/qa-linear-integration/SKILL.md +137 -0
- package/skills/qa-linear-integration/references/api-patterns.md +249 -0
- package/skills/qa-linear-integration/references/field-mapping.md +121 -0
- package/skills/qa-locust-writer/SKILL.md +151 -0
- package/skills/qa-locust-writer/references/best-practices.md +126 -0
- package/skills/qa-locust-writer/references/config.md +170 -0
- package/skills/qa-locust-writer/references/patterns.md +235 -0
- package/skills/qa-manual-test-designer/SKILL.md +145 -0
- package/skills/qa-manual-test-designer/references/exploratory-charters.md +138 -0
- package/skills/qa-manual-test-designer/references/personas.md +146 -0
- package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +47 -0
- package/skills/qa-manual-test-designer/templates/test-case-template.md +31 -0
- package/skills/qa-mobile-test-writer/SKILL.md +144 -0
- package/skills/qa-mobile-test-writer/references/best-practices.md +214 -0
- package/skills/qa-mobile-test-writer/references/config.md +309 -0
- package/skills/qa-mobile-test-writer/references/patterns.md +304 -0
- package/skills/qa-nfr-analyst/SKILL.md +177 -0
- package/skills/qa-nfr-analyst/references/iso-25010-model.md +159 -0
- package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +202 -0
- package/skills/qa-nfr-analyst/references/wcag-checklist.md +184 -0
- package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +89 -0
- package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +48 -0
- package/skills/qa-orchestrator/SKILL.md +132 -0
- package/skills/qa-orchestrator/references/handoff-chains.md +105 -0
- package/skills/qa-orchestrator/references/pipeline-modes.md +115 -0
- package/skills/qa-orchestrator/references/scheduler-rules.md +84 -0
- package/skills/qa-pact-writer/SKILL.md +133 -0
- package/skills/qa-pact-writer/references/best-practices.md +100 -0
- package/skills/qa-pact-writer/references/config.md +135 -0
- package/skills/qa-pact-writer/references/patterns.md +161 -0
- package/skills/qa-plan-creator/SKILL.md +139 -0
- package/skills/qa-plan-creator/references/introduction-plan.md +43 -0
- package/skills/qa-plan-creator/references/migration-plan.md +44 -0
- package/skills/qa-plan-creator/references/onboarding-plan.md +46 -0
- package/skills/qa-plan-creator/references/performance-plan.md +44 -0
- package/skills/qa-plan-creator/references/regression-plan.md +45 -0
- package/skills/qa-plan-creator/references/release-plan.md +45 -0
- package/skills/qa-plan-creator/references/sprint-plan.md +44 -0
- package/skills/qa-plan-creator/references/test-plan.md +59 -0
- package/skills/qa-plan-creator/references/uat-plan.md +43 -0
- package/skills/qa-plan-creator/templates/checklist-template.md +36 -0
- package/skills/qa-plan-creator/templates/regression-checklist-template.md +49 -0
- package/skills/qa-plan-creator/templates/release-checklist-template.md +46 -0
- package/skills/qa-plan-creator/templates/test-plan-template.md +74 -0
- package/skills/qa-playwright-py-writer/SKILL.md +156 -0
- package/skills/qa-playwright-py-writer/references/best-practices.md +194 -0
- package/skills/qa-playwright-py-writer/references/config.md +195 -0
- package/skills/qa-playwright-py-writer/references/patterns.md +212 -0
- package/skills/qa-playwright-ts-writer/SKILL.md +151 -0
- package/skills/qa-playwright-ts-writer/references/assertions.md +109 -0
- package/skills/qa-playwright-ts-writer/references/best-practices.md +191 -0
- package/skills/qa-playwright-ts-writer/references/config.md +144 -0
- package/skills/qa-playwright-ts-writer/references/patterns.md +171 -0
- package/skills/qa-pytest-writer/SKILL.md +145 -0
- package/skills/qa-pytest-writer/references/assertions.md +149 -0
- package/skills/qa-pytest-writer/references/best-practices.md +97 -0
- package/skills/qa-pytest-writer/references/config.md +176 -0
- package/skills/qa-pytest-writer/references/patterns.md +251 -0
- package/skills/qa-qase-integration/SKILL.md +149 -0
- package/skills/qa-qase-integration/references/api-reference.md +354 -0
- package/skills/qa-qase-integration/references/ci-integration.md +196 -0
- package/skills/qa-qase-integration/references/field-mapping.md +157 -0
- package/skills/qa-requirements-generator/SKILL.md +152 -0
- package/skills/qa-requirements-generator/references/iso-29148-structure.md +153 -0
- package/skills/qa-requirements-generator/references/requirement-patterns.md +278 -0
- package/skills/qa-rest-assured-writer/SKILL.md +137 -0
- package/skills/qa-rest-assured-writer/references/best-practices.md +50 -0
- package/skills/qa-rest-assured-writer/references/config.md +124 -0
- package/skills/qa-rest-assured-writer/references/patterns.md +192 -0
- package/skills/qa-risk-analyzer/SKILL.md +158 -0
- package/skills/qa-risk-analyzer/references/impact-analysis.md +133 -0
- package/skills/qa-risk-analyzer/references/risk-factors.md +123 -0
- package/skills/qa-robot-framework-writer/SKILL.md +147 -0
- package/skills/qa-robot-framework-writer/references/best-practices.md +249 -0
- package/skills/qa-robot-framework-writer/references/config.md +204 -0
- package/skills/qa-robot-framework-writer/references/libraries.md +273 -0
- package/skills/qa-robot-framework-writer/references/patterns.md +216 -0
- package/skills/qa-security-test-writer/SKILL.md +123 -0
- package/skills/qa-security-test-writer/references/best-practices.md +155 -0
- package/skills/qa-security-test-writer/references/owasp-top10.md +331 -0
- package/skills/qa-security-test-writer/references/zap-config.md +258 -0
- package/skills/qa-selenium-java-writer/SKILL.md +143 -0
- package/skills/qa-selenium-java-writer/references/best-practices.md +59 -0
- package/skills/qa-selenium-java-writer/references/config.md +143 -0
- package/skills/qa-selenium-java-writer/references/patterns.md +170 -0
- package/skills/qa-selenium-py-writer/SKILL.md +150 -0
- package/skills/qa-selenium-py-writer/references/best-practices.md +175 -0
- package/skills/qa-selenium-py-writer/references/config.md +224 -0
- package/skills/qa-selenium-py-writer/references/patterns.md +255 -0
- package/skills/qa-shortcut-integration/SKILL.md +143 -0
- package/skills/qa-shortcut-integration/references/api-patterns.md +126 -0
- package/skills/qa-shortcut-integration/references/field-mapping.md +66 -0
- package/skills/qa-spec-auditor/SKILL.md +162 -0
- package/skills/qa-spec-auditor/references/audit-checklist.md +144 -0
- package/skills/qa-spec-auditor/references/drift-patterns.md +207 -0
- package/skills/qa-spec-writer/SKILL.md +143 -0
- package/skills/qa-spec-writer/references/gherkin-guide.md +253 -0
- package/skills/qa-spec-writer/references/specification-patterns.md +274 -0
- package/skills/qa-spring-test-writer/SKILL.md +170 -0
- package/skills/qa-spring-test-writer/references/best-practices.md +57 -0
- package/skills/qa-spring-test-writer/references/config.md +179 -0
- package/skills/qa-spring-test-writer/references/patterns.md +235 -0
- package/skills/qa-supertest-writer/SKILL.md +150 -0
- package/skills/qa-supertest-writer/references/assertions.md +192 -0
- package/skills/qa-supertest-writer/references/best-practices.md +102 -0
- package/skills/qa-supertest-writer/references/config.md +166 -0
- package/skills/qa-supertest-writer/references/patterns.md +242 -0
- package/skills/qa-task-creator/SKILL.md +142 -0
- package/skills/qa-task-creator/references/linking-patterns.md +127 -0
- package/skills/qa-task-creator/references/task-types.md +169 -0
- package/skills/qa-task-creator/templates/task-template.md +24 -0
- package/skills/qa-test-doc-compiler/SKILL.md +114 -0
- package/skills/qa-test-doc-compiler/references/agile-tailoring.md +220 -0
- package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +302 -0
- package/skills/qa-test-healer/SKILL.md +101 -0
- package/skills/qa-test-healer/references/diagnosis-patterns.md +142 -0
- package/skills/qa-test-healer/references/fix-strategies.md +177 -0
- package/skills/qa-test-reporter/SKILL.md +130 -0
- package/skills/qa-test-reporter/references/best-practices.md +162 -0
- package/skills/qa-test-reporter/references/iso-29119-reports.md +236 -0
- package/skills/qa-test-reporter/references/report-formats.md +287 -0
- package/skills/qa-test-reviewer/SKILL.md +142 -0
- package/skills/qa-test-reviewer/references/anti-patterns.md +268 -0
- package/skills/qa-test-reviewer/references/review-checklist.md +93 -0
- package/skills/qa-test-strategy/SKILL.md +133 -0
- package/skills/qa-test-strategy/references/entry-exit-criteria.md +176 -0
- package/skills/qa-test-strategy/references/risk-matrix.md +102 -0
- package/skills/qa-test-strategy/references/testing-types.md +143 -0
- package/skills/qa-testcase-from-docs/SKILL.md +161 -0
- package/skills/qa-testcase-from-docs/references/test-case-format.md +196 -0
- package/skills/qa-testcase-from-docs/references/test-design-techniques.md +126 -0
- package/skills/qa-testcase-from-docs/templates/test-case-template.md +31 -0
- package/skills/qa-testcase-from-ui/SKILL.md +109 -0
- package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +126 -0
- package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +146 -0
- package/skills/qa-testcase-from-ui/templates/test-case-template.md +31 -0
- package/skills/qa-visual-regression-writer/SKILL.md +175 -0
- package/skills/qa-visual-regression-writer/references/best-practices.md +154 -0
- package/skills/qa-visual-regression-writer/references/config.md +220 -0
- package/skills/qa-visual-regression-writer/references/patterns.md +213 -0
- package/skills/qa-vitest-writer/SKILL.md +141 -0
- package/skills/qa-vitest-writer/references/assertions.md +105 -0
- package/skills/qa-vitest-writer/references/best-practices.md +62 -0
- package/skills/qa-vitest-writer/references/config.md +127 -0
- package/skills/qa-vitest-writer/references/patterns.md +141 -0
- package/skills/qa-webdriverio-writer/SKILL.md +145 -0
- package/skills/qa-webdriverio-writer/references/best-practices.md +176 -0
- package/skills/qa-webdriverio-writer/references/config.md +240 -0
- package/skills/qa-webdriverio-writer/references/patterns.md +269 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Test Reporting Best Practices
|
|
2
|
+
|
|
3
|
+
*Guidance for meaningful metrics, trend analysis, and stakeholder communication.*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Meaningful Metrics
|
|
8
|
+
|
|
9
|
+
### Primary Metrics
|
|
10
|
+
|
|
11
|
+
| Metric | Use | Avoid |
|
|
12
|
+
| ------ | --- | ----- |
|
|
13
|
+
| **Pass rate** | % passed / total executed | Excluding skipped inflates rate; document skip reasons |
|
|
14
|
+
| **Failure count** | Absolute and trend | Ignoring flaky tests masks real regressions |
|
|
15
|
+
| **Duration** | Trend over time; SLA compliance | Single-run duration without context |
|
|
16
|
+
| **Coverage** | Risk areas; uncovered code | Coverage as sole quality gate |
|
|
17
|
+
|
|
18
|
+
### Secondary Metrics
|
|
19
|
+
|
|
20
|
+
- **Flaky rate** — Tests that pass/fail inconsistently; prioritize stabilization
|
|
21
|
+
- **Failure density** — Failures per module/suite; identify hotspots
|
|
22
|
+
- **Blocked count** — Tests blocked by environment or defects
|
|
23
|
+
- **Defect escape rate** — Production defects / total defects found (post-release)
|
|
24
|
+
|
|
25
|
+
### Anti-Patterns
|
|
26
|
+
|
|
27
|
+
1. **Vanity metrics** — High pass rate with many skipped tests
|
|
28
|
+
2. **Single-number focus** — Pass rate alone without failure analysis
|
|
29
|
+
3. **Ignoring trends** — One bad run vs. sustained regression
|
|
30
|
+
4. **Coverage as proxy for quality** — 100% coverage with weak assertions
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Trend Analysis
|
|
35
|
+
|
|
36
|
+
### What to Track
|
|
37
|
+
|
|
38
|
+
| Data Point | Purpose |
|
|
39
|
+
| ---------- | ------- |
|
|
40
|
+
| Pass rate over last N runs | Detect regression |
|
|
41
|
+
| Failure count trend | New vs. recurring failures |
|
|
42
|
+
| Duration trend | Performance degradation |
|
|
43
|
+
| Flaky test list | Prioritize stabilization |
|
|
44
|
+
| Coverage trend | Coverage growth or regression |
|
|
45
|
+
|
|
46
|
+
### Storage (Memory MCP)
|
|
47
|
+
|
|
48
|
+
Store per run:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"runId": "build-123",
|
|
53
|
+
"timestamp": "2025-03-07T10:00:00Z",
|
|
54
|
+
"total": 100,
|
|
55
|
+
"passed": 92,
|
|
56
|
+
"failed": 5,
|
|
57
|
+
"skipped": 3,
|
|
58
|
+
"duration": 120000,
|
|
59
|
+
"passRate": 92
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Query for:
|
|
64
|
+
|
|
65
|
+
- Last 7 days
|
|
66
|
+
- Last 10 builds
|
|
67
|
+
- Same branch/commit family
|
|
68
|
+
|
|
69
|
+
### Reporting Trends
|
|
70
|
+
|
|
71
|
+
- **Improving** — Pass rate up, failures down
|
|
72
|
+
- **Stable** — No significant change
|
|
73
|
+
- **Regressing** — Pass rate down, failures up; flag for investigation
|
|
74
|
+
- **New baseline** — First run or major scope change; avoid over-interpretation
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Stakeholder Communication
|
|
79
|
+
|
|
80
|
+
### Audience Tiers
|
|
81
|
+
|
|
82
|
+
| Audience | Focus | Detail Level |
|
|
83
|
+
| -------- | ----- | ------------- |
|
|
84
|
+
| **Executive** | Go/no-go, risk, timeline | 1-page summary |
|
|
85
|
+
| **Project manager** | Progress, blockers, next steps | Status report |
|
|
86
|
+
| **Developers** | Failures, flaky tests, top issues | Failure analysis, links to failures |
|
|
87
|
+
| **QA** | Full metrics, trends, coverage | Full dashboard |
|
|
88
|
+
|
|
89
|
+
### Report Cadence
|
|
90
|
+
|
|
91
|
+
- **Daily/Sprint** — Status report (progress, blockers)
|
|
92
|
+
- **Release** — Completion report (go/no-go, recommendations)
|
|
93
|
+
- **Ad-hoc** — HTML dashboard, Markdown summary for PRs
|
|
94
|
+
|
|
95
|
+
### Clarity Principles
|
|
96
|
+
|
|
97
|
+
1. **Lead with the answer** — Go/no-go and key metrics first
|
|
98
|
+
2. **Use plain language** — Avoid jargon for non-technical readers
|
|
99
|
+
3. **Provide context** — "Pass rate 92%, up from 88% last week"
|
|
100
|
+
4. **Actionable** — "5 flaky tests in checkout flow — stabilize before release"
|
|
101
|
+
5. **Traceability** — Link failures to test IDs, defects, requirements
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Failure Analysis
|
|
106
|
+
|
|
107
|
+
### Top Failures
|
|
108
|
+
|
|
109
|
+
Rank failures by:
|
|
110
|
+
|
|
111
|
+
1. **Frequency** — Same test failing across runs
|
|
112
|
+
2. **Impact** — Critical path, high-priority area
|
|
113
|
+
3. **Recency** — New failures vs. long-standing
|
|
114
|
+
|
|
115
|
+
### Flaky Detection
|
|
116
|
+
|
|
117
|
+
- Same test: pass and fail across runs without code change
|
|
118
|
+
- Require minimum runs (e.g., 5+) before flagging
|
|
119
|
+
- Report: "Flaky (3/10 runs failed)"
|
|
120
|
+
|
|
121
|
+
### Failure Grouping
|
|
122
|
+
|
|
123
|
+
Group by:
|
|
124
|
+
|
|
125
|
+
- **Module/suite** — Identify weak areas
|
|
126
|
+
- **Error type** — Timeout, assertion, environment
|
|
127
|
+
- **Root cause** — When known, tag for reporting
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Risk Areas
|
|
132
|
+
|
|
133
|
+
Flag when:
|
|
134
|
+
|
|
135
|
+
- **Low coverage** — Module/suite below threshold (e.g., < 70%)
|
|
136
|
+
- **High failure density** — Many failures in one area
|
|
137
|
+
- **Blocked tests** — Cannot execute; blocks exit criteria
|
|
138
|
+
- **Open Critical/High** — Unresolved defects in scope
|
|
139
|
+
- **Duration spike** — Significant slowdown vs. baseline
|
|
140
|
+
|
|
141
|
+
Present in report: "Risk areas: Checkout module (65% coverage, 3 open High defects)"
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## ISO 29119-3 Alignment
|
|
146
|
+
|
|
147
|
+
- Use **Test Status Report** for periodic updates; **Test Completion Report** for release
|
|
148
|
+
- Include all mandatory sections per `references/iso-29119-reports.md`
|
|
149
|
+
- Tailor for Agile: shorter cycles, lighter documentation, focus on working software
|
|
150
|
+
- Traceability: link tests to requirements, defects to test cases
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Tool Integration
|
|
155
|
+
|
|
156
|
+
| Tool | Best Practice |
|
|
157
|
+
| ---- | ------------- |
|
|
158
|
+
| **CI/CD** | Publish reports as artifacts; parse in post-job step |
|
|
159
|
+
| **GitHub Actions** | Use `actions/upload-artifact` for JUnit/JSON; fetch via GitHub MCP |
|
|
160
|
+
| **Allure** | Rich metadata; use labels for suite, priority, epic |
|
|
161
|
+
| **Coverage** | Merge with test results; include in same report |
|
|
162
|
+
| **Memory MCP** | Store trends; query before generating report |
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# ISO 29119-3 Test Status and Completion Report Templates
|
|
2
|
+
|
|
3
|
+
*Per ISO/IEC/IEEE 29119-3:2021 — Software and systems engineering — Software testing — Part 3: Test documentation*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Test Status Report
|
|
8
|
+
|
|
9
|
+
**Purpose:** Periodic progress report during test execution. Use for sprint reviews, standups, or milestone checkpoints.
|
|
10
|
+
|
|
11
|
+
### Template
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
# Test Status Report
|
|
15
|
+
|
|
16
|
+
**Identifier:** TSR-{YYYYMMDD}-{sequence}
|
|
17
|
+
**Reporting Period:** {start date} to {end date}
|
|
18
|
+
**Report Date:** {date}
|
|
19
|
+
**Project/Release:** {name}
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 1. Summary
|
|
24
|
+
|
|
25
|
+
{Brief executive summary: overall progress, key achievements, blockers.}
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 2. Test Execution Summary
|
|
30
|
+
|
|
31
|
+
| Metric | Planned | Executed | Passed | Failed | Blocked | Skipped | Pass Rate |
|
|
32
|
+
| ------ | ------- | -------- | ------ | ------ | ------- | ------- | --------- |
|
|
33
|
+
| Total | {n} | {n} | {n} | {n} | {n} | {n} | {pct}% |
|
|
34
|
+
|
|
35
|
+
*Breakdown by level/type if applicable:*
|
|
36
|
+
|
|
37
|
+
| Category | Passed | Failed | Skipped | Pass Rate |
|
|
38
|
+
| ------------ | ------ | ------ | ------- | --------- |
|
|
39
|
+
| Unit | {n} | {n} | {n} | {pct}% |
|
|
40
|
+
| Integration | {n} | {n} | {n} | {pct}% |
|
|
41
|
+
| E2E / System | {n} | {n} | {n} | {pct}% |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 3. Incidents
|
|
46
|
+
|
|
47
|
+
| Status | Count | Notes |
|
|
48
|
+
| ------ | ----- | ----- |
|
|
49
|
+
| Open | {n} | {High/Critical: n} |
|
|
50
|
+
| Closed | {n} | — |
|
|
51
|
+
| Deferred | {n} | — |
|
|
52
|
+
|
|
53
|
+
*Top open incidents (ID, summary, severity):*
|
|
54
|
+
|
|
55
|
+
- TIR-001: {summary} — {severity}
|
|
56
|
+
- TIR-002: {summary} — {severity}
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 4. Risks and Issues
|
|
61
|
+
|
|
62
|
+
- {Risk/blocker 1}
|
|
63
|
+
- {Risk/blocker 2}
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 5. Next Period Plan
|
|
68
|
+
|
|
69
|
+
- {Planned activity 1}
|
|
70
|
+
- {Planned activity 2}
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 6. Metrics (Optional)
|
|
75
|
+
|
|
76
|
+
- **Coverage:** {line}% lines, {branch}% branches
|
|
77
|
+
- **Progress:** {pct}% of planned tests executed
|
|
78
|
+
- **Trend:** Pass rate vs. previous period: {up/down/stable}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Mandatory Sections (ISO 29119-3)
|
|
82
|
+
|
|
83
|
+
| Section | Mandatory | Description |
|
|
84
|
+
| ------- | --------- | ----------- |
|
|
85
|
+
| Identifier | ✓ | Unique report ID |
|
|
86
|
+
| Reporting period | ✓ | Date range covered |
|
|
87
|
+
| Summary | ✓ | Executive summary |
|
|
88
|
+
| Test execution summary | ✓ | Pass/fail/blocked counts |
|
|
89
|
+
| Incidents | ✓ | Open/closed incident summary |
|
|
90
|
+
| Risks and issues | | Blockers, risks |
|
|
91
|
+
| Next period plan | | Planned activities |
|
|
92
|
+
| Metrics | | Coverage, progress % |
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Test Completion Report
|
|
97
|
+
|
|
98
|
+
**Purpose:** Final report when testing is complete. Summarizes outcomes, exit criteria, and release readiness.
|
|
99
|
+
|
|
100
|
+
### Template
|
|
101
|
+
|
|
102
|
+
```markdown
|
|
103
|
+
# Test Completion Report
|
|
104
|
+
|
|
105
|
+
**Identifier:** TCR-{YYYYMMDD}-{sequence}
|
|
106
|
+
**Report Date:** {date}
|
|
107
|
+
**Project/Release:** {name}
|
|
108
|
+
**Testing Period:** {start date} to {end date}
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 1. Summary
|
|
113
|
+
|
|
114
|
+
{Executive summary: testing complete, overall outcome, go/no-go recommendation.}
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 2. Test Execution Summary
|
|
119
|
+
|
|
120
|
+
| Metric | Total | Passed | Failed | Blocked | Skipped | Pass Rate |
|
|
121
|
+
| ------ | ----- | ------ | ------ | ------- | ------- | --------- |
|
|
122
|
+
| Count | {n} | {n} | {n} | {n} | {n} | {pct}% |
|
|
123
|
+
|
|
124
|
+
**Duration:** {total hours} hours
|
|
125
|
+
|
|
126
|
+
*By category:*
|
|
127
|
+
|
|
128
|
+
| Category | Passed | Failed | Skipped | Pass Rate |
|
|
129
|
+
| ------------ | ------ | ------ | ------- | --------- |
|
|
130
|
+
| Unit | {n} | {n} | {n} | {pct}% |
|
|
131
|
+
| Integration | {n} | {n} | {n} | {pct}% |
|
|
132
|
+
| E2E / System | {n} | {n} | {n} | {pct}% |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 3. Exit Criteria
|
|
137
|
+
|
|
138
|
+
| Criterion | Target | Actual | Met? |
|
|
139
|
+
| --------- | ------ | ------ | ---- |
|
|
140
|
+
| Pass rate ≥ X% | {target}% | {actual}% | Yes/No |
|
|
141
|
+
| No Critical/High open | 0 | {n} | Yes/No |
|
|
142
|
+
| Coverage ≥ Y% | {target}% | {actual}% | Yes/No |
|
|
143
|
+
| {Custom criterion} | — | — | Yes/No |
|
|
144
|
+
|
|
145
|
+
**Overall:** {All criteria met / Criteria not met}
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 4. Incidents Summary
|
|
150
|
+
|
|
151
|
+
| Status | Count |
|
|
152
|
+
| ------ | ----- |
|
|
153
|
+
| Open | {n} |
|
|
154
|
+
| Closed | {n} |
|
|
155
|
+
| Deferred | {n} |
|
|
156
|
+
|
|
157
|
+
*Open defects by severity:*
|
|
158
|
+
|
|
159
|
+
- Critical: {n}
|
|
160
|
+
- High: {n}
|
|
161
|
+
- Medium: {n}
|
|
162
|
+
- Low: {n}
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 5. Recommendations
|
|
167
|
+
|
|
168
|
+
**Release Readiness:** {Go / No-Go / Conditional}
|
|
169
|
+
|
|
170
|
+
**Rationale:**
|
|
171
|
+
- {Point 1}
|
|
172
|
+
- {Point 2}
|
|
173
|
+
|
|
174
|
+
**Follow-up:**
|
|
175
|
+
- {Action 1}
|
|
176
|
+
- {Action 2}
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 6. Lessons Learned (Optional)
|
|
181
|
+
|
|
182
|
+
- {Improvement 1}
|
|
183
|
+
- {Improvement 2}
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 7. Metrics (Optional)
|
|
188
|
+
|
|
189
|
+
- **Coverage:** {line}% lines, {branch}% branches
|
|
190
|
+
- **Defect density:** {defects per KLOC or per test}
|
|
191
|
+
- **Flaky tests:** {count} identified
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Mandatory Sections (ISO 29119-3)
|
|
195
|
+
|
|
196
|
+
| Section | Mandatory | Description |
|
|
197
|
+
| ------- | --------- | ----------- |
|
|
198
|
+
| Identifier | ✓ | Unique report ID |
|
|
199
|
+
| Summary | ✓ | Executive summary |
|
|
200
|
+
| Test execution summary | ✓ | Final pass/fail/blocked counts |
|
|
201
|
+
| Exit criteria met | ✓ | Whether criteria were satisfied |
|
|
202
|
+
| Incidents summary | ✓ | Open, closed, deferred |
|
|
203
|
+
| Recommendations | ✓ | Release readiness, follow-up |
|
|
204
|
+
| Lessons learned | | Process improvements |
|
|
205
|
+
| Metrics | | Coverage, defect density |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Go/No-Go Recommendation Format
|
|
210
|
+
|
|
211
|
+
Use in both Status and Completion reports, and in executive summaries:
|
|
212
|
+
|
|
213
|
+
```markdown
|
|
214
|
+
## Go/No-Go Recommendation
|
|
215
|
+
|
|
216
|
+
**Recommendation:** {Go | No-Go | Conditional}
|
|
217
|
+
|
|
218
|
+
**Summary:**
|
|
219
|
+
- Pass rate: {pct}%
|
|
220
|
+
- Open Critical/High: {n}
|
|
221
|
+
- Exit criteria: {met / not met}
|
|
222
|
+
- Risk areas: {list}
|
|
223
|
+
|
|
224
|
+
**Rationale:** {2-3 sentence justification}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Decision Matrix (Example)
|
|
228
|
+
|
|
229
|
+
| Condition | Go | Conditional | No-Go |
|
|
230
|
+
| --------- | --- | ----------- | ----- |
|
|
231
|
+
| Pass rate | ≥ 95% | 90–95% | < 90% |
|
|
232
|
+
| Critical open | 0 | 0 | > 0 |
|
|
233
|
+
| High open | 0 | 1–2 (documented) | > 2 |
|
|
234
|
+
| Exit criteria | All met | Most met, minor gaps | Not met |
|
|
235
|
+
|
|
236
|
+
*Tailor thresholds per project.*
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
# Report Format Reference
|
|
2
|
+
|
|
3
|
+
*Reference for parsing test results from common frameworks and CI systems.*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## JUnit XML
|
|
8
|
+
|
|
9
|
+
Widely supported by Jest, pytest, Maven, Gradle, PHPUnit, and most CI runners.
|
|
10
|
+
|
|
11
|
+
### Schema Overview
|
|
12
|
+
|
|
13
|
+
```xml
|
|
14
|
+
<testsuites>
|
|
15
|
+
<testsuite name="Suite Name" tests="10" failures="1" skipped="2" errors="0" time="5.23">
|
|
16
|
+
<testcase name="test_name" classname="module.Class" time="0.5">
|
|
17
|
+
<!-- Pass: no child elements -->
|
|
18
|
+
</testcase>
|
|
19
|
+
<testcase name="failing_test" classname="module.Class" time="0.1">
|
|
20
|
+
<failure message="AssertionError">Stack trace...</failure>
|
|
21
|
+
</testcase>
|
|
22
|
+
<testcase name="skipped_test" classname="module.Class">
|
|
23
|
+
<skipped message="Not implemented"/>
|
|
24
|
+
</testcase>
|
|
25
|
+
<testcase name="error_test" classname="module.Class">
|
|
26
|
+
<error message="RuntimeError">Error details...</error>
|
|
27
|
+
</testcase>
|
|
28
|
+
</testsuite>
|
|
29
|
+
</testsuites>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Key Attributes
|
|
33
|
+
|
|
34
|
+
| Element | Attribute | Description |
|
|
35
|
+
| ------- | --------- | ----------- |
|
|
36
|
+
| `testsuites` | — | Root; may have `name`, `tests`, `failures`, `errors`, `time` |
|
|
37
|
+
| `testsuite` | `name` | Suite/module name |
|
|
38
|
+
| `testsuite` | `tests` | Total test count |
|
|
39
|
+
| `testsuite` | `failures` | Failed count |
|
|
40
|
+
| `testsuite` | `skipped` | Skipped count |
|
|
41
|
+
| `testsuite` | `errors` | Error count (uncaught exceptions) |
|
|
42
|
+
| `testsuite` | `time` | Total duration (seconds) |
|
|
43
|
+
| `testcase` | `name` | Test name |
|
|
44
|
+
| `testcase` | `classname` | Class/module (often `file.Class` or `path`) |
|
|
45
|
+
| `testcase` | `time` | Duration (seconds) |
|
|
46
|
+
| `failure` / `error` | `message` | Short error message |
|
|
47
|
+
| `failure` / `error` | (text) | Full stack trace |
|
|
48
|
+
| `skipped` | `message` | Skip reason |
|
|
49
|
+
|
|
50
|
+
### Framework Variations
|
|
51
|
+
|
|
52
|
+
| Framework | Notes |
|
|
53
|
+
| --------- | ----- |
|
|
54
|
+
| **Jest** | `testsuites` → `testsuite` per file; `classname` = file path |
|
|
55
|
+
| **pytest** | `classname` = `ClassName` or module; `file` attribute sometimes present |
|
|
56
|
+
| **Vitest** | JUnit-compatible; similar to Jest |
|
|
57
|
+
| **Playwright** | JUnit reporter outputs per project/shard |
|
|
58
|
+
| **Maven/Gradle** | Standard JUnit 4/5 schema |
|
|
59
|
+
|
|
60
|
+
### Parsing Rules
|
|
61
|
+
|
|
62
|
+
1. Treat `failure` and `error` as **failed**.
|
|
63
|
+
2. `skipped` = **skipped**; absence of failure/error/skipped = **passed**.
|
|
64
|
+
3. Use `classname` + `name` for unique ID; `classname` often maps to suite/module.
|
|
65
|
+
4. Aggregate `testsuite`-level counts if `testcase` children are present; prefer sum of children for accuracy.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## JSON Reports
|
|
70
|
+
|
|
71
|
+
Format varies by framework. Common patterns:
|
|
72
|
+
|
|
73
|
+
### Vitest JSON
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"result": {
|
|
78
|
+
"startTime": 1234567890,
|
|
79
|
+
"totalDuration": 5000,
|
|
80
|
+
"numTotalTestSuites": 5,
|
|
81
|
+
"numTotalTests": 50,
|
|
82
|
+
"numPassedTests": 45,
|
|
83
|
+
"numFailedTests": 3,
|
|
84
|
+
"numSkippedTests": 2,
|
|
85
|
+
"testResults": [
|
|
86
|
+
{
|
|
87
|
+
"name": "suite.spec.ts",
|
|
88
|
+
"assertionResults": [
|
|
89
|
+
{
|
|
90
|
+
"ancestorTitles": ["Suite"],
|
|
91
|
+
"title": "test name",
|
|
92
|
+
"status": "passed",
|
|
93
|
+
"duration": 100
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Playwright JSON
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"config": { "projects": [...] },
|
|
107
|
+
"suites": [
|
|
108
|
+
{
|
|
109
|
+
"title": "Suite",
|
|
110
|
+
"specs": [
|
|
111
|
+
{
|
|
112
|
+
"title": "test name",
|
|
113
|
+
"tests": [
|
|
114
|
+
{
|
|
115
|
+
"results": [
|
|
116
|
+
{
|
|
117
|
+
"status": "passed",
|
|
118
|
+
"duration": 100
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Generic Aggregated JSON (Suggested)
|
|
131
|
+
|
|
132
|
+
When generating or normalizing:
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"summary": {
|
|
137
|
+
"total": 50,
|
|
138
|
+
"passed": 45,
|
|
139
|
+
"failed": 3,
|
|
140
|
+
"skipped": 2,
|
|
141
|
+
"duration": 5000
|
|
142
|
+
},
|
|
143
|
+
"suites": [
|
|
144
|
+
{
|
|
145
|
+
"name": "Suite",
|
|
146
|
+
"tests": [
|
|
147
|
+
{
|
|
148
|
+
"name": "test name",
|
|
149
|
+
"result": "passed",
|
|
150
|
+
"duration": 100,
|
|
151
|
+
"failureMessage": null
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Allure Results
|
|
162
|
+
|
|
163
|
+
Allure uses a directory of JSON files.
|
|
164
|
+
|
|
165
|
+
### result.json (per test)
|
|
166
|
+
|
|
167
|
+
```json
|
|
168
|
+
{
|
|
169
|
+
"uuid": "abc-123",
|
|
170
|
+
"name": "Test name",
|
|
171
|
+
"fullName": "Suite.Test name",
|
|
172
|
+
"status": "passed",
|
|
173
|
+
"stage": "finished",
|
|
174
|
+
"start": 1234567890000,
|
|
175
|
+
"stop": 1234567890100,
|
|
176
|
+
"labels": [
|
|
177
|
+
{ "name": "suite", "value": "Suite" },
|
|
178
|
+
{ "name": "priority", "value": "critical" }
|
|
179
|
+
],
|
|
180
|
+
"steps": [...],
|
|
181
|
+
"attachments": [...]
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Status values:** `passed`, `failed`, `broken`, `skipped`, `unknown`
|
|
186
|
+
|
|
187
|
+
### container.json (per suite/container)
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"uuid": "container-uuid",
|
|
192
|
+
"children": ["test-uuid-1", "test-uuid-2"],
|
|
193
|
+
"befores": [...],
|
|
194
|
+
"afters": [...]
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Parsing Rules
|
|
199
|
+
|
|
200
|
+
1. Read all `*-result.json` and `*-container.json` in the results directory.
|
|
201
|
+
2. Build hierarchy from `container.json` → `children` → `result.json`.
|
|
202
|
+
3. Map `status`: `passed`→pass, `failed`/`broken`→fail, `skipped`→skip.
|
|
203
|
+
4. Use `labels` for suite, priority, epic, feature when present.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Coverage JSON
|
|
208
|
+
|
|
209
|
+
### Istanbul / c8 (Node.js)
|
|
210
|
+
|
|
211
|
+
```json
|
|
212
|
+
{
|
|
213
|
+
"total": {
|
|
214
|
+
"lines": { "total": 100, "covered": 80, "pct": 80 },
|
|
215
|
+
"statements": { "total": 120, "covered": 95, "pct": 79.17 },
|
|
216
|
+
"functions": { "total": 20, "covered": 18, "pct": 90 },
|
|
217
|
+
"branches": { "total": 40, "covered": 30, "pct": 75 }
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### pytest-cov JSON
|
|
223
|
+
|
|
224
|
+
```json
|
|
225
|
+
{
|
|
226
|
+
"totals": {
|
|
227
|
+
"num_statements": 100,
|
|
228
|
+
"covered_lines": 80,
|
|
229
|
+
"percent_covered": 80.0,
|
|
230
|
+
"missing_lines": 20
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### JaCoCo XML (common in Java)
|
|
236
|
+
|
|
237
|
+
```xml
|
|
238
|
+
<report>
|
|
239
|
+
<counter type="LINE" missed="20" covered="80"/>
|
|
240
|
+
<counter type="BRANCH" missed="10" covered="30"/>
|
|
241
|
+
</report>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Parsing Rules
|
|
245
|
+
|
|
246
|
+
1. Normalize to: `lines`, `branches`, `functions` (or `statements`) with `covered` and `total` or `pct`.
|
|
247
|
+
2. If only one metric (e.g., `lines`), use that for coverage summary.
|
|
248
|
+
3. Flag files or packages below threshold (e.g., < 70%) as risk areas.
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## CI/CD Output
|
|
253
|
+
|
|
254
|
+
### GitHub Actions
|
|
255
|
+
|
|
256
|
+
- **Workflow runs:** `GET /repos/{owner}/{repo}/actions/runs`
|
|
257
|
+
- **Job logs:** `GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs`
|
|
258
|
+
- **Artifacts:** `GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts`
|
|
259
|
+
|
|
260
|
+
Artifacts often contain JUnit XML or JSON. Download artifact ZIP, extract, then parse.
|
|
261
|
+
|
|
262
|
+
### GitLab CI
|
|
263
|
+
|
|
264
|
+
- JUnit report artifact path configurable (e.g., `junit: report.xml`)
|
|
265
|
+
- Coverage from `coverage` keyword or regex in job log
|
|
266
|
+
|
|
267
|
+
### Jenkins
|
|
268
|
+
|
|
269
|
+
- JUnit plugin publishes from `**/target/surefire-reports/*.xml` or similar
|
|
270
|
+
- Coverage from JaCoCo, Cobertura plugins
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Normalized Internal Model
|
|
275
|
+
|
|
276
|
+
Use a common structure for aggregation:
|
|
277
|
+
|
|
278
|
+
| Field | Type | Source |
|
|
279
|
+
| ----- | ---- | ------ |
|
|
280
|
+
| `id` | string | `classname` + `name` or `fullName` |
|
|
281
|
+
| `name` | string | Test name |
|
|
282
|
+
| `suite` | string | Suite/module/class |
|
|
283
|
+
| `result` | enum | `passed`, `failed`, `skipped`, `blocked` |
|
|
284
|
+
| `duration` | number | ms or seconds (normalize to ms) |
|
|
285
|
+
| `failureMessage` | string? | From `failure`/`error` message |
|
|
286
|
+
| `stackTrace` | string? | Full trace if available |
|
|
287
|
+
| `labels` | object? | `priority`, `type`, `epic`, etc. |
|