Iniciando testes de serviços com HTTParty e RSpec
Quando pensamos em estratégias de testes automatizados, atualmente já pensamos em colocar uma boa parte desses testes em testes de serviço. Porém, junto disso também vem alguns contratempos, como: tempo para desenvolvimento, conhecimento da equipe, relatório do teste executado e integração contínua. Com isso, precisamos ter uma stack para o desenvolvimento dos testes de serviço que tenha um framework e linguagem com uma curva de aprendizado baixa e asserções confiáveis para a execução dos testes, e para obtermos isso, nada melhor do que usarmos Ruby como linguagem, HTTParty e RSpec como framework. Em seguida vou explicar como podemos fazer essa automação e rapidamente colocar para rodar.
O que é HTTParty?
É uma gem para Ruby para consumo de serviços rest facilmente, abaixo exemplos de um get e post em serviços utilizando httparty:
O que é RSpec?
Também é um gem Ruby para realizar a escrita dos cenários e as asserções para estes cenários. Segue exemplos de cenários com asserções.
Hands-on
**Para iniciar o tutorial é recomendável que você conheça o básico sobre requisições e também tenha o Ruby e o Bundler instalado em sua máquina.
Ruby: https://www.ruby-lang.org/pt/downloads/ .
Após instalar o Ruby executar o seguinte comando: gem bundler install.
Iniciando o projeto
Dentro da pasta raiz do seu projeto crie um arquivo com o nome de Gemfile com o seguinte conteúdo:
Após criar e salvar este arquivo, em seu terminal execute o comando bundle install.
Iniciando o RSpec
Já executamos o bundle install, então só precisamos executar o comando para iniciar o RSpec em seu terminal: rspec init
Após executar o comando, você vai ter a seguinte estrutura:
Rake para executar o RSpec
Vamos utilizar o rake para executar nossa task do RSpec, o Rake é um lib de utilitários para build muito utilizada no ruby. Para utilizarmos basta criar um arquivo na raiz do projeto chamado Rakefile. Esse arquivo deve conter as seguintes linhas:
Para o momento, o que nos importa é o 't.pattern', serve para buscar os padrões dos nossos cenários de testes e o 'verbose' que é para retornar um output mais detalhado.
Criação dos testes
A primeira coisa que precisamos configurar é o nosso url base do sistema. Para isso dentro do arquivo ‘spec/spec_helper.rb’ vamos adicionar as seguintes linhas.
No topo do arquivo, vamos requerer o acesso à lib httparty:
Após, uma linha acima do 'end' da configuração, vamos adicionar um before usando o ':all' para que ele seja executado uma vez antes de todos os testes e não em cada teste:
Podemos notar acima que configuramos nossa url base para um serviço que utilizaremos apenas para esses testes.
Cenário de teste request válida.
Para criar o cenário de teste vamos adicionar um arquivo com o nome de users_test.rb já que vamos testar o endpoint de usuários.
Novamente requisitamos o uso do httparty, após isso utilizamos o RSpec.describe para descrever qual parte vamos testar, e o it para descrever o que vamos fazer. Repare que na linha que temos a variável response, estamos fazendo nosso GET para a api de usuários e na linha de baixo estamos fazendo a validação do código de retorno da api, utilizando o response.code e assim já temos um teste para a api.
Cenário de teste de validação do contrato e tipagens de campos
Para complicar um pouco, fiz um exemplo em que eu faço uma validação nos campos conforme a documentação do contrato.
Conforme o cenário anterior a variável response tem o retorno da requisição para o endpoint ‘/users’ e abaixo disso realizo um for no corpo da requisição e para cada item faço a verificação de qual é o tipo dele. Com testes assim podemos muitas vezes prevenir alguns bugs de quebra de contrato que costumam acontecer.
E por fim para executar a automação basta estar na pasta raiz do projeto e executar o seguinte comando em seu terminal: rake spec que seus testes já vão ser executados.
Adicionando report em HTML do RSpec para o projeto
Para adicionarmos um report é bem fácil, basta ir até o nosso Rakefile e adicionarmos a seguinte linha:
Ao executar novamente vai ser criado uma pasta chamada reports e dentro dela um html, mais ou menos assim:
Conclusão
Chegamos ao final e se tudo deu certo nós já temos testes automatizados para seus serviços rodando e podendo facilmente ser integrado em seu CI.
Se quiser conferir o projeto inteiro é só acessar ele no Github: httparty_rspec.
E o mais importante, se tiver alguma dúvida, comenta no post, vamos conversar!