Reporting
Table of Contents
- Why the report is tool-neutral
- How: what the report needs
- How: pulling each NFR row from the summary JSON
- How:
handleSummary - How: the web dashboard export as the attachment
- Tips
Why the report is tool-neutral
A stakeholder reading a performance test report doesn't care whether it ran in k6 or JMeter — they care whether the system met its NFRs, and if not, where it broke. docs/jmeter/10-reporting.md already covers that report structure in full (summary, test scope, load model, NFR table, per-transaction breakdown, observations, recommendation) — this page doesn't repeat it, it's the k6-specific plumbing for filling that same structure in: where each number in the NFR table comes from, and what to attach.
How: what the report needs
Same sections as the JMeter page, filled from a k6 run instead of a .jtl:
| Report section | k6 source |
|---|---|
| Load model | The PROFILE/EXECUTOR/USERS/RATE the run was invoked with — see Load Model |
| Environment | BASE_URL, and anything about the target worth noting (infra size, for a scalability comparison) |
| NFR vs. actual | handleSummary's JSON, one jq query per NFR row (below) |
| Per-endpoint p95/avg/error rate | The --out json/csv event stream filtered by name, not the summary — see Execute and Analyze |
| Observations | Anything that needed the raw data to see — the smoke-vs-load p95 gap, the Insufficient VUs warning, a threshold that passed but was close |
| Recommendation | Same judgment call as the JMeter page — pass with headroom noted, or fail with the specific metric and load level |