Gatling na CoP de Qualidade de Software
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.
