Install
$ agentstack add skill-gatling-gatling-ai-extensions-gatling-convert-from-jmeter ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Convert a JMeter test plan to a Gatling simulation
Instructions
Step 1: Find input JMeter test plan
- Search for files with
.jmxextension - If several files found, ask user to specify one
Step 2: Specify output
Either find an existing Gatling project or initialize a new Gatling project:
- Try to find an existing project with the /Gatling:gatling-detect-existing-project skill
- If no existing project is found, offer to create a new one with the /Gatling:gatling-bootstrap-project skill
Step 3: Conversion
- Convert the JMeter test to a Gatling test written in the specified language.
- Write the output to the appropriate source directory of the Gatling project.
ThreadGroup
Each ThreadGroup converts to a scenario.
IF serialize_threadgroups true:
- Chain the scenarios with
andThen
ELSE:
- Just list the scenarios in the
setUpblock
Resource files
Files referenced in elements such as:
- CSVDataSet
- HTTPFileArgs
should be copied to the resources directory in the Gatling project.
Redirects
| JMeter | Gatling | |----------------------------|-----------------------------| | follow_redirects = true | default setting, do nothing | | follow_redirects = false | disableFollowRedirect |
CSVDataSet
CSVDataSet converts to a csv feeder.
IF there are several instances of CSVDataSet referencing the same file name:
- IF
shareMode.group: - Create a new csv feeder for each scenario
ELSE:
- Create a single feeder and use it in each scenario
JMESPathExtractor
The jmesPath Gatling check extracts Strings, meaning that non String values get serialized back into JSON. Using findAll with jmesPath is a mistake, but you can tell Gatling the expected type with an extra step. Note that the check will then fail is the actual value doesn’t match the expected type.
jmesPath("foo").ofString(),
jmesPath("foo").ofBoolean(),
jmesPath("foo").ofInt(),
jmesPath("foo").ofLong(),
jmesPath("foo").ofDouble(),
// JSON array
jmesPath("foo").ofList(),
// JSON object
jmesPath("foo").ofMap(),
// anything
jmesPath("foo").ofObject()
)
matchNumber
matchNumber applies when the JMESPath expression returns an array and selects which element to use (1-based in JMeter).
IF matchNumber = 1:
- Use a JMESPath expression that selects the first element directly, e.g.
jmesPath("foo[0]")
IF matchNumber = -1 (random):
- Extract the full array with
jmesPath("foo").ofList(), then pick a random element in a subsequentexecblock
IF matchNumber > 1:
- Use a JMESPath expression that indexes into the array, e.g.
jmesPath("foo[N-1]")(0-based index)
Functions
Some functions have variants that saves the result to a variable (e.g.: __Random(0,10,myVar)) but Gatling Expression Language cannot save variables as a side effect.
IF a variable needs to be saved inside the function AND the function is used within an Expression Language
- Move the code to an exec block that allows saving variables
When parsing dates, use java.time.format.DateTimeFormatter.ofPattern with system default zone and store it outside a function to avoid creation cost overhead.
For regular expression, use java.util.regex.Pattern.compile and store it outside a function to avoid creation cost overhead.
Convert these functions to what JMeter uses under the hood:
changeCase:toUpperCaseortoLowerCasewithLocale.ROOTorcapitalizedigest:java.security.MessageDigesturldecode:java.net.URLDecoder.decodeurlencode:java.net.URLEncoder.encodeUUID:java.util.UUID.randomUUID
Import org.unbescape:unbescape for the following escaping functions:
escapeHtml:HtmlEscape.escapeHtml5escapeXml:XmlEscape.escapeXml10unescape:JavaEscape.unescapeJavaunescapeHtml:HtmlEscape.unescapeHtml
Step 4: Verify the code compiles
Use the build-tool skill if available.
Step 5: Post conversion
After the conversion in Step 3, prompt the user for possible enhancements that are more idiomatic to Gatling.
IF ThreadGroup.ramp_time is 0 or 1:
- Suggest converting
rampUserstoatOnceUsers
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: gatling
- Source: gatling/gatling-ai-extensions
- License: Apache-2.0
- Homepage: https://gatling.io
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.