httparty nada mais é do que uma gem ruby que simplifica a manipulação de requisições e respostas REST, ou seja, ele gerará respostas para as requisições feitas.

REST — Representational State Transfer

Em português Transferência de Estado Representacional, é um estilo de arquitetura que define um conjunto de restrições e propriedades baseados em HTTP.

Então chega de teoria e vamos pra prática.

Pré requisitos

Como é uma gem, precisamos inserir no nosso arquivo GemFile, vamos aproveitar e inserir a também a gem faker quer serve para criar coisas falsas(nome, sobrenome, documento, endedreço e etc…), coisa linda não é ?

gem "httparty"
gem "faker"

Após inserir e rodar o bundle install para instalar as gems e suas dependências, vamos requerir nossas gem no arquivo env.rb.

require "cucumber"require "httparty"require "httparty/request"require "httparty/response/headers"require "faker"require "rspec"

Pronto! nosso ambiente já está pronto para fazer testes de API.

Vamos realizar o primeiro teste realizando uma consulta usando o método ‘get’. Então primeiramente vamos escrever nossa funcionalidade em um novo arquivo com o nome de get.feature.

#language: ptFuncionalidade: Aprendendo o verbo GETEu, como interessado em automaçãoDesejo aprender como automatizar o verbo GETPara ser um QA melhor.@getCenario: Automatizando GETDado que eu faça um GET no endpoint clientesEntao o retorno dele será todos os clientes cadastrados

Após criar nossa feature vamos rodar o bundle exec cucumber -t @get para criar nossos step de teste e a seguinte saída será gerada:

Dado("que eu faça um GET no endpoint clientes") doendEntao("o retorno dele será todos os clientes cadastrados") doend

Agora vamos implementar nossos steps, A sintaxe do http é basicamente:

Httparty . Método HTTP (“url”, opções)

E aceita os seguintes métodos http:

HTTParty.get("http://address.com.br/api")
HTTParty.post("http://address.com.br/api")
HTTParty.put("http://address.com.br/api")
HTTParty.delete("http://address.com.br/api")
  • GET=> Retorna todos os registros
  • POST => Cadastra um novo registro
  • PUT => Altera os dados do registro de acordo com o ID
  • DELETE => Deleta o registro de acordo com o ID

Então vamos realizar nosso metódo get no nosso primeiro step e ficará mais ou menos da seguinte maneira:

Dado("que eu faça um GET no endpoint clientes") do@get_clients = HTTParty.get 'https://jsonplaceholder.typicode.com/posts'end

Onde passamos o valor do HTTParty.get batendo no exemplo de API através do seguinte link: https://jsonplaceholder.typicode.com/posts para a variável @get_clients.

Nosso primeiro step está pronto, agora vamos para o segundo steps onde vamos validar o retorno:

Entao("o retorno dele será todos os clientes cadastrados") doputs @get_clients.bodyputs "Quantidade de posts: " +@get_clients.size.to_sputs @get_clients.messageputs @get_clients.codeexpect(@get_clients.code).to eq 200end

Na segunda linha estamos “imprimindo” todos os registros

Na terceira linha estamos mostrando quantos registros retornaram = 100

Na quarta linha o retorno da mensagem = ok

E na quinta linha status code da requisição = 200

E na quinta linha estamos comparando o status code com o resultado esperado, se é igual a 200

Se rodarmos o teste novamente, o teste vai passar com sucesso e retornar tudo conforme descrito acima, é lindo ou não é ?

Existem vários status code, segue umlink bem legal com todos os status code:

Feito o método “get”, vamos dar mais um exemplo e fazer o método “post”. Então novamente vamos criar um novo arquivo post.feature.

#language: ptFuncionalidade: Aprendendo o verbo POSTEu, como interessado em automaçãoDesejo aprender como automatizar o verbo GETPara ser um QA melhor.@postCenario: Automatizando GETDado que eu faça um POST no endpoint clientesEntao um novo clientes será cadastrados

Rodar bundle exec cucumber -t @post para gerar os steps

Dado("que eu faça um POST no endpoint clientes") doendEntao("um novo clientes será cadastrados") doend

O post é um pouco diferente do get, pois o get só retorna e o post cadastra algo, então precisamos passar todas as informações de acordo com o contrato definido pela api, nesse caso vamos criar um novo cliente que possui id, nome, email e corpo. Pra nos ajudar vamos usar a gem faker para gerar dados falsos.

Então no primeiro step nos vamos montar o corpo da requisição que é no formato json e ficará da seguinte maneira:

@body = {"postId": 666,"id": 666,"name": 'Faker::StarWars.planet',"email": Faker::Internet.email,"body": Faker::ChuckNorris.fact}.to_json@post_clients = HTTParty.post 'https://jsonplaceholder.typicode.com/comments',:body => @body,:headers => {"Content-Type" => 'application/json'}
end

Após configurar o corpo da requisição, informamos para o httparty que queremos uma requisição do tipo post passando o endereço o corpo e o cabeçalho da nossa api.

No segundo steps só vamos validar o retorno da requisição e ficará da seguinte maneira:

Entao("um novo clientes será cadastrados") doputs @post_clients.bodyputs @post_clients.messageexpect(@post_clients.code).to eq 201end

Na segunda linha estamos “imprimindo” o corpo da requisição que enviamos

Na terceira estamos “imprimindo” qual foi a mensagem de retorno = Created

E na quarta estamos validando se status code retornou conforme o esperado = 201 que é = Created.

E por hoje é isso…

Pra alegria de todos e felicidade geral da nação, o pai vai deixar o projeto final no git através do link:

https://github.com/pedrohjmartins/base_project_api.git

Thank you guys and see you next article

Engenheiro de teste de software, cervejeiro, churrasqueiro e pai. Sabe app funcionando, cerveja gelada, churrasco bem-feito, família reunida? Não gosto, eu amo.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store