gatling-convert-from-jmeter — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited gatling-convert-from-jmeter (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
.jmx extensionEither find an existing Gatling project or initialize a new Gatling project:
#### ThreadGroup
Each ThreadGroup converts to a scenario.
IF serialize_threadgroups true:
andThenELSE:
setUp block#### Resource files
Files referenced in elements such as:
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:
shareMode.group:ELSE:
#### 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 if 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:
jmesPath("foo[0]")IF matchNumber = -1 (random):
jmesPath("foo").ofList(), then pick a random element in a subsequent exec blockIF matchNumber > 1:
jmesPath("foo[N-1]") (0-based index)#### Functions
Some functions have variants that save 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
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: toUpperCase or toLowerCase with Locale.ROOT or capitalizedigest: java.security.MessageDigesturldecode: java.net.URLDecoder.decodeurlencode: java.net.URLEncoder.encodeUUID: java.util.UUID.randomUUIDImport org.unbescape:unbescape for the following escaping functions:
escapeHtml: HtmlEscape.escapeHtml5escapeXml: XmlEscape.escapeXml10unescape: JavaEscape.unescapeJavaunescapeHtml: HtmlEscape.unescapeHtmlUse the build-tool skill if available.
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:
rampUsers to atOnceUsers~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.