Skip to content

Latest commit

 

History

History
162 lines (113 loc) · 3.77 KB

README.md

File metadata and controls

162 lines (113 loc) · 3.77 KB

ProjetoModelo - Testes de Performance/Carga com Gatling

Projeto com base no modelo "quick start bundle" para testes com Gatling.

Criar Simulation

Para simplificar a criação dos testes, foi criado um trait [SpecTrait], que define por meio de um objeto Specs um conjunto básico de valores que podem ser dispostos em um arquivo de configuração '.conf'. SpecTrait possui um objeto Sepcs definido por meio de uma função anônima.

O arquivo de configuração possui o seguinte formato:

specs {

  headers = {"Content-Type": "application/x-www-form-urlencoded", "client_id": "CLIENTE_ID", "token": "QzBOdMOhQjFsLUMwcjMtQjRDay1UMGszbgo="}
  headers = ${?HEADERS}

  queryParams = {"ano": 2019, "par1": 1, "par2": 12}
  queryParams = ${?QUERY_PARAMS}

  pathParams: {"cnpj":"23494210000137"}
  pathParams: ${?PATH_PARAMS}

  baseUrl = "https://www.gateway-empresa.com"
  baseUrl = ${?BASE_URL}

  body = ""
  body = ${?FILE_BODY}

  endpoint = "/endpoint/{cnpj}/outro/fim/"
  endpoint = ${?ENDPOINT}

  statusCode = 200
  statusCode = ${?STATUS_CODE}

}

simulation {

  sceneName = "modelo"

  requestName = "stressing events"

  initialUsers = 40
  initialUsers = ${?INITIAL_USERS}

  rampUpRate1 = 40
  rampUpRate1 = ${?RAMP_UP_RATE_1}

  rampUpRate2 = 1000
  rampUpRate2 = ${?RAMP_UP_RATE_2}

  duration = 90 second
  duration = ${?DURATION}

  duration2 = 120 second
  duration2 = ${?DURATION2}

  failedRequestPercent = 10
  failedRequestPercent = ${?FAILED_PERCENT}

}


Observe que todos os valores podem ser sobrescritos por argumentos de entrada da JVM.

A classe de simulação ("simulations.TestConcurrentUsers.scala"), por sua vez, possui o seguinte formado:

class TestConcurrentUsers extends Simulation with SpecTrait {

  lazy val configFile: String = Properties.envOrElse("configFile", "config-file.conf")
  lazy val specs: base.RestSpecs = Specs.restSpecs.apply(ConfigFactory.load(configFile))
  lazy val simulSpecs: base.SimulationSpecs = Specs.simulationsSpecs.apply(ConfigFactory.load(configFile))

  lazy val scene: ScenarioBuilder = scenario(simulSpecs.sceneName)
    .exec(http(simulSpecs.requestName)
      .post(specs.endpoint)
      .headers(specs.headers)
      .queryParamMap(specs.queryParams)
      .body(ElFileBody(specs.fileBody)).asJson
      .check(status.is(200))
    )
    .exec { session2 =>
      println("session:" + session2.toString)
      session2
    }

  setUp(
    scene.inject(
      rampConcurrentUsers(simulSpecs.rampUpRate1)
        .to(simulSpecs.rampUpRate2)
        .during(simulSpecs.duration))
      .protocols(http.baseUrl(specs.baseUrl))
  ).assertions(forAll.failedRequests.percent.lte(simulSpecs.failedPercentRequests))

}

Executar

Todos os testes:

sbt "gatling:test"

Uma única classe de teste:

sbt "gatling:testOnly simulations.TestConcurrentUsers"

Relatórios:

sbt "gatling:lastReport"

Jar:

Compilar o jar:

it:assembly

Isso gerará um arquivo jar no diretório especificado em build.sbt.

E para executá-lo:

java -jar nomeJar.jar -s package.class

Exemplos:

De forma simplificada:

java -jar target/scala-2.12/load-test.jar  -s simulations.TestConcurrentUsers

Ou, com parêmetros:

java -DconfigFileLogin=exemplo.conf -jar target/scala-2.12/ProjetoModelo-test-1.1.jar -rsf $PWD/src/main/resources/ -s tests.TestConcurrentUsers

Containder Docker

Build:

docker build -t nome_container .

Execução:

docker run --name gatling_exemplo --rm nome_container -s package.class