Skip to content

01 — Project Setup

Prerequisites

  • JDK 17+
  • Maven 3.9+ or Gradle 8+
  • (Optional) IntelliJ IDEA with the Gatling plugin

Maven setup

pom.xml (Java)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>gatling-demo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <java.version>17</java.version>
    <gatling.version>3.15.0</gatling.version>
    <gatling-maven-plugin.version>4.21.5</gatling-maven-plugin.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>io.gatling.highcharts</groupId>
      <artifactId>gatling-charts-highcharts</artifactId>
      <version>${gatling.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>io.gatling</groupId>
        <artifactId>gatling-maven-plugin</artifactId>
        <version>${gatling-maven-plugin.version}</version>
        <configuration>
          <!-- optional: pin a single simulation class -->
          <!-- <simulationClass>com.example.BasicSimulation</simulationClass> -->
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

pom.xml (Kotlin)

Add the Kotlin compiler plugin and use the same Gatling dependency:

<dependencies>
  <dependency>
    <groupId>io.gatling.highcharts</groupId>
    <artifactId>gatling-charts-highcharts</artifactId>
    <version>${gatling.version}</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-stdlib</artifactId>
    <version>2.0.21</version>
  </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-maven-plugin</artifactId>
      <version>2.0.21</version>
      <executions>
        <execution>
          <id>compile</id>
          <goals><goal>compile</goal></goals>
        </execution>
        <execution>
          <id>test-compile</id>
          <goals><goal>test-compile</goal></goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>io.gatling</groupId>
      <artifactId>gatling-maven-plugin</artifactId>
      <version>${gatling-maven-plugin.version}</version>
    </plugin>
  </plugins>
</build>

Gradle setup

build.gradle.kts (works for both Java and Kotlin simulations)

plugins {
    java                                    // or kotlin("jvm") version "2.0.21"
    id("io.gatling.gradle") version "3.15.0.1"
}

repositories {
    mavenCentral()
}

gatling {
    // optional plugin configuration
    // Gatling dependencies are included automatically by the plugin
}

Source directory layout

Maven (uses src/test/)

src/
└── test/
    ├── java/                    # Java simulations
    │   └── com/example/
    │       └── BasicSimulation.java
    ├── kotlin/                  # Kotlin simulations
    │   └── com/example/
    │       └── BasicSimulation.kt
    └── resources/
        ├── gatling.conf         # optional overrides
        ├── logback-test.xml     # logging config
        └── data/
            └── users.csv        # feeder files

Gradle (uses src/gatling/)

src/
└── gatling/
    ├── java/                    # Java simulations
    │   └── com/example/
    │       └── BasicSimulation.java
    ├── kotlin/                  # Kotlin simulations
    │   └── com/example/
    │       └── BasicSimulation.kt
    └── resources/
        ├── gatling.conf
        ├── logback-test.xml
        └── data/
            └── users.csv

Running simulations

Maven

# Run all simulations interactively (prompts which class to run)
mvn gatling:test

# Run a specific simulation non-interactively
mvn gatling:test -Dgatling.simulationClass=com.example.BasicSimulation

Gradle

./gradlew gatlingRun
./gradlew gatlingRun --simulation com.example.BasicSimulation

Minimal simulation (smoke test)

Java

package com.example;

import io.gatling.javaapi.core.*;
import io.gatling.javaapi.http.*;

import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.*;

public class BasicSimulation extends Simulation {

    HttpProtocolBuilder httpProtocol = http
        .baseUrl("https://httpbin.org")
        .acceptHeader("application/json");

    ScenarioBuilder scn = scenario("Basic")
        .exec(http("Get IP").get("/get"));

    {
        setUp(scn.injectOpen(atOnceUsers(1)))
            .protocols(httpProtocol);
    }
}

Kotlin

package com.example

import io.gatling.javaapi.core.*
import io.gatling.javaapi.core.CoreDsl.*
import io.gatling.javaapi.http.*
import io.gatling.javaapi.http.HttpDsl.*

class BasicSimulation : Simulation() {

    val httpProtocol = http
        .baseUrl("https://httpbin.org")
        .acceptHeader("application/json")

    val scn = scenario("Basic")
        .exec(http("Get IP").get("/get"))

    init {
        setUp(scn.injectOpen(atOnceUsers(1)))
            .protocols(httpProtocol)
    }
}

Run it and open target/gatling/<run-folder>/index.html (Maven) or build/reports/gatling/<run-folder>/index.html (Gradle).