qa-skills 3.0.0 → 3.1.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.
Files changed (262) hide show
  1. package/README.md +20 -149
  2. package/bin/cli.js +1 -40
  3. package/package.json +23 -26
  4. package/dist/agents/registry.d.ts +0 -5
  5. package/dist/agents/registry.d.ts.map +0 -1
  6. package/dist/agents/registry.js +0 -101
  7. package/dist/agents/registry.js.map +0 -1
  8. package/dist/agents/types.d.ts +0 -9
  9. package/dist/agents/types.d.ts.map +0 -1
  10. package/dist/agents/types.js +0 -2
  11. package/dist/agents/types.js.map +0 -1
  12. package/dist/dependencies.d.ts +0 -21
  13. package/dist/dependencies.d.ts.map +0 -1
  14. package/dist/dependencies.js +0 -125
  15. package/dist/dependencies.js.map +0 -1
  16. package/dist/installer.d.ts +0 -25
  17. package/dist/installer.d.ts.map +0 -1
  18. package/dist/installer.js +0 -437
  19. package/dist/installer.js.map +0 -1
  20. package/dist/scaffold.d.ts +0 -27
  21. package/dist/scaffold.d.ts.map +0 -1
  22. package/dist/scaffold.js +0 -182
  23. package/dist/scaffold.js.map +0 -1
  24. package/skills/qa-accessibility-test-writer/SKILL.md +0 -127
  25. package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +0 -349
  26. package/skills/qa-accessibility-test-writer/references/best-practices.md +0 -184
  27. package/skills/qa-accessibility-test-writer/references/wcag-tests.md +0 -331
  28. package/skills/qa-api-contract-curator/SKILL.md +0 -104
  29. package/skills/qa-api-contract-curator/references/breaking-changes.md +0 -363
  30. package/skills/qa-api-contract-curator/references/openapi-structure.md +0 -404
  31. package/skills/qa-browser-data-collector/SKILL.md +0 -132
  32. package/skills/qa-browser-data-collector/references/data-collection-checklist.md +0 -91
  33. package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +0 -113
  34. package/skills/qa-bug-ticket-creator/SKILL.md +0 -148
  35. package/skills/qa-bug-ticket-creator/references/bug-report-format.md +0 -149
  36. package/skills/qa-bug-ticket-creator/references/severity-guide.md +0 -81
  37. package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +0 -39
  38. package/skills/qa-changelog-analyzer/SKILL.md +0 -134
  39. package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +0 -138
  40. package/skills/qa-changelog-analyzer/references/impact-mapping.md +0 -120
  41. package/skills/qa-clickup-integration/SKILL.md +0 -166
  42. package/skills/qa-clickup-integration/references/api-patterns.md +0 -102
  43. package/skills/qa-clickup-integration/references/field-mapping.md +0 -71
  44. package/skills/qa-codeceptjs-writer/SKILL.md +0 -136
  45. package/skills/qa-codeceptjs-writer/references/best-practices.md +0 -207
  46. package/skills/qa-codeceptjs-writer/references/config.md +0 -255
  47. package/skills/qa-codeceptjs-writer/references/patterns.md +0 -285
  48. package/skills/qa-coverage-analyzer/SKILL.md +0 -166
  49. package/skills/qa-coverage-analyzer/references/best-practices.md +0 -142
  50. package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +0 -155
  51. package/skills/qa-coverage-analyzer/references/tools.md +0 -204
  52. package/skills/qa-cypress-writer/SKILL.md +0 -134
  53. package/skills/qa-cypress-writer/references/assertions.md +0 -121
  54. package/skills/qa-cypress-writer/references/best-practices.md +0 -82
  55. package/skills/qa-cypress-writer/references/config.md +0 -121
  56. package/skills/qa-cypress-writer/references/patterns.md +0 -170
  57. package/skills/qa-data-factory/SKILL.md +0 -126
  58. package/skills/qa-data-factory/references/factory-patterns.md +0 -164
  59. package/skills/qa-data-factory/references/faker-guide.md +0 -131
  60. package/skills/qa-diagram-generator/SKILL.md +0 -125
  61. package/skills/qa-diagram-generator/references/c4-model.md +0 -53
  62. package/skills/qa-diagram-generator/references/charts.md +0 -58
  63. package/skills/qa-diagram-generator/references/class-diagram.md +0 -85
  64. package/skills/qa-diagram-generator/references/er-diagram.md +0 -69
  65. package/skills/qa-diagram-generator/references/flowchart.md +0 -92
  66. package/skills/qa-diagram-generator/references/from-screenshot.md +0 -45
  67. package/skills/qa-diagram-generator/references/gantt.md +0 -49
  68. package/skills/qa-diagram-generator/references/journey.md +0 -50
  69. package/skills/qa-diagram-generator/references/mindmap.md +0 -75
  70. package/skills/qa-diagram-generator/references/sequence.md +0 -69
  71. package/skills/qa-diagram-generator/references/state-diagram.md +0 -56
  72. package/skills/qa-discovery-interview/SKILL.md +0 -182
  73. package/skills/qa-discovery-interview/references/completeness-checklist.md +0 -53
  74. package/skills/qa-discovery-interview/references/conflict-patterns.md +0 -101
  75. package/skills/qa-discovery-interview/references/qa-categories.md +0 -147
  76. package/skills/qa-discovery-interview/templates/qa-brief-template.md +0 -168
  77. package/skills/qa-environment-checker/SKILL.md +0 -142
  78. package/skills/qa-environment-checker/references/dependency-matrix.md +0 -101
  79. package/skills/qa-environment-checker/references/health-checks.md +0 -209
  80. package/skills/qa-environment-checker/templates/env-readiness-template.md +0 -64
  81. package/skills/qa-flaky-detector/SKILL.md +0 -153
  82. package/skills/qa-flaky-detector/references/ci-analysis.md +0 -140
  83. package/skills/qa-flaky-detector/references/flaky-patterns.md +0 -247
  84. package/skills/qa-github-issues-enhanced/SKILL.md +0 -175
  85. package/skills/qa-github-issues-enhanced/references/issue-templates.md +0 -425
  86. package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +0 -130
  87. package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +0 -188
  88. package/skills/qa-httpx-writer/SKILL.md +0 -138
  89. package/skills/qa-httpx-writer/references/assertions.md +0 -195
  90. package/skills/qa-httpx-writer/references/best-practices.md +0 -140
  91. package/skills/qa-httpx-writer/references/config.md +0 -212
  92. package/skills/qa-httpx-writer/references/patterns.md +0 -262
  93. package/skills/qa-jest-writer/SKILL.md +0 -131
  94. package/skills/qa-jest-writer/references/assertions.md +0 -125
  95. package/skills/qa-jest-writer/references/best-practices.md +0 -136
  96. package/skills/qa-jest-writer/references/config.md +0 -134
  97. package/skills/qa-jest-writer/references/patterns.md +0 -172
  98. package/skills/qa-jira-integration/SKILL.md +0 -135
  99. package/skills/qa-jira-integration/references/api-patterns.md +0 -143
  100. package/skills/qa-jira-integration/references/field-mapping.md +0 -79
  101. package/skills/qa-jira-integration/references/xray-integration.md +0 -85
  102. package/skills/qa-jmeter-writer/SKILL.md +0 -171
  103. package/skills/qa-jmeter-writer/references/best-practices.md +0 -157
  104. package/skills/qa-jmeter-writer/references/config.md +0 -204
  105. package/skills/qa-jmeter-writer/references/patterns.md +0 -242
  106. package/skills/qa-junit5-writer/SKILL.md +0 -157
  107. package/skills/qa-junit5-writer/references/assertions.md +0 -118
  108. package/skills/qa-junit5-writer/references/config.md +0 -97
  109. package/skills/qa-junit5-writer/references/patterns.md +0 -162
  110. package/skills/qa-k6-writer/SKILL.md +0 -155
  111. package/skills/qa-k6-writer/references/best-practices.md +0 -236
  112. package/skills/qa-k6-writer/references/config.md +0 -219
  113. package/skills/qa-k6-writer/references/patterns.md +0 -304
  114. package/skills/qa-linear-integration/SKILL.md +0 -137
  115. package/skills/qa-linear-integration/references/api-patterns.md +0 -249
  116. package/skills/qa-linear-integration/references/field-mapping.md +0 -121
  117. package/skills/qa-locust-writer/SKILL.md +0 -151
  118. package/skills/qa-locust-writer/references/best-practices.md +0 -126
  119. package/skills/qa-locust-writer/references/config.md +0 -170
  120. package/skills/qa-locust-writer/references/patterns.md +0 -235
  121. package/skills/qa-manual-test-designer/SKILL.md +0 -145
  122. package/skills/qa-manual-test-designer/references/exploratory-charters.md +0 -138
  123. package/skills/qa-manual-test-designer/references/personas.md +0 -146
  124. package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +0 -47
  125. package/skills/qa-manual-test-designer/templates/test-case-template.md +0 -31
  126. package/skills/qa-mobile-test-writer/SKILL.md +0 -144
  127. package/skills/qa-mobile-test-writer/references/best-practices.md +0 -214
  128. package/skills/qa-mobile-test-writer/references/config.md +0 -309
  129. package/skills/qa-mobile-test-writer/references/patterns.md +0 -304
  130. package/skills/qa-nfr-analyst/SKILL.md +0 -177
  131. package/skills/qa-nfr-analyst/references/iso-25010-model.md +0 -159
  132. package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +0 -202
  133. package/skills/qa-nfr-analyst/references/wcag-checklist.md +0 -184
  134. package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +0 -89
  135. package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +0 -48
  136. package/skills/qa-orchestrator/SKILL.md +0 -132
  137. package/skills/qa-orchestrator/references/handoff-chains.md +0 -105
  138. package/skills/qa-orchestrator/references/pipeline-modes.md +0 -115
  139. package/skills/qa-orchestrator/references/scheduler-rules.md +0 -84
  140. package/skills/qa-pact-writer/SKILL.md +0 -133
  141. package/skills/qa-pact-writer/references/best-practices.md +0 -100
  142. package/skills/qa-pact-writer/references/config.md +0 -135
  143. package/skills/qa-pact-writer/references/patterns.md +0 -161
  144. package/skills/qa-plan-creator/SKILL.md +0 -139
  145. package/skills/qa-plan-creator/references/introduction-plan.md +0 -43
  146. package/skills/qa-plan-creator/references/migration-plan.md +0 -44
  147. package/skills/qa-plan-creator/references/onboarding-plan.md +0 -46
  148. package/skills/qa-plan-creator/references/performance-plan.md +0 -44
  149. package/skills/qa-plan-creator/references/regression-plan.md +0 -45
  150. package/skills/qa-plan-creator/references/release-plan.md +0 -45
  151. package/skills/qa-plan-creator/references/sprint-plan.md +0 -44
  152. package/skills/qa-plan-creator/references/test-plan.md +0 -59
  153. package/skills/qa-plan-creator/references/uat-plan.md +0 -43
  154. package/skills/qa-plan-creator/templates/checklist-template.md +0 -36
  155. package/skills/qa-plan-creator/templates/regression-checklist-template.md +0 -49
  156. package/skills/qa-plan-creator/templates/release-checklist-template.md +0 -46
  157. package/skills/qa-plan-creator/templates/test-plan-template.md +0 -74
  158. package/skills/qa-playwright-py-writer/SKILL.md +0 -156
  159. package/skills/qa-playwright-py-writer/references/best-practices.md +0 -194
  160. package/skills/qa-playwright-py-writer/references/config.md +0 -195
  161. package/skills/qa-playwright-py-writer/references/patterns.md +0 -212
  162. package/skills/qa-playwright-ts-writer/SKILL.md +0 -151
  163. package/skills/qa-playwright-ts-writer/references/assertions.md +0 -109
  164. package/skills/qa-playwright-ts-writer/references/best-practices.md +0 -191
  165. package/skills/qa-playwright-ts-writer/references/config.md +0 -144
  166. package/skills/qa-playwright-ts-writer/references/patterns.md +0 -171
  167. package/skills/qa-pytest-writer/SKILL.md +0 -145
  168. package/skills/qa-pytest-writer/references/assertions.md +0 -149
  169. package/skills/qa-pytest-writer/references/best-practices.md +0 -97
  170. package/skills/qa-pytest-writer/references/config.md +0 -176
  171. package/skills/qa-pytest-writer/references/patterns.md +0 -251
  172. package/skills/qa-qase-integration/SKILL.md +0 -149
  173. package/skills/qa-qase-integration/references/api-reference.md +0 -354
  174. package/skills/qa-qase-integration/references/ci-integration.md +0 -196
  175. package/skills/qa-qase-integration/references/field-mapping.md +0 -157
  176. package/skills/qa-requirements-generator/SKILL.md +0 -152
  177. package/skills/qa-requirements-generator/references/iso-29148-structure.md +0 -153
  178. package/skills/qa-requirements-generator/references/requirement-patterns.md +0 -278
  179. package/skills/qa-rest-assured-writer/SKILL.md +0 -137
  180. package/skills/qa-rest-assured-writer/references/best-practices.md +0 -50
  181. package/skills/qa-rest-assured-writer/references/config.md +0 -124
  182. package/skills/qa-rest-assured-writer/references/patterns.md +0 -192
  183. package/skills/qa-risk-analyzer/SKILL.md +0 -158
  184. package/skills/qa-risk-analyzer/references/impact-analysis.md +0 -133
  185. package/skills/qa-risk-analyzer/references/risk-factors.md +0 -123
  186. package/skills/qa-robot-framework-writer/SKILL.md +0 -147
  187. package/skills/qa-robot-framework-writer/references/best-practices.md +0 -249
  188. package/skills/qa-robot-framework-writer/references/config.md +0 -204
  189. package/skills/qa-robot-framework-writer/references/libraries.md +0 -273
  190. package/skills/qa-robot-framework-writer/references/patterns.md +0 -216
  191. package/skills/qa-security-test-writer/SKILL.md +0 -123
  192. package/skills/qa-security-test-writer/references/best-practices.md +0 -155
  193. package/skills/qa-security-test-writer/references/owasp-top10.md +0 -331
  194. package/skills/qa-security-test-writer/references/zap-config.md +0 -258
  195. package/skills/qa-selenium-java-writer/SKILL.md +0 -143
  196. package/skills/qa-selenium-java-writer/references/best-practices.md +0 -59
  197. package/skills/qa-selenium-java-writer/references/config.md +0 -143
  198. package/skills/qa-selenium-java-writer/references/patterns.md +0 -170
  199. package/skills/qa-selenium-py-writer/SKILL.md +0 -150
  200. package/skills/qa-selenium-py-writer/references/best-practices.md +0 -175
  201. package/skills/qa-selenium-py-writer/references/config.md +0 -224
  202. package/skills/qa-selenium-py-writer/references/patterns.md +0 -255
  203. package/skills/qa-shortcut-integration/SKILL.md +0 -143
  204. package/skills/qa-shortcut-integration/references/api-patterns.md +0 -126
  205. package/skills/qa-shortcut-integration/references/field-mapping.md +0 -66
  206. package/skills/qa-spec-auditor/SKILL.md +0 -162
  207. package/skills/qa-spec-auditor/references/audit-checklist.md +0 -144
  208. package/skills/qa-spec-auditor/references/drift-patterns.md +0 -207
  209. package/skills/qa-spec-writer/SKILL.md +0 -143
  210. package/skills/qa-spec-writer/references/gherkin-guide.md +0 -253
  211. package/skills/qa-spec-writer/references/specification-patterns.md +0 -274
  212. package/skills/qa-spring-test-writer/SKILL.md +0 -170
  213. package/skills/qa-spring-test-writer/references/best-practices.md +0 -57
  214. package/skills/qa-spring-test-writer/references/config.md +0 -179
  215. package/skills/qa-spring-test-writer/references/patterns.md +0 -235
  216. package/skills/qa-supertest-writer/SKILL.md +0 -150
  217. package/skills/qa-supertest-writer/references/assertions.md +0 -192
  218. package/skills/qa-supertest-writer/references/best-practices.md +0 -102
  219. package/skills/qa-supertest-writer/references/config.md +0 -166
  220. package/skills/qa-supertest-writer/references/patterns.md +0 -242
  221. package/skills/qa-task-creator/SKILL.md +0 -142
  222. package/skills/qa-task-creator/references/linking-patterns.md +0 -127
  223. package/skills/qa-task-creator/references/task-types.md +0 -169
  224. package/skills/qa-task-creator/templates/task-template.md +0 -24
  225. package/skills/qa-test-doc-compiler/SKILL.md +0 -114
  226. package/skills/qa-test-doc-compiler/references/agile-tailoring.md +0 -220
  227. package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +0 -302
  228. package/skills/qa-test-healer/SKILL.md +0 -101
  229. package/skills/qa-test-healer/references/diagnosis-patterns.md +0 -142
  230. package/skills/qa-test-healer/references/fix-strategies.md +0 -177
  231. package/skills/qa-test-reporter/SKILL.md +0 -130
  232. package/skills/qa-test-reporter/references/best-practices.md +0 -162
  233. package/skills/qa-test-reporter/references/iso-29119-reports.md +0 -236
  234. package/skills/qa-test-reporter/references/report-formats.md +0 -287
  235. package/skills/qa-test-reviewer/SKILL.md +0 -142
  236. package/skills/qa-test-reviewer/references/anti-patterns.md +0 -268
  237. package/skills/qa-test-reviewer/references/review-checklist.md +0 -93
  238. package/skills/qa-test-strategy/SKILL.md +0 -133
  239. package/skills/qa-test-strategy/references/entry-exit-criteria.md +0 -176
  240. package/skills/qa-test-strategy/references/risk-matrix.md +0 -102
  241. package/skills/qa-test-strategy/references/testing-types.md +0 -143
  242. package/skills/qa-testcase-from-docs/SKILL.md +0 -161
  243. package/skills/qa-testcase-from-docs/references/test-case-format.md +0 -196
  244. package/skills/qa-testcase-from-docs/references/test-design-techniques.md +0 -126
  245. package/skills/qa-testcase-from-docs/templates/test-case-template.md +0 -31
  246. package/skills/qa-testcase-from-ui/SKILL.md +0 -109
  247. package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +0 -126
  248. package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +0 -146
  249. package/skills/qa-testcase-from-ui/templates/test-case-template.md +0 -31
  250. package/skills/qa-visual-regression-writer/SKILL.md +0 -175
  251. package/skills/qa-visual-regression-writer/references/best-practices.md +0 -154
  252. package/skills/qa-visual-regression-writer/references/config.md +0 -220
  253. package/skills/qa-visual-regression-writer/references/patterns.md +0 -213
  254. package/skills/qa-vitest-writer/SKILL.md +0 -141
  255. package/skills/qa-vitest-writer/references/assertions.md +0 -105
  256. package/skills/qa-vitest-writer/references/best-practices.md +0 -62
  257. package/skills/qa-vitest-writer/references/config.md +0 -127
  258. package/skills/qa-vitest-writer/references/patterns.md +0 -141
  259. package/skills/qa-webdriverio-writer/SKILL.md +0 -145
  260. package/skills/qa-webdriverio-writer/references/best-practices.md +0 -176
  261. package/skills/qa-webdriverio-writer/references/config.md +0 -240
  262. package/skills/qa-webdriverio-writer/references/patterns.md +0 -269
@@ -1,157 +0,0 @@
1
- # JMeter Best Practices
2
-
3
- ## Non-GUI Mode
4
-
5
- | Do | Don't |
6
- |----|-------|
7
- | Always use `-n` for load tests | Run load tests in GUI mode |
8
- | Disable View Results Tree in load plans | Keep View Results Tree enabled for 1000+ threads |
9
- | Use Aggregate Report, Summary Report | Use listeners that store full response data |
10
- | Set `jmeter.save.saveservice.response_data=false` | Save response data in JTL for load runs |
11
-
12
- **Why:** GUI mode consumes significant memory and is not designed for high load. View Results Tree stores every response and causes OOM.
13
-
14
- ---
15
-
16
- ## Parameterization
17
-
18
- ### CSV Data Set Config
19
-
20
- | Setting | Recommendation |
21
- |--------|----------------|
22
- | **Sharing mode** | `All threads` for shared data; `Current thread` for unique per user |
23
- | **Delimiter** | `,` (comma) or `\t` (tab) |
24
- | **Recycle on EOF** | `true` for repeated use; `false` to stop when exhausted |
25
- | **Stop thread on EOF** | `true` when recycle=false and you want graceful stop |
26
- | **File path** | Use `${__P(csvPath, default.csv)}` for CI flexibility |
27
-
28
- ### Unique Data
29
-
30
- - Use enough rows for `threads × loops` when recycle=false
31
- - For user simulation: unique emails, usernames per row
32
- - Consider UUID or timestamp in JSR223 for dynamic uniqueness
33
-
34
- ### Avoid
35
-
36
- - Hardcoded URLs, credentials, IDs
37
- - Same data for all users when testing concurrency (e.g., same login)
38
-
39
- ---
40
-
41
- ## Correlation
42
-
43
- ### Order of Execution
44
-
45
- 1. **Sampler** (e.g., Login) → **PostProcessor** (extract token) → **Next Sampler** (use `${token}`)
46
- 2. Extractors must be children of the sampler whose response they parse
47
- 3. Use **JSON Extractor** or **Regular Expression Extractor** as PostProcessor
48
-
49
- ### Variable Scope
50
-
51
- - `vars` (JMeterVariables): per-thread, cleared each iteration
52
- - `props` (JMeterProperties): global, shared across threads
53
- - Use `vars.put("name", value)` in JSR223; `${name}` in samplers
54
-
55
- ### Regex Tips
56
-
57
- - Prefer non-greedy: `"token":"([^"]+)"` over `"token":"(.+)"`
58
- - Use `$1$` in Template for first capture group
59
- - Test regex in View Results Tree (debug only) or regex101.com
60
-
61
- ### JSON Extraction
62
-
63
- - Use **JSON Extractor** or **JSR223 PostProcessor** with JsonSlurper
64
- - JSONPath: `$.data.token`, `$.items[0].id`
65
-
66
- ---
67
-
68
- ## Result Analysis
69
-
70
- ### JTL Columns
71
-
72
- | Column | Purpose |
73
- |--------|---------|
74
- | `timeStamp` | Request time |
75
- | `elapsed` | Total time (ms) |
76
- | `label` | Sampler name |
77
- | `responseCode` | HTTP status |
78
- | `success` | true/false |
79
- | `bytes` | Response size |
80
- | `latency` | Time to first byte |
81
- | `connect` | Connection time |
82
-
83
- ### HTML Report
84
-
85
- - **Dashboard**: Overview, APDEX, response times, throughput
86
- - **APDEX**: Satisfied (fast), Tolerated (ok), Frustrated (slow)
87
- - **Throughput**: Requests per second
88
- - **Response Times**: Percentiles (90, 95, 99)
89
-
90
- ### Interpreting Results
91
-
92
- | Metric | Good | Investigate |
93
- |--------|------|-------------|
94
- | Error rate | < 1% | > 1% |
95
- | p95 latency | Within SLA | Exceeds SLA |
96
- | Throughput | Meets target | Below target |
97
- | Connect time | Low, stable | High or spiking |
98
-
99
- ---
100
-
101
- ## Test Design
102
-
103
- ### Ramp-Up
104
-
105
- - **Rule of thumb**: Ramp-up = 10–20% of total test duration
106
- - Too short: artificial spike, connection storms
107
- - Too long: wastes time before steady state
108
-
109
- ### Think Time
110
-
111
- - Add **Constant Timer** or **Uniform Random Timer** between requests
112
- - Typical: 1–3 seconds for web; 0–500 ms for API
113
- - Omit for throughput-only tests
114
-
115
- ### Assertions
116
-
117
- - Use **Response Assertion** for status codes (200, 201)
118
- - Use **Duration Assertion** for SLA (e.g., 2000 ms)
119
- - Use **JSON Assertion** for API contract validation
120
- - Avoid overly strict assertions that fail on minor variations
121
-
122
- ### Naming
123
-
124
- - Use descriptive **labels** for samplers (e.g., `GET /users`, `POST /login`)
125
- - Labels appear in reports and JTL; avoid generic names like "HTTP Request"
126
-
127
- ---
128
-
129
- ## Performance of JMeter Itself
130
-
131
- | Tweak | Purpose |
132
- |-------|---------|
133
- | Increase JVM heap | `-Xmx4g` for 5k+ threads |
134
- | Disable unnecessary listeners | Reduce memory and I/O |
135
- | Use `jmeter.save.saveservice.*` to minimize JTL | Smaller files, faster writes |
136
- | Run workers on separate machines | Distribute load, avoid single-node bottleneck |
137
- | Use latest JMeter | Bug fixes, performance improvements |
138
-
139
- ---
140
-
141
- ## Security
142
-
143
- - Never commit credentials; use `${__P()}` or environment variables
144
- - Use `user.properties` (gitignored) for local overrides
145
- - In CI: use secrets for API keys, tokens
146
- - Test against staging/QA, not production, unless explicitly approved
147
-
148
- ---
149
-
150
- ## Integration with QA Skills
151
-
152
- | Skill | Use Case |
153
- |-------|----------|
154
- | **qa-plan-creator** | Performance plan → thread groups, duration, load profile |
155
- | **qa-nfr-analyst** | NFR specs → SLA assertions, duration thresholds |
156
- | **qa-api-contract-curator** | OpenAPI → HTTP samplers, JSON assertions |
157
- | **qa-requirements-generator** | Requirements → test scenarios, endpoints |
@@ -1,204 +0,0 @@
1
- # JMeter Configuration
2
-
3
- ## CLI Mode (Non-GUI)
4
-
5
- ### Basic Run
6
-
7
- ```bash
8
- jmeter -n -t test.jmx -l results.jtl
9
- ```
10
-
11
- | Option | Purpose |
12
- |--------|---------|
13
- | `-n` | Non-GUI mode (required for CI/headless) |
14
- | `-t test.jmx` | Test plan file |
15
- | `-l results.jtl` | Results file (JTL/CSV) |
16
- | `-j jmeter.log` | Log file |
17
- | `-q user.properties` | User properties file |
18
-
19
- ### HTML Report Generation
20
-
21
- ```bash
22
- jmeter -n -t test.jmx -l results.jtl -e -o report/
23
- ```
24
-
25
- | Option | Purpose |
26
- |--------|---------|
27
- | `-e` | Generate HTML report after run |
28
- | `-o report/` | Output directory for HTML report |
29
-
30
- Report includes: dashboard, APDEX, response times, throughput, errors.
31
-
32
- ### Property Overrides
33
-
34
- ```bash
35
- jmeter -n -t test.jmx -l results.jtl -Jhost=api.staging.example.com -Jusers=50
36
- ```
37
-
38
- | Option | Purpose |
39
- |--------|---------|
40
- | `-Jprop=value` | Set JMeter property (single) |
41
- | `-Gprop=value` | Global property (distributed mode) |
42
- | `-q user.properties` | Load from file |
43
-
44
- Use in test plan: `${__P(host, default)}`, `${__P(users, 10)}`.
45
-
46
- ---
47
-
48
- ## Key Properties
49
-
50
- ### JTL Output Format
51
-
52
- ```properties
53
- # user.properties or -J
54
- jmeter.save.saveservice.output_format=csv
55
- jmeter.save.saveservice.response_data=false
56
- jmeter.save.saveservice.samplerData=false
57
- jmeter.save.saveservice.requestHeaders=false
58
- jmeter.save.saveservice.responseHeaders=false
59
- jmeter.save.saveservice.url=false
60
- jmeter.save.saveservice.filename=false
61
- jmeter.save.saveservice.hostname=false
62
- jmeter.save.saveservice.thread_counts=false
63
- jmeter.save.saveservice.latency=true
64
- jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss
65
- jmeter.save.saveservice.print_field_names=true
66
- ```
67
-
68
- Minimal JTL for performance: `timeStamp`, `elapsed`, `label`, `responseCode`, `success`, `bytes`, `latency`.
69
-
70
- ### HTML Report
71
-
72
- ```properties
73
- jmeter.reportgenerator.overall_granularity=60000
74
- jmeter.reportgenerator.apdex_satisfied_threshold=500
75
- jmeter.reportgenerator.apdex_tolerated_threshold=1500
76
- ```
77
-
78
- ### JVM Heap
79
-
80
- ```bash
81
- # Set in jmeter or jmeter.bat
82
- HEAP="-Xms1g -Xmx4g -XX:MaxMetaspaceSize=256m"
83
- ```
84
-
85
- Increase for high thread counts (e.g., 10k+ threads).
86
-
87
- ---
88
-
89
- ## Plugins
90
-
91
- ### JMeter Plugins Manager
92
-
93
- Install via Plugins Manager (Options → Plugins Manager):
94
-
95
- | Plugin | Purpose |
96
- |--------|---------|
97
- | **Custom Thread Groups** | Ultimate Thread Group, Stepping Thread Group |
98
- | **3 Basic Graphs** | Response Times, Throughput, Active Threads |
99
- | **PerfMon** | Server metrics (CPU, memory) |
100
- | **Dummy Sampler** | Simulate responses for debugging |
101
- | **JSON Path Assertion** | JSONPath assertions (built-in 5.2+) |
102
-
103
- ### Maven/Gradle
104
-
105
- ```xml
106
- <!-- For programmatic JMeter execution -->
107
- <dependency>
108
- <groupId>org.apache.jmeter</groupId>
109
- <artifactId>ApacheJMeter_core</artifactId>
110
- <version>5.6.3</version>
111
- </dependency>
112
- ```
113
-
114
- ---
115
-
116
- ## Distributed Testing
117
-
118
- ### Architecture
119
-
120
- - **Controller**: Runs GUI/non-GUI, orchestrates workers
121
- - **Workers**: Run actual load, send results to controller
122
-
123
- ### Setup
124
-
125
- 1. **Same JMeter version** on all nodes
126
- 2. **Same plugins** on all nodes
127
- 3. **RMI ports**: 1099 (default), 4000 (server)
128
- 4. **Firewall**: Allow controller ↔ workers
129
-
130
- ### Start Workers
131
-
132
- ```bash
133
- # On each worker machine
134
- jmeter-server
135
- # or
136
- jmeter -s -Jserver.rmi.localport=50000
137
- ```
138
-
139
- ### Run from Controller
140
-
141
- ```bash
142
- jmeter -n -t test.jmx -l results.jtl -R worker1,worker2,worker3
143
- # or
144
- jmeter -n -t test.jmx -l results.jtl -Gremote_hosts=worker1,worker2
145
- ```
146
-
147
- | Option | Purpose |
148
- |--------|---------|
149
- | `-R host1,host2` | Remote hosts (workers) |
150
- | `-Gprop=value` | Global property for all workers |
151
- | `-Jserver.rmi.ssl.disable=true` | Disable RMI SSL if needed |
152
-
153
- ### Remote Hosts Property
154
-
155
- ```properties
156
- # jmeter.properties
157
- remote_hosts=127.0.0.1:1099,worker2:1099
158
- ```
159
-
160
- ---
161
-
162
- ## Directory Layout
163
-
164
- ```
165
- project/
166
- jmeter/
167
- plans/
168
- api-load.jmx
169
- api-stress.jmx
170
- data/
171
- users.csv
172
- results/ # JTL output
173
- report/ # HTML report
174
- user.properties # Overrides
175
- jmeter.log
176
- ```
177
-
178
- ---
179
-
180
- ## CI Integration (GitHub Actions)
181
-
182
- ```yaml
183
- - name: Run JMeter
184
- run: |
185
- jmeter -n -t jmeter/plans/api-load.jmx \
186
- -l jmeter/results/results.jtl \
187
- -e -o jmeter/report \
188
- -Jhost=${{ env.API_HOST }} \
189
- -Jusers=${{ env.LOAD_USERS }}
190
- ```
191
-
192
- ---
193
-
194
- ## User Defined Variables
195
-
196
- Define at Test Plan or Thread Group level:
197
-
198
- | Variable | Value | Usage |
199
- |----------|-------|-------|
200
- | `host` | api.example.com | `${host}` |
201
- | `basePath` | /v1 | `${basePath}` |
202
- | `protocol` | https | `${protocol}` |
203
-
204
- Prefer `${__P(var, default)}` for CI overrides.
@@ -1,242 +0,0 @@
1
- # JMeter Test Plan Patterns
2
-
3
- ## Thread Groups
4
-
5
- ### Basic Thread Group
6
-
7
- | Property | Purpose | Example |
8
- |----------|---------|---------|
9
- | `num_threads` | Number of virtual users | 10, 100, 1000 |
10
- | `ramp_time` | Ramp-up period (seconds) | 60, 300 |
11
- | `loops` | Iterations per user (-1 = forever) | 1, 10, -1 |
12
- | `duration` | Test duration (seconds) | Use with loops=-1 |
13
- | `scheduler` | Enable scheduler | true/false |
14
- | `delay` | Startup delay (seconds) | 0 |
15
- | `on_sample_error` | Action on failure | continue, stopthread, stoppage, stopnow |
16
-
17
- ### Load Profile Mapping
18
-
19
- | Test Type | Threads | Ramp-up | Loops/Duration |
20
- |-----------|---------|---------|---------------|
21
- | Smoke | 1–5 | 10s | 1–5 |
22
- | Load | Target VUs | 10–20% of duration | Duration-based |
23
- | Stress | Ramp to breaking point | Gradual | Until failure |
24
- | Soak | Steady VUs | Ramp-up | Hours |
25
- | Spike | Sudden surge | Very short | Short burst |
26
-
27
- ### Ultimate Thread Group (Plugin)
28
-
29
- For complex load profiles (stages), use Ultimate Thread Group or Stepping Thread Group plugins when available.
30
-
31
- ---
32
-
33
- ## Samplers
34
-
35
- ### HTTP Request Sampler
36
-
37
- ```xml
38
- <HTTPSamplerProxy>
39
- <stringProp name="HTTPSampler.domain">${__P(host,api.example.com)}</stringProp>
40
- <stringProp name="HTTPSampler.path">/users</stringProp>
41
- <stringProp name="HTTPSampler.method">GET</stringProp>
42
- <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
43
- <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
44
- <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
45
- <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
46
- <elementProp name="HTTPsampler.Arguments">
47
- <collectionProp name="Arguments.arguments">
48
- <elementProp name="" elementType="HTTPArgument">
49
- <boolProp name="HTTPArgument.always_encode">false</boolProp>
50
- <stringProp name="Argument.value">{"email":"${email}"}</stringProp>
51
- <stringProp name="Argument.metadata">=</stringProp>
52
- </elementProp>
53
- </collectionProp>
54
- </elementProp>
55
- </HTTPSamplerProxy>
56
- ```
57
-
58
- | Property | Purpose |
59
- |----------|---------|
60
- | `HTTPSampler.domain` | Host (or use full URL in path) |
61
- | `HTTPSampler.path` | Path + query |
62
- | `HTTPSampler.method` | GET, POST, PUT, DELETE, PATCH |
63
- | `HTTPSampler.protocol` | http or https |
64
- | `HTTPSampler.port` | Port (empty = default) |
65
- | `HTTPsampler.Arguments` | Request body (POST/PUT) |
66
- | `HTTPSampler.contentEncoding` | UTF-8 |
67
-
68
- ### HTTP Header Manager
69
-
70
- Add as child of sampler or test plan:
71
-
72
- ```xml
73
- <HeaderManager>
74
- <collectionProp name="HeaderManager.headers">
75
- <elementProp name="Content-Type" elementType="Header">
76
- <stringProp name="Header.name">Content-Type</stringProp>
77
- <stringProp name="Header.value">application/json</stringProp>
78
- </elementProp>
79
- <elementProp name="Authorization" elementType="Header">
80
- <stringProp name="Header.name">Authorization</stringProp>
81
- <stringProp name="Header.value">Bearer ${token}</stringProp>
82
- </elementProp>
83
- </collectionProp>
84
- </HeaderManager>
85
- ```
86
-
87
- ### JDBC Request Sampler
88
-
89
- For database load testing:
90
-
91
- | Property | Purpose |
92
- |----------|---------|
93
- | `dataSource` | JDBC connection pool variable |
94
- | `queryType` | Select, Update, Callable, Prepared |
95
- | `query` | SQL statement |
96
-
97
- ### JMS Sampler
98
-
99
- For messaging (JMS Point-to-Point, Pub/Sub) when testing message brokers.
100
-
101
- ---
102
-
103
- ## Assertions
104
-
105
- ### Response Assertion
106
-
107
- | Field | Purpose |
108
- |-------|---------|
109
- | `Assertion.test_field` | Response Code, Response Message, Response Headers, Response Body |
110
- | `Assertion.pattern` | String or regex to match |
111
- | `Assertion.test_type` | Contains, Matches, Equals, Substring |
112
- | `Assertion.assume_success` | Treat as success if not applied |
113
-
114
- Common patterns:
115
- - Response Code: `200`, `201`, `2\d{2}`
116
- - Response Body: `"success":\s*true`, `"id":\s*\d+`
117
-
118
- ### Duration Assertion
119
-
120
- | Property | Purpose |
121
- |----------|---------|
122
- | `DurationAssertion.duration` | Max allowed response time (ms) |
123
-
124
- Use for SLA validation (e.g., 2000 ms for p95).
125
-
126
- ### Size Assertion
127
-
128
- | Property | Purpose |
129
- |----------|---------|
130
- | `SizeAssertion.size` | Expected size in bytes |
131
- | `SizeAssertion.assume_success` | Treat as success if not applied |
132
-
133
- ### JSON Assertion (JMeter 5.2+)
134
-
135
- | Property | Purpose |
136
- |----------|---------|
137
- | `JSON_PATH` | JSONPath expression (e.g., `$.data.id`) |
138
- | `EXPECTED_VALUE` | Expected value or leave empty for existence |
139
- | `ASSERT_JSON_PATH_EXISTS` | true/false |
140
-
141
- ---
142
-
143
- ## Extractors
144
-
145
- ### Regular Expression Extractor
146
-
147
- | Property | Purpose |
148
- |----------|---------|
149
- | `Refname` | Variable name (e.g., `token`) |
150
- | `Regex` | Regex with capture group, e.g., `"token":"([^"]+)"` |
151
- | `Template` | `$1$` for first group |
152
- | `Match Nr` | 1 = first, -1 = random, 0 = all |
153
- | `Default` | Default value if no match |
154
-
155
- ### JSON Extractor
156
-
157
- | Property | Purpose |
158
- |----------|---------|
159
- | `JSON_PATH` | JSONPath, e.g., `$.data.token` |
160
- | `VAR` | Variable name |
161
- | `DEFAULT` | Default if not found |
162
-
163
- ### Boundary Extractor
164
-
165
- For simple left/right boundary extraction when regex is overkill.
166
-
167
- ---
168
-
169
- ## Timers
170
-
171
- ### Constant Timer
172
-
173
- | Property | Purpose |
174
- |----------|---------|
175
- | `ConstantTimer.delay` | Delay in ms (e.g., 1000 for 1s think time) |
176
-
177
- ### Uniform Random Timer
178
-
179
- | Property | Purpose |
180
- |----------|---------|
181
- | `ConstantTimer.delay` | Minimum delay (ms) |
182
- | `RandomTimer.range` | Additional random range (ms) |
183
-
184
- Total delay = delay + random(0, range).
185
-
186
- ### Gaussian Random Timer
187
-
188
- Similar to Uniform but with Gaussian distribution for more realistic think time.
189
-
190
- ---
191
-
192
- ## Controllers
193
-
194
- ### Loop Controller
195
-
196
- | Property | Purpose |
197
- |----------|---------|
198
- | `LoopController.loops` | Number of iterations |
199
-
200
- ### If Controller
201
-
202
- | Property | Purpose |
203
- |----------|---------|
204
- | `IfController.condition` | JavaScript or `${__jexl3(...)}` expression |
205
-
206
- Example: `${__jexl3(${status} == 200)}`
207
-
208
- ### Once Only Controller
209
-
210
- Execute child elements only on first iteration (e.g., login once).
211
-
212
- ### Transaction Controller
213
-
214
- Group samplers into a transaction for aggregate timing.
215
-
216
- ---
217
-
218
- ## Pre/Post Processors
219
-
220
- ### JSR223 PreProcessor (Groovy)
221
-
222
- ```groovy
223
- // Set variable from previous response
224
- vars.put("timestamp", String.valueOf(System.currentTimeMillis()));
225
-
226
- // Correlation: extract from prev sampler (use PostProcessor on prior sampler instead)
227
- // vars.put("token", prev.getResponseDataAsString());
228
- ```
229
-
230
- Prefer Groovy over BeanShell (faster, maintained).
231
-
232
- ### JSR223 PostProcessor
233
-
234
- ```groovy
235
- import groovy.json.JsonSlurper
236
- def json = new JsonSlurper().parseText(prev.getResponseDataAsString())
237
- vars.put("userId", json.data.id.toString())
238
- ```
239
-
240
- ### User Parameters
241
-
242
- For per-iteration parameter overrides without CSV.