Gatling na CoP de Qualidade de Software

Tempo de leitura: 5 minutos
Qualidade e Testes
por em 12 de novembro de 2020

Aqui na SoftDesign, realizamos periodicamente a Comunidade de Prática de Qualidade de Software. Em uma das edições do mês de outubro, apresentei aos colegas o Gatling – na mesma ocasião, Shaueny Ribeiro falou sobre o JMeter. Foi um momento para discutirmos mais detalhes sobre novas formas de executar testes de software.

Essa ferramenta é utilizada para realizar testes de performance e carga. De código aberto, o Gatling utiliza a linguagem Scala, Akka e Netty e tem como principal objetivo medir a capacidade e o desempenho de processamento do software. Com a sua primeira versão estável lançada em 2012, ele simula uma grande quantidade de usuários trabalhando simultaneamente em um sistema.

Utilização do Gatling com o Maven

Uma das facilidades dessa ferramenta é a possibilidade de ser utilizado com o Maven, que realiza a automação da compilação, se adicionar as seguintes dependências:

<dependencies>

      <dependency>

        <groupId>io.gatling</groupId>

        <artifactId>gatling-app</artifactId>

        <version>${gatling.version}</version>

      </dependency>

      <dependency>

        <groupId>io.gatling</groupId>

        <artifactId>gatling-recorder</artifactId>

        <version>${gatling.version}</version>

      </dependency>

      <dependency>

        <groupId>io.gatling.highcharts</groupId>

        <artifactId>gatling-charts-highcharts</artifactId>

        <version>${gatling.version}</version>

      </dependency>

      <dependency>

        <groupId>org.scala-lang</groupId>

        <artifactId>scala-library</artifactId>

        <version>${scala.version}</version>

      </dependency>

</dependencies>

Pontos positivos e negativos da ferramenta

Refletindo sobre a minha experiência com essa ferramenta, creio que uma das principais vantagens do Gatling é a sua vasta documentação. É possível encontrar diversos detalhes, desde a montagem do projeto até exemplos de teste para acompanhar. Em contrapartida, por desconhecer a linguagem Scala, se torna mais complexa a compreensão dos erros que são retornados e a montagem de testes mais avançados.

Esse foi um dos motivos de ter realizado para os colegas uma breve introdução sobre essa ferramenta. Dessa forma, evitamos possíveis retrabalhos e contribuímos para compartilhar conhecimentos diversos, entregando ainda mais valor nos nossos produtos e serviços digitais. Além disso, é a partir dessas trocas constantes com outros profissionais que surgem novas ideias e ferramentas para experimentar. A utilização do Gatling, por exemplo, é resultado de uma dessas conversas.

Alguns exemplos de testes com o Gatling

Durante a CoP de Qualidade, mostrei alguns exemplos  de como a ferramenta pode ser utilizada em diferentes cenários, como é possível ver abaixo:

– Faz acessos simultâneos e constantes no sistema em um determinado período no método Get.

class GetConstantUsers extends Simulation {

  val httpConf = http.baseUrl(“url”)

    .header(“Content-Type”, “application/json”);

 

  val cenario = scenario(“retornaTodosProdutosCadastrados”)

    .exec(http(“retornaTodosProdutosCadastrados”)

      .get(“rota”)

      .check(status.is(200)))

  setUp(cenario.inject(constantConcurrentUsers(100) during(20 minutes))).protocols(httpConf)

}

– Permite que os usuários acessem a URL de maneira uniforme em uma janela de tempo.

class GetRampUsers extends Simulation {

  val httpConf = http.baseUrl(“url”)

    .header(“Content-Type”, “application/json”);

 

  val cenario = scenario(“retornaTodosProdutosCadastrados”)

      .exec(http(“retornaTodosProdutosCadastrados”)

      .get(“rota”)

      .check(status.is(200)))

  setUp(cenario.inject(rampUsers(100) during(5 minutes))).protocols(httpConf)

}

– Faz acessos simultâneos e constantes no sistema em uma determinada quantidade de tempo no método Post.

class Post extends Simulation {

    val httpConf = http.baseUrl(“Url”)

      .header(“Content-Type”, “application/json”);

    val cenario = scenario(“CriarProduto”)

      .exec(http(“CriarProduto”)

        .post(“rota”)

        .body(StringBody(

            “””{“name”:”Produto”, “active”: true}”””

              .stripMargin))

        .asJson.check(status.is(201)))

    setUp(cenario.inject(constantConcurrentUsers(100) during(20 minutes))).protocols(httpConf);

}

Termos importantes

Cenário: consiste em uma série de solicitações. Cada cenário dentro de uma simulação pode ter seu próprio perfil de injeção.

Perfil de injeção: é o número de usuários virtuais injetados durante o teste no sistema e como eles serão injetados.

Relatórios de teste: é o retorno da compilação de testes, onde gráficos apresentam os resultados detalhadamente, como podemos ver nos exemplos abaixo.

Sugestões ou críticas para nosso blog? Entre em contato pelo endereço mkt@softdesign.com.br.