Rest Assured e Lombok para dados de teste, um guia prático

Rafael Peixoto
Revista DTAR
Published in
4 min readSep 16, 2020

--

Se você usa o Rest Assured para automatizar seus testes de API, certamente já pensou em formas de como trabalhar os dados que irá usar nas suas requisições e, claro, também como validá-los no corpo de resposta. Bom, o Rest Assured te permite enviar um body de várias maneiras. Vamos ver algumas formas de como fazer para então entender como o Lombok pode te ajudar a tornar essa tarefa mais fácil.

Para os exemplos que mostrarei aqui, vou utilizar o Serve Rest. O Serve Rest, criado pelo Paulo Gonçalves, é um servidor REST que simula uma loja virtual com intuito de servir de material de estudos de testes de API. Vamos utilizar apenas um endpoint onde faremos um POST em /login e passar um body como a seguir:

{
"email": "fulano@qa.com",
"password": "teste"
}

Não vou entrar em detalhes aqui de como funciona o Rest Assured para focar apenas em como trabalhar com os dados. Sendo assim, vamos ver como ficaria uma requisição simples de login:

Na linha 5 devemos preencher o body com o JSON que contém as informações de email e password. A maneira mais simples e rápida é colocar o JSON diretamente ali entre as aspas.

Veja como ficaria:

Somente isso já é o suficiente para que essa requisição funcione, mas o body não ficou a coisa mais linda de se ler, né? Mesmo esse body sendo super simples já existe uma certa dificuldade de lê-lo, agora imagina em casos de objetos mais complexos.

Uma solução é criarmos um POJO (Plain Old Java Object) que nada mais é que um objeto simples de Java. Para isso, basta criar uma nova classe que terá os campos email e password como atributos e também criar getters e setter para eles.

E como usamos isso na nossa requisição? Simples, criamos uma instância de LoginRequestBody, setamos os valores que precisamos e passamos esse objeto dentro do body().

Como essa mágica acontece? O Rest Assured recebe esse objeto com os valores setados ali nas linhas 4 e 5 e serializa-os para JSON (veja que passamos o content-type na linha 8).

Para essa serialização ocorrer certinho, eu também adicionei no meu projeto a seguinte dependência:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>

Já ficou um tanto melhor o código, mas para fazer um simples POJO como esse escrevemos muitas linhas. Um objeto mais complexo, precisaria de muito mais código. Você pode até pensar, mas Java é assim mesmo, muito verboso. Até é, mas dá para diminuir essa complexidade usando o Lombok.

Instalando Lombok

O Lombok é uma biblioteca Java que ajuda a remover códigos comuns, como os getters e setters, através de anotações e nos dá bastante agilidade na hora de codar. Para usá-lo, precisamos de duas coisas: adicioná-lo como dependência no projeto e instalarmos seu plugin na nossa IDE.

Maven

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>

Gradle

repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.12'
annotationProcessor 'org.projectlombok:lombok:1.18.12'

testCompileOnly 'org.projectlombok:lombok:1.18.12'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
}

Tendo as dependências, é hora de instalar o plugin na sua IDE. Aqui eu vou mostrar a instalação no Intellij, mas existem plugins para outras IDEs. Vá em Preferences > plugins e digite Lombok no campo de pesquisa. O plugin do Lombok irá aparecer, então clique em Install. Com a instalação concluída, você verá o novo plugin na aba Installed:

Imagem de plugins instalados no Intellij mostrando que o Lombok foi instalado

Importante: enquanto eu escrevia esse artigo, encontrei um problema na versão 2020.2 do Intellij que causa um problema em vários plugins. Por este motivo, aconselho que faça o update para a versão 2020.2.1 ou o downgrade para 2020.1

Transformando seu POJO com Lombok

Com tudo ok na instalação, vamos ao código. Primeiro vamos abrir a classe LoginRequestBody para incluir uma anotação.

Entre as linhas 1 e 3, adicionamos uma anotação @Data do Lombok e realizamos a importação da biblioteca correspondente. Por baixo dos panos, o Lombok criará getters e setters para cada um dos atributos. A diferença em número de linhas é gritante. Na primeira versão que vimos a classe LoginRequestBody tinha 23 linhas e agora apenas 7, mas sem perder nenhuma das funcionalidades.

O melhor de tudo é que além de escrever muito menos, não precisamos mudar aquele código onde instanciamos LoginRequestBody e atribuímos os valores para e-mail e senha. Mesmo com a mudança, tudo continua funcionando como antes.

Confira o código completo em https://github.com/rapesil/rest-assured-e-lombok

Conclusão

Ao invés de passar o conteúdo de um JSON diretamente como String para o Rest Assured, uma forma mais elegante e poderosa é criar objetos simples em Java que serão serializados no formato JSON.

Isso nos dá bastante flexibilidade para criar massa de dados alterando os valores de entrada utilizando os setters. E, quando unimos isso ao poder do Lombok, essa tarefa fica ainda mais fácil.

O Lombok não existe apenas para facilitar a criação de POJOs, vamos ver também como criar builders de forma bem simples, mas isso fica para um próximo post.

Até mais!

Referências

Agradecimentos

Não poderia terminar aqui sem os agradecimentos especiais aos meus mentores Júlio de Lima e Antonio Montanha que me ensinaram muito durante o curso Descomplicando Testes de API Rest e incentivaram esse post. Agradeço também ao Bruno Pulis, Eduardo Misael e Gabriel Santos que me ajudaram muito revisando o texto.

--

--