.cursor/skills/qa-jmeter-writer/SKILL.md
Generate JMeter performance test plans in XML/JMX format with thread groups, samplers, listeners, assertions, and CI-ready configuration.
npx skillsauth add AZANIR/qa-skills qa-jmeter-writerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
| Feature | Description | |---------|-------------| | Thread Groups | Users, ramp-up, loops, duration for load modeling | | HTTP Request Sampler | URL, method, body, headers, path | | JDBC/JMS Samplers | Database and messaging protocol support | | Listeners | Aggregate Report, Summary Report, Graph Results, View Results Tree | | Assertions | Response Assertion, Duration Assertion, Size Assertion, JSON Assertion | | CSV Data Set Config | Parameterization from CSV files | | Extractors | Regular Expression Extractor, JSON Extractor | | Timers | Constant, Uniform Random, Gaussian for think time | | Pre/Post Processors | JSR223 (Groovy), BeanShell for correlation |
| Pattern | Usage |
|---------|-------|
| Thread Group | num_threads, ramp_time, loops, duration for load modeling |
| HTTP Request | Domain, path, method, body, headers |
| Response Assertion | Status code, response text, response code |
| Duration Assertion | Max response time (ms) |
| JSON Assertion | JSONPath, expected value |
| CSV Data Set Config | Filename, variable names, delimiter |
| Regular Expression Extractor | Regex, template, match number, variable |
| JSR223 PreProcessor | Groovy script for correlation |
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Load Users" enabled="true">
<stringProp name="ThreadGroup.num_threads">50</stringProp>
<stringProp name="ThreadGroup.ramp_time">60</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController">
<stringProp name="LoopController.loops">-1</stringProp>
<stringProp name="ThreadGroup.duration">300</stringProp>
</elementProp>
</ThreadGroup>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="GET /api/users" enabled="true">
<stringProp name="HTTPSampler.domain">api.example.com</stringProp>
<stringProp name="HTTPSampler.path">/api/users</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
</HTTPSamplerProxy>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Status 200" enabled="true">
<collectionProp name="Assertion.test_strings">
<stringProp name="49586">200</stringProp>
</collectionProp>
<stringProp name="Assertion.custom_message"></stringProp>
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
</ResponseAssertion>
See references/patterns.md for thread groups, samplers, assertions, extractors, timers, controllers.
.jmx files in tests/, performance/, or jmeter/ per project conventionjmeter -n -t test.jmx -l results.jtl -e -o report/-n), JTL results (-l), HTML report (-e -o)| Option | Description |
|--------|-------------|
| -n | Non-GUI mode (headless) |
| -t test.jmx | Test plan file |
| -l results.jtl | Results file (JTL/CSV) |
| -e | Generate HTML report after run |
| -o report/ | Output directory for HTML report |
| -Jprop=value | Override JMeter properties |
Can do (autonomous):
Cannot do (requires confirmation):
Will not do (out of scope):
jmeter -n -t test.jmx)references/patterns.md — Thread groups, samplers, assertions, extractors, timers, controllersreferences/config.md — CLI mode, properties, plugins, distributed testingreferences/best-practices.md — Non-GUI mode, parameterization, correlation, result analysis${__P()} or CSV for credentials| Symptom | Likely Cause | Fix |
|---------|--------------|-----|
| OutOfMemoryError in JMeter | Too many threads or listeners | Reduce threads; remove View Results Tree; increase JVM heap (-Xmx) |
| Assertions fail in CI | Different baseline or env | Align assertion thresholds; use ${__P()} for env-specific values |
| High error rate | Timeouts, 5xx, or wrong assertions | Increase timeout; fix assertion logic; verify endpoint |
| CSV not found | Relative path | Use absolute path or ${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)} |
| Correlation fails | Extractor order or regex | Ensure extractor runs before dependent sampler; verify regex |
| JMX invalid XML | Malformed elements | Validate XML; ensure proper closing tags; check JMeter version compatibility |
| Slow HTML report | Large JTL file | Use Aggregate Report listener; reduce sample logging; filter by label |
tools
Analyze OpenAPI/Swagger spec (JSON or YAML) against existing test files and generate an HTML coverage report with QA automation tasks. Use when user provides an OpenAPI spec file and wants to know test coverage status.
testing
Universal QA plan generator supporting 10 plan types including test plans, sprint plans, regression plans, release plans, UAT plans, performance plans, migration plans, onboarding plans, and custom plans.
development
Generate consumer-driven contract tests using Pact for JavaScript and Python to verify microservice API compatibility between consumer and provider.
development
Master skill coordinating all QA skills through pipeline modes (full-cycle, docs-only, testcases-only, write-tests, report), formalized handoff chains, scheduler rules, and framework/language selection based on project context.