diff --git a/testing-modules/gatling-java/Jenkinsfile b/testing-modules/gatling-java/Jenkinsfile
new file mode 100644
index 0000000000..0786788406
--- /dev/null
+++ b/testing-modules/gatling-java/Jenkinsfile
@@ -0,0 +1,20 @@
+pipeline {
+ agent any
+ stages {
+ stage("Build Maven") {
+ steps {
+ sh 'mvn -B clean package'
+ }
+ }
+ stage("Run Gatling") {
+ steps {
+ sh 'mvn gatling:test'
+ }
+ post {
+ always {
+ gatlingArchive()
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/testing-modules/gatling-java/README.md b/testing-modules/gatling-java/README.md
new file mode 100644
index 0000000000..71848ecfdc
--- /dev/null
+++ b/testing-modules/gatling-java/README.md
@@ -0,0 +1,7 @@
+### Relevant Articles:
+Load testing Rest End point using Gatling
+
+
+
+### Running a simualtion
+ To run the simulation from command prompt use mvn gatling:test
\ No newline at end of file
diff --git a/testing-modules/gatling-java/pom.xml b/testing-modules/gatling-java/pom.xml
new file mode 100644
index 0000000000..090a99f3d7
--- /dev/null
+++ b/testing-modules/gatling-java/pom.xml
@@ -0,0 +1,79 @@
+
+
+ 4.0.0
+ org.baeldung
+ gatling
+ 1.0-SNAPSHOT
+ gatling
+
+
+ com.baeldung
+ testing-modules
+ 1.0.0-SNAPSHOT
+
+
+
+ io.gatling
+ gatling-app
+ ${gatling.version}
+
+
+ io.gatling.highcharts
+ gatling-charts-highcharts
+ ${gatling.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring.version}
+
+
+ org.projectlombok
+ lombok
+ 1.18.24
+ provided
+
+
+ com.github.javafaker
+ javafaker
+ ${faker.version}
+
+
+
+
+
+
+
+
+ net.alchim31.maven
+ scala-maven-plugin
+ ${scala-maven-plugin.version}
+
+
+
+
+
+ io.gatling
+ gatling-maven-plugin
+ ${gatling-maven-plugin.version}
+
+ org.baeldung.EmployeeRegistrationSimulation
+
+
+
+
+
+
+ 1.8
+ 1.8
+ UTF-8
+ 3.9.0
+ 4.2.9
+ 1.0.2
+ 2.7.5
+
+
+
\ No newline at end of file
diff --git a/testing-modules/gatling-java/src/main/java/org/baeldung/Address.java b/testing-modules/gatling-java/src/main/java/org/baeldung/Address.java
new file mode 100644
index 0000000000..2a8e6c60dc
--- /dev/null
+++ b/testing-modules/gatling-java/src/main/java/org/baeldung/Address.java
@@ -0,0 +1,13 @@
+package org.baeldung;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Builder
+@Data
+public class Address {
+ private String postCode;
+ private String Street;
+ private String houseNo;
+ private String city;
+}
diff --git a/testing-modules/gatling-java/src/main/java/org/baeldung/Application.java b/testing-modules/gatling-java/src/main/java/org/baeldung/Application.java
new file mode 100644
index 0000000000..fce18fe70c
--- /dev/null
+++ b/testing-modules/gatling-java/src/main/java/org/baeldung/Application.java
@@ -0,0 +1,12 @@
+package org.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
\ No newline at end of file
diff --git a/testing-modules/gatling-java/src/main/java/org/baeldung/Employee.java b/testing-modules/gatling-java/src/main/java/org/baeldung/Employee.java
new file mode 100644
index 0000000000..c52130b175
--- /dev/null
+++ b/testing-modules/gatling-java/src/main/java/org/baeldung/Employee.java
@@ -0,0 +1,16 @@
+package org.baeldung;
+
+import java.util.Set;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class Employee {
+ private String empName;
+ private Address address;
+ private String id;
+ private Set projects;
+
+}
diff --git a/testing-modules/gatling-java/src/main/java/org/baeldung/EmployeeController.java b/testing-modules/gatling-java/src/main/java/org/baeldung/EmployeeController.java
new file mode 100644
index 0000000000..ce5d558d8e
--- /dev/null
+++ b/testing-modules/gatling-java/src/main/java/org/baeldung/EmployeeController.java
@@ -0,0 +1,99 @@
+package org.baeldung;
+
+import java.net.URI;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.ThreadLocalRandom;
+
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.util.UriComponentsBuilder;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/employees")
+public class EmployeeController {
+
+ @GetMapping(produces = { MediaType.APPLICATION_JSON_VALUE })
+ public List getAllEmployees() {
+ return createEmployees();
+ }
+
+ @GetMapping("/{id}")
+ public Employee getEmployeeWithId(@PathVariable("id") Long id) {
+ log.info("Getting employee with ID '{}'", id);
+
+ List allEmployees = createEmployees();
+ return allEmployees.get(ThreadLocalRandom.current()
+ .nextInt(0, allEmployees.size()));
+ }
+
+ @PostMapping(consumes = { MediaType.APPLICATION_JSON_VALUE })
+ public ResponseEntity addEmployee(@RequestBody EmployeeCreationRequest request, UriComponentsBuilder uriComponentsBuilder) {
+
+ log.info("Creating new employee with employeeName: {}", request.getEmpName());
+
+ URI location = uriComponentsBuilder.path("/api/employees/{id}")
+ .buildAndExpand("99")
+ .toUri();
+ return ResponseEntity.created(location)
+ .build();
+ }
+
+ private List createEmployees() {
+
+ Set projects = new HashSet();
+ projects.add("proj1");
+ projects.add("proj2");
+
+ Employee employee1 = Employee.builder()
+ .id(UUID.randomUUID()
+ .toString())
+ .address(Address.builder()
+ .houseNo("1")
+ .city("London")
+ .postCode("HP17")
+ .build())
+ .projects(projects)
+ .empName("Andy")
+ .build();
+
+ Employee employee2 = Employee.builder()
+ .id(UUID.randomUUID()
+ .toString())
+ .address(Address.builder()
+ .houseNo("2")
+ .city("Cardiff")
+ .postCode("CF12")
+ .build())
+ .projects(projects)
+ .empName("Bob")
+ .build();
+
+ Employee employee3 = Employee.builder()
+ .id(UUID.randomUUID()
+ .toString())
+ .address(Address.builder()
+ .houseNo("4")
+ .city("Burmingham")
+ .postCode("BA4")
+ .build())
+ .projects(projects)
+ .empName("Clive")
+ .build();
+
+ return Arrays.asList(employee1, employee2, employee3);
+
+ }
+}
\ No newline at end of file
diff --git a/testing-modules/gatling-java/src/main/java/org/baeldung/EmployeeCreationRequest.java b/testing-modules/gatling-java/src/main/java/org/baeldung/EmployeeCreationRequest.java
new file mode 100644
index 0000000000..72c5e1ec27
--- /dev/null
+++ b/testing-modules/gatling-java/src/main/java/org/baeldung/EmployeeCreationRequest.java
@@ -0,0 +1,29 @@
+package org.baeldung;
+
+public class EmployeeCreationRequest {
+
+ private String empName;
+
+ private String empNumber;
+
+ public String getEmpName() {
+ return empName;
+ }
+
+ public void setEmpName(String empName) {
+ this.empName = empName;
+ }
+
+ @Override
+ public String toString() {
+ return "org.baeldung.EmployeeCreationRequest{" + "employeename='" + empName + '\'' + '}';
+ }
+
+ public String getEmpNumber() {
+ return empNumber;
+ }
+
+ public void setEmpNumber(String empNumber) {
+ this.empNumber = empNumber;
+ }
+}
\ No newline at end of file
diff --git a/testing-modules/gatling-java/src/test/java/org/baeldung/EmployeeRegistrationSimulation.java b/testing-modules/gatling-java/src/test/java/org/baeldung/EmployeeRegistrationSimulation.java
new file mode 100644
index 0000000000..de59273bbd
--- /dev/null
+++ b/testing-modules/gatling-java/src/test/java/org/baeldung/EmployeeRegistrationSimulation.java
@@ -0,0 +1,87 @@
+package org.baeldung;
+
+import static io.gatling.javaapi.core.CoreDsl.StringBody;
+import static io.gatling.javaapi.core.CoreDsl.global;
+import static io.gatling.javaapi.core.CoreDsl.rampUsersPerSec;
+import static io.gatling.javaapi.http.HttpDsl.header;
+import static io.gatling.javaapi.http.HttpDsl.http;
+import static io.gatling.javaapi.http.HttpDsl.status;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import com.github.javafaker.Faker;
+
+import io.gatling.javaapi.core.CoreDsl;
+import io.gatling.javaapi.core.OpenInjectionStep.RampRate.RampRateOpenInjectionStep;
+import io.gatling.javaapi.core.ScenarioBuilder;
+import io.gatling.javaapi.core.Simulation;
+import io.gatling.javaapi.http.HttpDsl;
+import io.gatling.javaapi.http.HttpProtocolBuilder;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class EmployeeRegistrationSimulation extends Simulation {
+
+ private static final HttpProtocolBuilder HTTP_PROTOCOL_BUILDER = setupProtocolForSimulation();
+
+ private static final Iterator