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,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-jira-integration
|
|
3
|
+
description: Jira integration for creating issues, managing epics/sprints, syncing with Xray/Zephyr test management, and tracking QA workflows via REST API or Atlassian MCP.
|
|
4
|
+
dependencies:
|
|
5
|
+
recommended:
|
|
6
|
+
- qa-bug-ticket-creator
|
|
7
|
+
- qa-task-creator
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# QA Jira Integration
|
|
11
|
+
|
|
12
|
+
## Purpose
|
|
13
|
+
|
|
14
|
+
Integrate QA workflow with Jira for issue tracking and project management. Create and update issues, manage epics and sprints, link issues to requirements and test cases, and sync with Xray/Zephyr for test management. Use Jira REST API or Atlassian MCP when available.
|
|
15
|
+
|
|
16
|
+
## Features
|
|
17
|
+
|
|
18
|
+
| Feature | Description |
|
|
19
|
+
| ------- | ----------- |
|
|
20
|
+
| **Create/update issues** | Bug, Story, Task, Sub-task with full field mapping |
|
|
21
|
+
| **Manage epics and sprints** | Create epics, add issues to sprints, manage backlog |
|
|
22
|
+
| **Link issues** | Link to requirements, test cases, parent issues |
|
|
23
|
+
| **Xray/Zephyr integration** | Sync test cases, test executions, traceability |
|
|
24
|
+
| **JQL queries** | Search and report on issues by project, status, assignee |
|
|
25
|
+
| **Transition management** | Move issues through workflow states (To Do → In Progress → Done) |
|
|
26
|
+
|
|
27
|
+
## Authentication
|
|
28
|
+
|
|
29
|
+
| Variable | Description |
|
|
30
|
+
| -------- | ----------- |
|
|
31
|
+
| `JIRA_BASE_URL` | Jira instance URL (e.g., `https://your-domain.atlassian.net`) |
|
|
32
|
+
| `JIRA_API_TOKEN` | API token from [Atlassian account settings](https://id.atlassian.com/manage-profile/security/api-tokens) |
|
|
33
|
+
| `JIRA_EMAIL` | Email for the Atlassian account (used with API token) |
|
|
34
|
+
|
|
35
|
+
**Basic Auth:** `Authorization: Basic base64(email:api_token)`
|
|
36
|
+
|
|
37
|
+
See `references/api-patterns.md` for request examples.
|
|
38
|
+
|
|
39
|
+
## Key API Patterns
|
|
40
|
+
|
|
41
|
+
| Operation | Method | Endpoint |
|
|
42
|
+
| --------- | ------ | -------- |
|
|
43
|
+
| Create issue | POST | `/rest/api/3/issue` |
|
|
44
|
+
| Search (JQL) | GET | `/rest/api/3/search?jql=...` |
|
|
45
|
+
| Get issue | GET | `/rest/api/3/issue/{key}` |
|
|
46
|
+
| Update issue | PUT | `/rest/api/3/issue/{key}` |
|
|
47
|
+
| Transition | POST | `/rest/api/3/issue/{key}/transitions` |
|
|
48
|
+
| Link issues | POST | `/rest/api/3/issueLink` |
|
|
49
|
+
| Add comment | POST | `/rest/api/3/issue/{key}/comment` |
|
|
50
|
+
| Add attachment | POST | `/rest/api/3/issue/{key}/attachments` |
|
|
51
|
+
|
|
52
|
+
## Integration with qa-bug-ticket-creator
|
|
53
|
+
|
|
54
|
+
When qa-bug-ticket-creator produces a bug report:
|
|
55
|
+
|
|
56
|
+
1. **Map fields** — Use `references/field-mapping.md` to map bug report fields to Jira issue fields
|
|
57
|
+
2. **Create Jira Bug** — POST to `/rest/api/3/issue` with `issuetype: { name: "Bug" }`
|
|
58
|
+
3. **Link to test** — If test case key exists, create issue link (e.g., "tests" or "blocks")
|
|
59
|
+
4. **Optional** — Invoke qa-task-creator for linked fix task; create as Jira Task/Sub-task under same project
|
|
60
|
+
|
|
61
|
+
## Integration with qa-task-creator
|
|
62
|
+
|
|
63
|
+
When qa-task-creator produces a task:
|
|
64
|
+
|
|
65
|
+
1. **Map fields** — Map task type to Jira issuetype (Story, Task, Sub-task)
|
|
66
|
+
2. **Create Jira issue** — POST with appropriate project key and issuetype
|
|
67
|
+
3. **Link to parent** — If task references a bug, use `parent` for Sub-task or issue link for Task
|
|
68
|
+
4. **Sprint assignment** — Add to sprint via `fields.customfield_XXXX` (sprint field ID varies by instance)
|
|
69
|
+
|
|
70
|
+
## Trigger Phrases
|
|
71
|
+
|
|
72
|
+
- "Create Jira issue from [bug report / task]"
|
|
73
|
+
- "File bug in Jira for [test failure]"
|
|
74
|
+
- "Add issue to sprint [name]"
|
|
75
|
+
- "Search Jira for [JQL]"
|
|
76
|
+
- "Transition [PROJ-123] to In Progress"
|
|
77
|
+
- "Link [PROJ-123] to test case [PROJ-456]"
|
|
78
|
+
- "Sync test results to Xray"
|
|
79
|
+
|
|
80
|
+
## Workflow
|
|
81
|
+
|
|
82
|
+
1. **Auth** — Load `JIRA_BASE_URL`, `JIRA_EMAIL`, `JIRA_API_TOKEN` from `.env`
|
|
83
|
+
2. **Map** — Use `references/field-mapping.md` for QA → Jira field mapping
|
|
84
|
+
3. **Create/Update** — Call REST API or Atlassian MCP
|
|
85
|
+
4. **Link** — Create issue links, add to epic/sprint as needed
|
|
86
|
+
5. **Report** — Use JQL for dashboards and status reports
|
|
87
|
+
|
|
88
|
+
## Scope
|
|
89
|
+
|
|
90
|
+
**Can do (autonomous):**
|
|
91
|
+
- Create Bug, Story, Task, Sub-task via REST API
|
|
92
|
+
- Search issues with JQL
|
|
93
|
+
- Transition issues through workflow
|
|
94
|
+
- Link issues (parent-child, blocks, relates to)
|
|
95
|
+
- Add comments and attachments
|
|
96
|
+
- Map QA bug/task output to Jira fields per `references/field-mapping.md`
|
|
97
|
+
- Integrate with qa-bug-ticket-creator and qa-task-creator for issue creation
|
|
98
|
+
|
|
99
|
+
**Cannot do (requires confirmation):**
|
|
100
|
+
- Create issues in projects without configured access
|
|
101
|
+
- Override user-specified assignee or sprint
|
|
102
|
+
- Delete or bulk-modify issues
|
|
103
|
+
|
|
104
|
+
**Will not do (out of scope):**
|
|
105
|
+
- Modify Jira project configuration or workflows
|
|
106
|
+
- Create custom fields (admin-only)
|
|
107
|
+
- Execute tests or modify application code
|
|
108
|
+
|
|
109
|
+
## Quality Checklist
|
|
110
|
+
|
|
111
|
+
- [ ] Auth uses env vars; no hardcoded credentials
|
|
112
|
+
- [ ] Field mapping follows `references/field-mapping.md`
|
|
113
|
+
- [ ] Issue types and project keys validated before create
|
|
114
|
+
- [ ] JQL queries are safe (no injection; use parameterization where supported)
|
|
115
|
+
- [ ] Links to qa-bug-ticket-creator / qa-task-creator output preserved
|
|
116
|
+
- [ ] Xray/Zephyr operations follow `references/xray-integration.md` when used
|
|
117
|
+
|
|
118
|
+
## Troubleshooting
|
|
119
|
+
|
|
120
|
+
| Symptom | Likely Cause | Fix |
|
|
121
|
+
| ------- | ------------ | --- |
|
|
122
|
+
| 401 Unauthorized | Invalid token or email | Regenerate API token; verify JIRA_EMAIL matches token owner |
|
|
123
|
+
| 404 on create | Wrong project key or endpoint | Verify JIRA_BASE_URL; check project key exists |
|
|
124
|
+
| 400 Bad Request | Invalid field value | Check `references/field-mapping.md`; verify custom field IDs |
|
|
125
|
+
| Transition fails | Invalid transition ID | GET `/rest/api/3/issue/{key}/transitions` to list valid transitions |
|
|
126
|
+
| Xray sync fails | Xray not installed or wrong project | Verify Xray app; use Xray-specific endpoints per `references/xray-integration.md` |
|
|
127
|
+
| Field not found | Custom field ID wrong | Use GET `/rest/api/3/field` to list field IDs |
|
|
128
|
+
|
|
129
|
+
## Reference Files
|
|
130
|
+
|
|
131
|
+
| Topic | File |
|
|
132
|
+
| ----- | ---- |
|
|
133
|
+
| Jira REST API patterns | `references/api-patterns.md` |
|
|
134
|
+
| QA → Jira field mapping | `references/field-mapping.md` |
|
|
135
|
+
| Xray/Zephyr integration | `references/xray-integration.md` |
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Jira REST API Patterns
|
|
2
|
+
|
|
3
|
+
*Request/response patterns for common Jira REST API v3 operations.*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Base URL
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
{JIRA_BASE_URL}/rest/api/3
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Headers:
|
|
14
|
+
```
|
|
15
|
+
Authorization: Basic {base64(email:api_token)}
|
|
16
|
+
Content-Type: application/json
|
|
17
|
+
Accept: application/json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Create Issue
|
|
23
|
+
|
|
24
|
+
**POST** `/rest/api/3/issue`
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"fields": {
|
|
29
|
+
"project": { "key": "PROJ" },
|
|
30
|
+
"summary": "Login fails when password contains special chars",
|
|
31
|
+
"description": {
|
|
32
|
+
"type": "doc",
|
|
33
|
+
"version": 1,
|
|
34
|
+
"content": [{
|
|
35
|
+
"type": "paragraph",
|
|
36
|
+
"content": [{ "type": "text", "text": "Expected: ... Actual: ..." }]
|
|
37
|
+
}]
|
|
38
|
+
},
|
|
39
|
+
"issuetype": { "name": "Bug" },
|
|
40
|
+
"priority": { "name": "High" },
|
|
41
|
+
"labels": ["auth", "frontend"],
|
|
42
|
+
"components": [{ "name": "Authentication" }]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Response: `201 Created` with `{"key": "PROJ-123", "id": "12345"}`
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Search (JQL)
|
|
52
|
+
|
|
53
|
+
**GET** `/rest/api/3/search?jql={jql}&maxResults=50&startAt=0`
|
|
54
|
+
|
|
55
|
+
Example JQL:
|
|
56
|
+
- `project = PROJ AND issuetype = Bug AND status != Done`
|
|
57
|
+
- `sprint in openSprints() AND assignee = currentUser()`
|
|
58
|
+
- `key = PROJ-123`
|
|
59
|
+
|
|
60
|
+
Response: `{"issues": [...], "total": N}`
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Transition
|
|
65
|
+
|
|
66
|
+
**GET** `/rest/api/3/issue/{key}/transitions` — List available transitions
|
|
67
|
+
|
|
68
|
+
**POST** `/rest/api/3/issue/{key}/transitions`
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"transition": { "id": "31" }
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Transition IDs vary by workflow; fetch via GET first.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Add Comment
|
|
81
|
+
|
|
82
|
+
**POST** `/rest/api/3/issue/{key}/comment`
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"body": {
|
|
87
|
+
"type": "doc",
|
|
88
|
+
"version": 1,
|
|
89
|
+
"content": [{
|
|
90
|
+
"type": "paragraph",
|
|
91
|
+
"content": [{ "type": "text", "text": "Comment text" }]
|
|
92
|
+
}]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Link Issues
|
|
100
|
+
|
|
101
|
+
**POST** `/rest/api/3/issueLink`
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"type": { "name": "Blocks" },
|
|
106
|
+
"inwardIssue": { "key": "PROJ-123" },
|
|
107
|
+
"outwardIssue": { "key": "PROJ-124" }
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Link types: `Blocks`, `Cloners`, `Duplicate`, `Relates`, etc.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Attach File
|
|
116
|
+
|
|
117
|
+
**POST** `/rest/api/3/issue/{key}/attachments`
|
|
118
|
+
|
|
119
|
+
`Content-Type: multipart/form-data` with file part.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Sub-task (Parent)
|
|
124
|
+
|
|
125
|
+
Add `"parent": { "key": "PROJ-100" }` to create sub-task under parent.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Epic Link
|
|
130
|
+
|
|
131
|
+
For classic projects: `"customfield_10014": "PROJ-50"` (field ID varies)
|
|
132
|
+
|
|
133
|
+
For next-gen: Use `parent` or project-specific epic link field.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Add to Sprint
|
|
138
|
+
|
|
139
|
+
**POST** `/rest/api/3/sprint/{sprintId}/issue`
|
|
140
|
+
|
|
141
|
+
Body: `{"issues": ["PROJ-123", "PROJ-124"]}`
|
|
142
|
+
|
|
143
|
+
Or set `customfield_10020` (Sprint field ID varies) on issue create/update.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# QA to Jira Field Mapping
|
|
2
|
+
|
|
3
|
+
*Mapping local QA fields (from qa-bug-ticket-creator, qa-task-creator) to Jira fields.*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Bug Report → Jira Bug
|
|
8
|
+
|
|
9
|
+
| QA Bug Field | Jira Field | Jira API Path |
|
|
10
|
+
| ------------ | ---------- | ------------- |
|
|
11
|
+
| Title | Summary | `fields.summary` |
|
|
12
|
+
| Expected Result + Actual Result + Steps | Description | `fields.description` (Atlassian Document Format) |
|
|
13
|
+
| Severity | Priority | `fields.priority.name` |
|
|
14
|
+
| Component/Module | Labels | `fields.labels[]` |
|
|
15
|
+
| Component/Module | Components | `fields.components[].name` |
|
|
16
|
+
| Environment | Description (append) or custom | Custom field or description |
|
|
17
|
+
| Evidence | Attachments / Comment | Attach via `/attachments`; or embed in description |
|
|
18
|
+
| Priority (P1–P5) | Priority or custom | Map P1→Highest, P2→High, etc. |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Task → Jira Story/Task
|
|
23
|
+
|
|
24
|
+
| QA Task Field | Jira Field | Jira API Path |
|
|
25
|
+
| ------------- | ---------- | ------------- |
|
|
26
|
+
| Title | Summary | `fields.summary` |
|
|
27
|
+
| Description + Acceptance criteria | Description | `fields.description` |
|
|
28
|
+
| Task type | Issue type | `fields.issuetype` (Story, Task) |
|
|
29
|
+
| Labels | Labels | `fields.labels[]` |
|
|
30
|
+
| Parent bug | Link or parent | `issueLink` or `fields.parent` |
|
|
31
|
+
| Component | Components | `fields.components[].name` |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Severity → Priority
|
|
36
|
+
|
|
37
|
+
| QA Severity | Jira Priority |
|
|
38
|
+
| ----------- | ------------- |
|
|
39
|
+
| Blocker | Highest |
|
|
40
|
+
| Critical | High |
|
|
41
|
+
| Major | High / Medium |
|
|
42
|
+
| Minor | Medium / Low |
|
|
43
|
+
| Trivial | Low |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Atlassian Document Format (ADF)
|
|
48
|
+
|
|
49
|
+
Description and comments use ADF:
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"type": "doc",
|
|
54
|
+
"version": 1,
|
|
55
|
+
"content": [
|
|
56
|
+
{
|
|
57
|
+
"type": "heading",
|
|
58
|
+
"attrs": { "level": 3 },
|
|
59
|
+
"content": [{ "type": "text", "text": "Expected Result" }]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"type": "paragraph",
|
|
63
|
+
"content": [{ "type": "text", "text": "User should be able to log in." }]
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
For simple text, use a single paragraph node.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Custom Fields
|
|
74
|
+
|
|
75
|
+
Project-specific custom fields have IDs like `customfield_10001`. Use:
|
|
76
|
+
|
|
77
|
+
**GET** `/rest/api/3/field` — List all fields and IDs.
|
|
78
|
+
|
|
79
|
+
Map QA concepts (e.g., Fix Version, Sprint) to the correct custom field ID for the project.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Xray / Zephyr Test Management Integration
|
|
2
|
+
|
|
3
|
+
*Patterns for syncing test cases and execution with Jira via Xray or Zephyr.*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Xray (Xray for Jira)
|
|
8
|
+
|
|
9
|
+
### Test Case as Jira Issue
|
|
10
|
+
|
|
11
|
+
- **Issue type:** `Test` (or project-specific)
|
|
12
|
+
- **Link types:** Test → Requirement (traceability)
|
|
13
|
+
- **Custom fields:** Steps, Preconditions, Expected Result
|
|
14
|
+
|
|
15
|
+
### REST API Endpoints (Xray)
|
|
16
|
+
|
|
17
|
+
| Operation | Endpoint |
|
|
18
|
+
| --------- | -------- |
|
|
19
|
+
| Create test | `POST /rest/raven/2.0/api/test` |
|
|
20
|
+
| Link test to requirement | `POST /rest/raven/2.0/api/test/{key}/requirement` |
|
|
21
|
+
| Create test execution | `POST /rest/raven/2.0/api/testexec/{execKey}/test` |
|
|
22
|
+
| Import test results (Xray format) | `POST /rest/raven/2.0/api/import/execution` |
|
|
23
|
+
|
|
24
|
+
### Import Execution (Cucumber, JUnit, etc.)
|
|
25
|
+
|
|
26
|
+
Xray accepts JUnit XML, Cucumber JSON, and other formats. POST to import endpoint with execution results; Xray creates/updates Test Execution and links to tests.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Zephyr (Zephyr Scale / Squad)
|
|
31
|
+
|
|
32
|
+
### Test Case as Jira Issue
|
|
33
|
+
|
|
34
|
+
- **Issue type:** `Test` (Zephyr Scale)
|
|
35
|
+
- **Traceability:** Test ↔ Requirement via Zephyr links
|
|
36
|
+
|
|
37
|
+
### REST API (Zephyr Scale)
|
|
38
|
+
|
|
39
|
+
| Operation | Endpoint |
|
|
40
|
+
| --------- | -------- |
|
|
41
|
+
| Create test | Zephyr Scale REST API (varies by version) |
|
|
42
|
+
| Add to test cycle | Cycle and folder APIs |
|
|
43
|
+
| Record execution | Execution API |
|
|
44
|
+
|
|
45
|
+
Check Zephyr documentation for exact endpoints; they differ between Zephyr for Jira (classic) and Zephyr Scale.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Common Patterns
|
|
50
|
+
|
|
51
|
+
### 1. Link Test to Requirement
|
|
52
|
+
|
|
53
|
+
After creating a Test issue in Jira:
|
|
54
|
+
- **Xray:** Use Xray REST to link test key to requirement key
|
|
55
|
+
- **Zephyr:** Use Zephyr API for traceability
|
|
56
|
+
|
|
57
|
+
### 2. Import Automated Results
|
|
58
|
+
|
|
59
|
+
1. Run tests (Playwright, pytest, Jest, etc.)
|
|
60
|
+
2. Export results as JUnit XML or Cucumber JSON
|
|
61
|
+
3. POST to Xray/Zephyr import endpoint
|
|
62
|
+
4. Map test case IDs (e.g., `PROJ-T123`) to automated test names via mapping or naming convention
|
|
63
|
+
|
|
64
|
+
### 3. Naming Convention
|
|
65
|
+
|
|
66
|
+
Use consistent naming: `PROJ-T001`, `PROJ-T002` or map `describe/it` or `test_` names to test keys via a mapping file.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Environment Variables
|
|
71
|
+
|
|
72
|
+
| Variable | Description |
|
|
73
|
+
| -------- | ----------- |
|
|
74
|
+
| `JIRA_BASE_URL` | Same as main Jira |
|
|
75
|
+
| `JIRA_API_TOKEN` | Same as main Jira |
|
|
76
|
+
| `XRAY_CLIENT_ID` / `XRAY_CLIENT_SECRET` | For Xray Cloud API (if using OAuth) |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Scope
|
|
81
|
+
|
|
82
|
+
- Create Test issues and link to requirements
|
|
83
|
+
- Import execution results from CI
|
|
84
|
+
- Query test coverage per requirement
|
|
85
|
+
- Sync with qa-test-reporter output (JUnit XML)
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-jmeter-writer
|
|
3
|
+
description: Generate JMeter performance test plans in XML/JMX format with thread groups, samplers, listeners, assertions, and CI-ready configuration.
|
|
4
|
+
output_dir: tests/performance
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# QA JMeter Writer
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Write JMeter test plans (.jmx) from performance test specifications. Transform structured performance requirements (from qa-plan-creator performance plans, qa-nfr-analyst NFR specs) into executable JMeter XML test plans with thread groups, samplers, listeners, assertions, and CI-ready configuration.
|
|
12
|
+
|
|
13
|
+
## Trigger Phrases
|
|
14
|
+
|
|
15
|
+
- "Write JMeter tests for [API/endpoint]"
|
|
16
|
+
- "Generate JMeter load tests from performance plan"
|
|
17
|
+
- "Create JMeter .jmx for [service]"
|
|
18
|
+
- "JMeter thread group with HTTP samplers"
|
|
19
|
+
- "JMeter test plan with assertions and listeners"
|
|
20
|
+
- "JMeter CSV data parameterization"
|
|
21
|
+
- "JMeter CI integration non-GUI mode"
|
|
22
|
+
- "JMeter distributed load test plan"
|
|
23
|
+
- "JMeter JSON assertion for API"
|
|
24
|
+
- "JMeter JSR223 Groovy preprocessor"
|
|
25
|
+
|
|
26
|
+
## Key Features
|
|
27
|
+
|
|
28
|
+
| Feature | Description |
|
|
29
|
+
|---------|-------------|
|
|
30
|
+
| **Thread Groups** | Users, ramp-up, loops, duration for load modeling |
|
|
31
|
+
| **HTTP Request Sampler** | URL, method, body, headers, path |
|
|
32
|
+
| **JDBC/JMS Samplers** | Database and messaging protocol support |
|
|
33
|
+
| **Listeners** | Aggregate Report, Summary Report, Graph Results, View Results Tree |
|
|
34
|
+
| **Assertions** | Response Assertion, Duration Assertion, Size Assertion, JSON Assertion |
|
|
35
|
+
| **CSV Data Set Config** | Parameterization from CSV files |
|
|
36
|
+
| **Extractors** | Regular Expression Extractor, JSON Extractor |
|
|
37
|
+
| **Timers** | Constant, Uniform Random, Gaussian for think time |
|
|
38
|
+
| **Pre/Post Processors** | JSR223 (Groovy), BeanShell for correlation |
|
|
39
|
+
|
|
40
|
+
## Workflow
|
|
41
|
+
|
|
42
|
+
1. **Read performance plan** — From qa-plan-creator (performance plan) or qa-nfr-analyst (NFR specs)
|
|
43
|
+
2. **Design thread groups** — Map load profiles to Thread Group (users, ramp-up, loops, duration)
|
|
44
|
+
3. **Add samplers** — HTTP Request, JDBC, JMS as needed
|
|
45
|
+
4. **Configure assertions** — Response, Duration, Size, JSON for validation
|
|
46
|
+
5. **Add listeners** — Aggregate Report, Summary Report for results
|
|
47
|
+
6. **Generate .jmx** — Produce valid JMeter XML test plan file
|
|
48
|
+
|
|
49
|
+
## Key Patterns
|
|
50
|
+
|
|
51
|
+
| Pattern | Usage |
|
|
52
|
+
|---------|-------|
|
|
53
|
+
| **Thread Group** | `num_threads`, `ramp_time`, `loops`, `duration` for load modeling |
|
|
54
|
+
| **HTTP Request** | Domain, path, method, body, headers |
|
|
55
|
+
| **Response Assertion** | Status code, response text, response code |
|
|
56
|
+
| **Duration Assertion** | Max response time (ms) |
|
|
57
|
+
| **JSON Assertion** | JSONPath, expected value |
|
|
58
|
+
| **CSV Data Set Config** | Filename, variable names, delimiter |
|
|
59
|
+
| **Regular Expression Extractor** | Regex, template, match number, variable |
|
|
60
|
+
| **JSR223 PreProcessor** | Groovy script for correlation |
|
|
61
|
+
|
|
62
|
+
### Thread Group Example
|
|
63
|
+
|
|
64
|
+
```xml
|
|
65
|
+
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Load Users" enabled="true">
|
|
66
|
+
<stringProp name="ThreadGroup.num_threads">50</stringProp>
|
|
67
|
+
<stringProp name="ThreadGroup.ramp_time">60</stringProp>
|
|
68
|
+
<elementProp name="ThreadGroup.main_controller" elementType="LoopController">
|
|
69
|
+
<stringProp name="LoopController.loops">-1</stringProp>
|
|
70
|
+
<stringProp name="ThreadGroup.duration">300</stringProp>
|
|
71
|
+
</elementProp>
|
|
72
|
+
</ThreadGroup>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### HTTP Request Sampler
|
|
76
|
+
|
|
77
|
+
```xml
|
|
78
|
+
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="GET /api/users" enabled="true">
|
|
79
|
+
<stringProp name="HTTPSampler.domain">api.example.com</stringProp>
|
|
80
|
+
<stringProp name="HTTPSampler.path">/api/users</stringProp>
|
|
81
|
+
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
82
|
+
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
83
|
+
</HTTPSamplerProxy>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Response Assertion
|
|
87
|
+
|
|
88
|
+
```xml
|
|
89
|
+
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Status 200" enabled="true">
|
|
90
|
+
<collectionProp name="Assertion.test_strings">
|
|
91
|
+
<stringProp name="49586">200</stringProp>
|
|
92
|
+
</collectionProp>
|
|
93
|
+
<stringProp name="Assertion.custom_message"></stringProp>
|
|
94
|
+
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
95
|
+
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
96
|
+
</ResponseAssertion>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
See `references/patterns.md` for thread groups, samplers, assertions, extractors, timers, controllers.
|
|
100
|
+
|
|
101
|
+
## Output
|
|
102
|
+
|
|
103
|
+
- **JMeter test plans** — `.jmx` files in `tests/`, `performance/`, or `jmeter/` per project convention
|
|
104
|
+
- **Run via CLI** — `jmeter -n -t test.jmx -l results.jtl -e -o report/`
|
|
105
|
+
- **CI integration** — Non-GUI mode (`-n`), JTL results (`-l`), HTML report (`-e -o`)
|
|
106
|
+
|
|
107
|
+
## CI Integration
|
|
108
|
+
|
|
109
|
+
| Option | Description |
|
|
110
|
+
|--------|-------------|
|
|
111
|
+
| `-n` | Non-GUI mode (headless) |
|
|
112
|
+
| `-t test.jmx` | Test plan file |
|
|
113
|
+
| `-l results.jtl` | Results file (JTL/CSV) |
|
|
114
|
+
| `-e` | Generate HTML report after run |
|
|
115
|
+
| `-o report/` | Output directory for HTML report |
|
|
116
|
+
| `-Jprop=value` | Override JMeter properties |
|
|
117
|
+
|
|
118
|
+
## Scope
|
|
119
|
+
|
|
120
|
+
**Can do (autonomous):**
|
|
121
|
+
- Generate .jmx test plans from performance plans and NFR specs
|
|
122
|
+
- Design thread groups (users, ramp-up, loops, duration)
|
|
123
|
+
- Add HTTP, JDBC, JMS samplers with proper configuration
|
|
124
|
+
- Configure Response, Duration, Size, JSON assertions
|
|
125
|
+
- Add CSV Data Set Config for parameterization
|
|
126
|
+
- Add Regular Expression Extractor, JSON Extractor for correlation
|
|
127
|
+
- Add timers (Constant, Uniform Random) for think time
|
|
128
|
+
- Add JSR223 PreProcessor (Groovy) for dynamic logic
|
|
129
|
+
- Add listeners (Aggregate Report, Summary Report)
|
|
130
|
+
- Generate CI-ready run commands
|
|
131
|
+
|
|
132
|
+
**Cannot do (requires confirmation):**
|
|
133
|
+
- Change production service configuration
|
|
134
|
+
- Target production without explicit consent
|
|
135
|
+
- Add JMeter plugins not in standard distribution
|
|
136
|
+
- Override project JMeter config without approval
|
|
137
|
+
|
|
138
|
+
**Will not do (out of scope):**
|
|
139
|
+
- Execute tests (user runs `jmeter -n -t test.jmx`)
|
|
140
|
+
- Write E2E functional tests (use qa-playwright-ts-writer)
|
|
141
|
+
- Provision load infrastructure (distributed JMeter setup)
|
|
142
|
+
- Modify CI/CD pipelines beyond JMeter integration
|
|
143
|
+
|
|
144
|
+
## References
|
|
145
|
+
|
|
146
|
+
- `references/patterns.md` — Thread groups, samplers, assertions, extractors, timers, controllers
|
|
147
|
+
- `references/config.md` — CLI mode, properties, plugins, distributed testing
|
|
148
|
+
- `references/best-practices.md` — Non-GUI mode, parameterization, correlation, result analysis
|
|
149
|
+
|
|
150
|
+
## Quality Checklist
|
|
151
|
+
|
|
152
|
+
- [ ] Thread groups match performance plan load profiles (users, ramp-up, duration)
|
|
153
|
+
- [ ] Assertions validate critical responses (status, duration, size)
|
|
154
|
+
- [ ] No hardcoded secrets; use `${__P()}` or CSV for credentials
|
|
155
|
+
- [ ] Think time (timers) between requests where realistic
|
|
156
|
+
- [ ] Listeners suitable for CI (Aggregate Report, Summary Report; avoid View Results Tree in load runs)
|
|
157
|
+
- [ ] CSV Data Set Config for parameterization when needed
|
|
158
|
+
- [ ] Extractors for correlation when session/token required
|
|
159
|
+
- [ ] Test plan runs in non-GUI mode without errors
|
|
160
|
+
|
|
161
|
+
## Troubleshooting
|
|
162
|
+
|
|
163
|
+
| Symptom | Likely Cause | Fix |
|
|
164
|
+
|---------|--------------|-----|
|
|
165
|
+
| OutOfMemoryError in JMeter | Too many threads or listeners | Reduce threads; remove View Results Tree; increase JVM heap (`-Xmx`) |
|
|
166
|
+
| Assertions fail in CI | Different baseline or env | Align assertion thresholds; use `${__P()}` for env-specific values |
|
|
167
|
+
| High error rate | Timeouts, 5xx, or wrong assertions | Increase timeout; fix assertion logic; verify endpoint |
|
|
168
|
+
| CSV not found | Relative path | Use absolute path or `${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}` |
|
|
169
|
+
| Correlation fails | Extractor order or regex | Ensure extractor runs before dependent sampler; verify regex |
|
|
170
|
+
| JMX invalid XML | Malformed elements | Validate XML; ensure proper closing tags; check JMeter version compatibility |
|
|
171
|
+
| Slow HTML report | Large JTL file | Use Aggregate Report listener; reduce sample logging; filter by label |
|