Usando objetos Java para facilitar asserções em testes de API com Rest Assured e Lombok

Rafael Peixoto
Revista DTAR
Published in
3 min readFeb 23, 2021

--

Para finalizar minha série de posts de como ser mais produtivo nos seus testes de API com Rest Assured usando o Lombok, vou apresentar aqui como Desserializar um objeto Java e usá-lo para fazer asserções. Se você chegou aqui e não viu os post anteriores, aconselho parar a leitura e dar uma conferida nos meus primeiros posts desta série: Rest Assured e Lombok para dados de teste, um guia prático e Como criar objetos complexos para seus testes de API criando builders com Lombok

Antes de irmos ao assunto principal desse artigo, vamos primeiro ver como fazer uma asserção simples sem uso do Lombok, validando o corpo da resposta diretamente no Rest Assured. Assim como nos posts anteriores, utilizarei o ServeRest para os exemplos.

No código acima, fiz uma requisição em /login passando um e-mail e senha no corpo da requisição (usando um POJO) e ao final faço duas validações:

  • Na linha 13 verifico se o status code retornado é igual 200;
  • Na linha 14 verifico se no corpo da resposta existe um campo "message" com valor "Login realizado com sucesso"

Talvez seja essa forma mais comum de fazer asserções com Rest Assured, mas hoje vamos ver uma outra forma. Para passar um objeto no corpo da requisição nós criamos um POJO com os campos que o nosso JSON precisa ter. Vamos fazer o mesmo agora só que pensando na resposta.

Quando um login é feito com sucesso no ServeRest recebemos um JSON conforme a seguir:

Vamos criar um POJO para esse retorno:

É um objeto realmente bem simples contendo apenas dois campos. Com esse objeto criado, podemos voltar ao nosso teste e fazer uma pequena modificação. Ao invés de validarmos diretamente nas chamadas do Rest Assured, agora iremos fazer com que nossa requisição retorne um objeto do tipo LoginResponse conforme a seguir:

Vamos entender o que mudou.

  • Na linha 13, ao invés de chamarmos o método then() para começarmos as validações, chamei o método as(). Ele fará com que a resposta (que voltaria como JSON) seja desserializada num objeto de LoginResponse.
  • Voltando um pouco acima, na linha 7, veja que existe uma variável para receber o retorno desse objeto LoginResponse.
  • Por fim, na linha 15, podemos usar o objeto retornado para fazermos uma validação.

Para fazer essa validação eu usei a biblioteca Truth da Google que faz asserts mais elegantes. Você pode usar o AssertJ que é muito parecido ou até mesmo as asserções que já vem no JUnit.

Poderia finalizar aqui, mas você reparou que validamos apenas o corpo da resposta? E se eu quiser usar essa forma de validação com POJO, mas também validar o status code que retornou? Bem, isso não é um problema, mas precisaremos fazer mais um pequeno ajuste no código.

A mudança no código aconteceu ali na linha 13. Voltei a usar o then() e validar o status code (linha 14). Agora, para poder retornar o objeto LoginResponse, precisei chamar mais dois métodos extract() e body(). Ou seja, eu extraio o body como LoginResponse. A asserção da linha 19 continua igual.

Conclusão

Encerro aqui oficialmente minha série de posts de testes usando Rest Assured e Lombok onde quis demonstrar que podemos usar recursos da própria linguagem de programação para nos ajudar com dados de teste.

O Java é realmente verboso, mas existem recursos que diminuem isso. O Lombok simplifica muitas tarefas comuns no desenvolvimento Java e nos dá mais agilidade. Conhecer mais recursos nos abre mais possibilidades de como escrever testes melhores.

Curtiu a série? Tem alguma sugestão de melhoria? Comenta aqui, vamos bater um papo.

Referências

--

--