Spring Boot + Gatling

Goal

The goal of this entry is to make project Spring Boot Web Application with Gatling.
I explained about Gatling in the last entry.()
Write web application codes and do load test in

Gatling

Gatling is based on Scala, so we can combine with Java Project.

Env

  • IntelliJ(IDE)
  • Spring Boot, Spring Boot Web
  • Gatling

Project

Create project directory

mkdir Project
cd Project
mkdir -p src/main/java
mkdir -p src/main/resources
mkdir -p src/test/java
mkdir -p src/test/scala

build.gradle

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE")
  }
}

apply plugin: "java"
apply plugin: "spring-boot"
apply plugin: "scala"
apply plugin: "idea"

jar {
  baseName = "Project"
  version =  "0.0.1-SNAPSHOT"
}

repositories {
  mavenCentral()
}

dependencies {
  compile("org.springframework.boot:spring-boot-starter-web")
  testCompile("org.springframework.boot:spring-boot-starter-test")
  testCompile("io.gatling.highcharts:gatling-charts-highcharts:2.2.3")
}

task loadTest(type: JavaExec) {
  dependsOn testClasses
  description = "load test with Gatling"
  group = "Load Test"
  classpath = sourceSets.test.runtimeClasspath
  main = "io.gatling.app.Gatling"
  args = [
          "--simulation", "com.atmarkplant.project.gatling.MainSimulation",
          "--results-folder", "${buildDir}/gatling-results",
          "--bodies-folder", sourceSets.test.resources.srcDirs.toList().first().toString() + "/gatling/bodies",
  ]
}

Build and Import Project

Open Project directory from IntelliJ

Spring Boot Controller

BasicController.java

@RestController
public class BasicController {

    @RequestMapping(value="/")
    public String root() {
        return "Hello";
    }
}

Main.java

@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

Gatling Test

test/scala/com.atmarkplant.project.gatling.MainSimulation.scala

class MainSimulation extends Simulation {

  val httpConf = http
    .baseURL("http://localhost:8080") // Here is the root for all relative URLs

  val scn = scenario("Sample")
    .exec(http("request1")
      .get("/"))
    .pause(100 milliseconds)
  setUp(scn.inject(rampUsers(20) over(5 seconds)) .protocols(httpConf))
}

Run Test

Start Spring Boot Application -> http://localhost:8080 is enable
Run Test, execute gradle task

gradle loadTest

Run Gatling and results are under build/gatling-results/