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
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).