Teste de carga Baeldung com Gatling

Exemplo de teste de carga com Gatling

1. Visão geral

Noprevious tutorial, vimos como usar Gatling para testar a carga de um aplicativo da web personalizado.

Neste artigo, usaremos a ferramenta Gatling stress para medir o desempenho do ambiente de teste deste site.

2. O Cenário de Teste

Vamos primeiro configurar nosso cenário de uso principal - aquele que chega perto de um usuário típico que pode estar navegando no site:

  1. Vá para a página inicial

  2. Abrir um artigo da página inicial

  3. Vá para Guias / REST

  4. Vá para a categoria REST

  5. Ir para o arquivo completo

  6. Abrir um artigo do arquivo

3. Grave o cenário

Agora, vamos registrar nosso cenário usando o gravador Gatling - da seguinte maneira:

$GATLING_HOME/bin/recorder.sh

E para usuários do Windows:

%GATLING_HOME%\bin\recorder.bat

Nota:GATLING_HOME é o diretório de instalação do Gatling.

Existemtwo modes for Gatling Recorder: HTTP Proxy e HAR Converter.

Discutimos o modo HTTP Proxy em detalhes noprevious tutorial - então, vamos agora dar uma olhada na opção Conversor HAR.

3.1. Conversor HAR

HAR é a abreviação de HTTP Archive - um formato basicamenterecords the full information about a browsing session.

Podemos obter arquivos HAR do navegador e usar o Gatling Recorder para convertê-lo em uma simulação.

Criaremos nosso arquivo HAR com a ajuda das Ferramentas do desenvolvedor do Chrome:

  • Menu → Mais ferramentas → Ferramentas do desenvolvedor

  • Vá para a guiaNetwork

  • Certifique-se de quePreserve log está marcado

  • Depois de terminar de navegar no site, clique com o botão direito do mouse nas solicitações que deseja exportar

  • Em seguida, selecione Copiar tudo como HAR

  • Cole-os em um arquivo e importe-o do gravador Gatling

Depois de terminar de ajustar o gravador Gatling com a sua preferência, clique em Iniciar.

Observe que a pasta de saída é por padrãoGATLING_HOME/user-files-simulations

4. A Simulação

O arquivo de simulação gerado é similarmente escrito em Scala. Geralmente é OK, mas não super legível, então faremos alguns ajustes para limpar. Aqui está a nossa simulação final:

class RestSimulation extends Simulation {

    val httpProtocol = http.baseURL("http://staging.example.com")

    val scn = scenario("RestSimulation")
      .exec(http("home").get("/"))
      .pause(23)
      .exec(http("article_1").get("/spring-rest-api-metrics"))
      .pause(39)
      .exec(http("rest_series").get("/rest-with-spring-series"))
      .pause(60)
      .exec(http("rest_category").get("/category/rest/"))
      .pause(26)
      .exec(http("archive").get("/full_archive"))
      .pause(70)
      .exec(http("article_2").get("/spring-data-rest-intro"))

    setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}

Uma observação importante aqui é que o arquivo de simulação completo é muito maior; aqui,we didn’t include static resources para simplificar.

5. Execute o teste de carga

Agora, podemos executar nossa simulação - da seguinte maneira:

$GATLING_HOME/bin/gatling.sh

E para usuários do Windows:

%GATLING_HOME%\bin\gatling.bat

A ferramenta Gatling irá verificarGATLING_HOME/user-files-simulationse listar todas as simulações encontradas para nós escolhermos.

Depois de executar a simulação, os resultados se parecem com:

Para um usuário:

> request count                                304 (OK=304    KO=0)
> min response time                             75 (OK=75     KO=-)
> max response time                          13745 (OK=13745  KO=-)
> mean response time                          1102 (OK=1102   KO=-)
> std deviation                               1728 (OK=1728   KO=-)
> response time 50th percentile                660 (OK=660    KO=-)
> response time 75th percentile               1006 (OK=1006   KO=-)
> mean requests/sec                           0.53 (OK=0.53   KO=-)
---- Response Time Distribution ------------------------------------
> t < 800 ms                                           183 ( 60%)
> 800 ms < t < 1200 ms                                  54 ( 18%)
> t > 1200 ms                                           67 ( 22%)
> failed                                                 0 (  0%)

Para 5 usuários simultâneos:

> request count                               1520 (OK=1520   KO=0)
> min response time                             70 (OK=70     KO=-)
> max response time                          30289 (OK=30289  KO=-)
> mean response time                          1248 (OK=1248   KO=-)
> std deviation                               2079 (OK=2079   KO=-)
> response time 50th percentile                504 (OK=504    KO=-)
> response time 75th percentile               1440 (OK=1440   KO=-)
> mean requests/sec                          2.411 (OK=2.411  KO=-)
---- Response Time Distribution ------------------------------------
> t < 800 ms                                           943 ( 62%)
> 800 ms < t < 1200 ms                                 138 (  9%)
> t > 1200 ms                                          439 ( 29%)
> failed                                                 0 (  0%)

Para 10 usuários simultâneos:

> request count                               3058 (OK=3018   KO=40)
> min response time                              0 (OK=69     KO=0)
> max response time                          44916 (OK=44916  KO=30094)
> mean response time                          2193 (OK=2063   KO=11996)
> std deviation                               4185 (OK=3953   KO=7888)
> response time 50th percentile                506 (OK=494    KO=13670)
> response time 75th percentile               2035 (OK=1976   KO=15835)
> mean requests/sec                          3.208 (OK=3.166  KO=0.042)
---- Response Time Distribution ----------------------------------------
> t < 800 ms                                          1752 ( 57%)
> 800 ms < t < 1200 ms                                 220 (  7%)
> t > 1200 ms                                         1046 ( 34%)
> failed                                                40 (  1%)

Observe que algumas das solicitações falharam quando testados 10 usuários simultâneos - simplesmente porque o ambiente de teste não é capaz de lidar com esse tipo de carga.

6. Conclusão

Neste artigo rápido, exploramos a opção HAR de gravar cenários de teste em Gatling e também fizemos um teste inicial simples de example.com.