PT | EN

Gatling na CoP de Qualidade de Software

12/11/2020 02/07/2024 5 minutos

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.

Foto do autor

Trainee de Qualidade, está em fase de conclusão do curso de Análise e Desenvolvimento de Sistemas (IFRS). Atua na elaboração de cenários e testes automatizados.