// Tools

Gatling

An async, JVM-based engine with an expressive DSL and the best per-node HTTP throughput of the mainstream open-source tools.

Where it shines

Gatling's non-blocking architecture drives very high request rates from modest hardware — routinely several times JMeter's per-node throughput for plain HTTP workloads. The DSL (Scala originally; Java and Kotlin now first-class) reads as a specification of user behaviour, and the standard HTML report is the strongest out-of-the-box reporting among free tools, with response-time distributions and percentile charts that need no post-processing.

// Java DSL — open-model injection profile
ScenarioBuilder browse = scenario("Browse")
  .exec(http("catalogue").get("/catalogue")
    .check(status().is(200), jmesPath("items[0].id").exists()))
  .pause(Duration.ofSeconds(8), Duration.ofSeconds(20));

setUp(
  browse.injectOpen(
    rampUsersPerSec(5).to(420).during(Duration.ofMinutes(20)),
    constantUsersPerSec(420).during(Duration.ofMinutes(60))
  )
).protocols(http.baseUrl("https://api.example.com"))
 .assertions(
   global().responseTime().percentile(95.0).lt(500),
   global().failedRequests().percent().lt(0.1)
 );

Limitations to plan around

Protocol coverage is narrower than JMeter (HTTP, WebSockets, JMS, MQTT; little beyond); teams without JVM experience face a steeper start than with k6's JavaScript; and the free edition's distributed-testing story requires assembly (the paid platform handles it natively).

Our Gatling practice

Java DSL by default for maintainability by non-Scala teams; injection profiles defined per scenario with explicit open/closed model choice; simulation configs externalised so the same codebase runs smoke, load and stress variants; CI integration via the Maven/Gradle plugins with assertion-based gating.