AUTOMAÇÃO DE TESTES
em API com HTTParty e
Cucumber
agosto2018
RAFAEL BERÇAM | QA
O que é uma API?
● Application Programming Interface, ou em
português, Interface de programação de
aplicações.
AUTOMAÇÃO DE TESTES API
O que é uma API?
AUTOMAÇÃO DE TESTES API
AUTOMAÇÃO DE TESTES API
AUTOMAÇÃO DE TESTES API
O que é uma API?
AUTOMAÇÃO DE TESTES API
Pré requisitos
● ruby > 2.0.0
● gem cucumber
● gem multi_xml
● gem httparty
● gem rspec
AUTOMAÇÃO DE TESTES API
Teste Com HTTParty
Exemplos
#Acessando o método de forma rápida
reponse = HTTParty.get(‘http://end.com/end’)
puts response.body
puts response.code
puts response.message
puts response.headers
AUTOMAÇÃO DE TESTES API
Teste Com HTTParty
Exemplos
#Abstraindo métodos da classe
class Exemplo
include HTTParty
base_uri ‘http://end.com’
def initialize (headers)
@options = {:headers => headers}
end
def getRequest
self.class.get(“/end”,@options)
end
end
teste = Exemplo.new("accept" => "*/*")
puts teste.getRequest
AUTOMAÇÃO DE TESTES API
Teste Com HTTParty
Método GET
#GET HTTParty.rb
require ‘httparty’
response = HTTParty.get(“http://localhost:3000/bank”)
puts “response code: #{response.code}”
puts “response message: #{response.message}”
puts “response headers: #{response.headers}”
puts “response body: #{response.body}”
AUTOMAÇÃO DE TESTES API
Teste Com HTTParty
Método GET
AUTOMAÇÃO DE TESTES API
Teste Com HTTParty
Método POST
#POST HTTParty.rb
require ‘httparty’
response = HTTParty.post(“http://localhost:3000/bank”,
:body => {"code":"394", "name": "Bradesco Financiamentos"})
puts “response code: #{response.code}”
puts “response message: #{response.message}”
puts “response headers: #{response.headers}”
puts “response body: #{response.body}”
AUTOMAÇÃO DE TESTES API
Teste Com HTTParty
Método POST
AUTOMAÇÃO DE TESTES API
Teste Com HTTParty
AUTOMAÇÃO DE TESTES API
Product Owner
#POST HTTParty.rb
require ‘httparty’
response = HTTParty.post(“http://localhost:3000/bank”,
:body => {"code":"394", "name": "Bradesco Financiamentos"})
puts “response code: #{response.code}”
puts “response message: #{response.message}”
puts “response headers: #{response.headers}”
puts “response body: #{response.body}”
AUTOMAÇÃO DE TESTES API
BDD
AUTOMAÇÃO DE TESTES API
BDD
BDD: Behavior Driven Development
TDD: Test Driven Development
AUTOMAÇÃO DE TESTES API
#Digitar no terminal
cucumber --init
> create features
> create features/step_definitions
> create features/support
> create features/support/env.rb
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● Vamos incrementar a estrutura de pastas
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
Projeto: Estrutura e Configuração
● [hooks] -> Gatilhos (@Before , @After…)
● [specifications] -> Features
● [httparty] -> Request Methods
● [step_definitions] -> Expressões regulares
AUTOMAÇÃO DE TESTES API
Feature
Hook.rb
steps.rb
httparty.rb
$- console
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● Dentro da pasta ‘features/specifications’
vamos criar um novo arquivo com nome
bank.feature
VAMOS VER NA PRÁTICA?
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
#language: pt
@bank
Funcionalidade: Manter dados de Bancos
Como um cliente da API
Eu quero realizar as requisições nos métodos
A fim de manipular as informações do cadastro de Banco
Cenário: Cadastrar Banco
Dado a rota da API para manter o cadastro de Banco
Quando realizar uma requisição usando o método POST
Então a API irá retornar os dados do cadastro do Banco
respondendo o código 201
E a mensagem "Created"
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● features/step_definitions/bank_steps.rb
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● Agora vamos escrever um código parecido ao
nosso primeiro teste.
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● Agora precisa ser feito a configuração do
ambiente no arquivo features/support/env.rb
e importar o HTTParty para nosso projeto.
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
OOOOOOHHHHHHH
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
gem install faker
● Esta gem é uma porta da biblioteca Data::Faker do Perl
que gera dados falsos para preenchimento de campos
para testes automatizados.
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● Lembre-se de adicionar ao nosso arquivo env.rb a gem
faker para ser reconhecida.
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● Hooks: ‘features/hooks/bank_hook.rb’
● Hooks fornecem uma maneira de interceptar
chamadas de método em objetos e pode ser
implementada usando técnicas de meta-programação
de Ruby.
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
Before ‘@bank’ do
@name = Faker::Bank.name
@code = Faker::Bank.account_number(3)
end
● Então agora temos as variáveis ‘@name’ e a ‘@code’
cadastrado com dados fakers para realizar os testes
vamos alterar nosso arquivo
‘features/step_definitios/bank_steps.rb’ para receber
essas variáveis.
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● inserindo as variáveis na chamada
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● [httparty]: baseado no Page Object Pattern.
● Vamos criar nossas classes para armazenar as
requisições do HTTParty no diretório
‘features/httparty/bank_request.rb’
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
#bank_request.rb
class Bank
include HTTParty
base_uri “http://localhost:3000”
def initialize(body)
@options = {:body => body}
end
def postBank
self.class.post(“/bank”, @options)
end
end
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● Agora vamos alterar o arquivo bank_hooks.rb para
criar a instância da classe Bank.
Before ‘@bank’ do
@name = Faker::Bank.name
@code = Faker::Bank.account_number(3)
@body = {“name”: @name, “code”: @code}
@bank = Bank.new(@body)
end
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● Por último vamos alterar o arquivo bank_steps.rb para
chamar o método post da classe
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
● SPECS: Para finalizar nosso teste a API precisa realizar
alguns testes para garantir o que está sendo feito e se
o resultado disso está correto, e para isso vamos
utilizar o rspec do Ruby para realizar asserções
dentro dos nossos testes.
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
Projeto: Estrutura e Configuração
AUTOMAÇÃO DE TESTES API
HTTParty: HTTP Methods
[
Net::HTTP::Get,
Net::HTTP::Post,
Net::HTTP::Patch,
Net::HTTP::Put,
Net::HTTP::Delete,
Net::HTTP::Head,
Net::HTTP::Options,
Net::HTTP::Move,
Net::HTTP::Copy
]
AUTOMAÇÃO DE TESTES API
● GET ‘/bank’ => Retorna todos os registros
● GET ‘/bank/:id’ => Retorna um registro de acordo com o ID
● POST ‘/bank’ => Cadastra um novo registro
● PUT ‘/bank/:id’ => Altera os dados do registro de acordo com
o ID
● DELETE ‘/bank/:id’ => Deleta o registro de acordo com o ID
HTTParty: HTTP Methods
AUTOMAÇÃO DE TESTES API
É HORA DE TESTAR!
É HORA DE TESTAR!
AUTOMAÇÃO DE TESTES API
Exemplos de
configuração!
AUTOMAÇÃO DE TESTES API
Exemplos
● Autenticação (oauth2)
AUTOMAÇÃO DE TESTES API
Exemplos
● Autenticação (oauth2)
AUTOMAÇÃO DE TESTES API
Exemplos
● Autenticação (oauth2)
AUTOMAÇÃO DE TESTES API
Exemplos
● Autenticação (oauth2)
AUTOMAÇÃO DE TESTES API
Exemplos
● Autenticação (oauth2)
AUTOMAÇÃO DE TESTES API
● Profile (cucumber.yml)
Extrai argumentos de linha de comando de cucumber.yml que
podem ser definidos como strings e arrays
Exemplos
AUTOMAÇÃO DE TESTES API
● Profile (cucumber.yml)
No arquivo de ambiente você define qual configuração irá
utilizar
Exemplos
AUTOMAÇÃO DE TESTES API
● Profile (cucumber.yml)
Exemplos
AUTOMAÇÃO DE TESTES API
● Profile (cucumber.yml)
Exemplos
DÚVIDAS E PERGUNTAS?
AUTOMAÇÃO DE TESTES API
AUTOMAÇÃO DE TESTES API
● https://github.com/jnunemaker/httparty
● https://github.com/stympy/faker
● https://medium.com/@JanisGraubins/open-banking-api-
explained-in-3-gifs-b806f14ca2ca
● https://thallitaceleste.blogspot.com/2015/12/bdd.html
● https://www.slideshare.net/elias.nogueira/bdd-no-
automao-de-testes
Referências
AUTOMAÇÃO DE TESTES API
● https://github.com/rbercam/cmobiTalksHTTParty.git
Repositório
Obrigado!
Rafael Berçam
QA | conta.MOBI
rafael.bercam@conta.mobi
www.conta.mobi

Meet up teste api htt-party cucumber

  • 2.
    AUTOMAÇÃO DE TESTES emAPI com HTTParty e Cucumber agosto2018 RAFAEL BERÇAM | QA
  • 3.
    O que éuma API? ● Application Programming Interface, ou em português, Interface de programação de aplicações.
  • 4.
    AUTOMAÇÃO DE TESTESAPI O que é uma API? AUTOMAÇÃO DE TESTES API
  • 5.
  • 6.
    AUTOMAÇÃO DE TESTESAPI O que é uma API?
  • 7.
    AUTOMAÇÃO DE TESTESAPI Pré requisitos ● ruby > 2.0.0 ● gem cucumber ● gem multi_xml ● gem httparty ● gem rspec
  • 8.
    AUTOMAÇÃO DE TESTESAPI Teste Com HTTParty Exemplos #Acessando o método de forma rápida reponse = HTTParty.get(‘http://end.com/end’) puts response.body puts response.code puts response.message puts response.headers
  • 9.
    AUTOMAÇÃO DE TESTESAPI Teste Com HTTParty Exemplos #Abstraindo métodos da classe class Exemplo include HTTParty base_uri ‘http://end.com’ def initialize (headers) @options = {:headers => headers} end def getRequest self.class.get(“/end”,@options) end end teste = Exemplo.new("accept" => "*/*") puts teste.getRequest
  • 10.
    AUTOMAÇÃO DE TESTESAPI Teste Com HTTParty Método GET #GET HTTParty.rb require ‘httparty’ response = HTTParty.get(“http://localhost:3000/bank”) puts “response code: #{response.code}” puts “response message: #{response.message}” puts “response headers: #{response.headers}” puts “response body: #{response.body}”
  • 11.
    AUTOMAÇÃO DE TESTESAPI Teste Com HTTParty Método GET
  • 12.
    AUTOMAÇÃO DE TESTESAPI Teste Com HTTParty Método POST #POST HTTParty.rb require ‘httparty’ response = HTTParty.post(“http://localhost:3000/bank”, :body => {"code":"394", "name": "Bradesco Financiamentos"}) puts “response code: #{response.code}” puts “response message: #{response.message}” puts “response headers: #{response.headers}” puts “response body: #{response.body}”
  • 13.
    AUTOMAÇÃO DE TESTESAPI Teste Com HTTParty Método POST
  • 14.
    AUTOMAÇÃO DE TESTESAPI Teste Com HTTParty
  • 15.
    AUTOMAÇÃO DE TESTESAPI Product Owner #POST HTTParty.rb require ‘httparty’ response = HTTParty.post(“http://localhost:3000/bank”, :body => {"code":"394", "name": "Bradesco Financiamentos"}) puts “response code: #{response.code}” puts “response message: #{response.message}” puts “response headers: #{response.headers}” puts “response body: #{response.body}”
  • 16.
  • 17.
    AUTOMAÇÃO DE TESTESAPI BDD BDD: Behavior Driven Development TDD: Test Driven Development
  • 18.
    AUTOMAÇÃO DE TESTESAPI #Digitar no terminal cucumber --init > create features > create features/step_definitions > create features/support > create features/support/env.rb Projeto: Estrutura e Configuração
  • 19.
    AUTOMAÇÃO DE TESTESAPI ● Vamos incrementar a estrutura de pastas Projeto: Estrutura e Configuração
  • 20.
    AUTOMAÇÃO DE TESTESAPI Projeto: Estrutura e Configuração ● [hooks] -> Gatilhos (@Before , @After…) ● [specifications] -> Features ● [httparty] -> Request Methods ● [step_definitions] -> Expressões regulares
  • 21.
    AUTOMAÇÃO DE TESTESAPI Feature Hook.rb steps.rb httparty.rb $- console Projeto: Estrutura e Configuração
  • 22.
    AUTOMAÇÃO DE TESTESAPI ● Dentro da pasta ‘features/specifications’ vamos criar um novo arquivo com nome bank.feature VAMOS VER NA PRÁTICA? Projeto: Estrutura e Configuração
  • 23.
    AUTOMAÇÃO DE TESTESAPI #language: pt @bank Funcionalidade: Manter dados de Bancos Como um cliente da API Eu quero realizar as requisições nos métodos A fim de manipular as informações do cadastro de Banco Cenário: Cadastrar Banco Dado a rota da API para manter o cadastro de Banco Quando realizar uma requisição usando o método POST Então a API irá retornar os dados do cadastro do Banco respondendo o código 201 E a mensagem "Created" Projeto: Estrutura e Configuração
  • 24.
    AUTOMAÇÃO DE TESTESAPI Projeto: Estrutura e Configuração
  • 25.
    AUTOMAÇÃO DE TESTESAPI ● features/step_definitions/bank_steps.rb Projeto: Estrutura e Configuração
  • 26.
    AUTOMAÇÃO DE TESTESAPI ● Agora vamos escrever um código parecido ao nosso primeiro teste. Projeto: Estrutura e Configuração
  • 27.
    AUTOMAÇÃO DE TESTESAPI ● Agora precisa ser feito a configuração do ambiente no arquivo features/support/env.rb e importar o HTTParty para nosso projeto. Projeto: Estrutura e Configuração
  • 28.
    AUTOMAÇÃO DE TESTESAPI OOOOOOHHHHHHH Projeto: Estrutura e Configuração
  • 29.
    AUTOMAÇÃO DE TESTESAPI Projeto: Estrutura e Configuração
  • 30.
    AUTOMAÇÃO DE TESTESAPI gem install faker ● Esta gem é uma porta da biblioteca Data::Faker do Perl que gera dados falsos para preenchimento de campos para testes automatizados. Projeto: Estrutura e Configuração
  • 31.
    AUTOMAÇÃO DE TESTESAPI ● Lembre-se de adicionar ao nosso arquivo env.rb a gem faker para ser reconhecida. Projeto: Estrutura e Configuração
  • 32.
    AUTOMAÇÃO DE TESTESAPI ● Hooks: ‘features/hooks/bank_hook.rb’ ● Hooks fornecem uma maneira de interceptar chamadas de método em objetos e pode ser implementada usando técnicas de meta-programação de Ruby. Projeto: Estrutura e Configuração
  • 33.
    AUTOMAÇÃO DE TESTESAPI Before ‘@bank’ do @name = Faker::Bank.name @code = Faker::Bank.account_number(3) end ● Então agora temos as variáveis ‘@name’ e a ‘@code’ cadastrado com dados fakers para realizar os testes vamos alterar nosso arquivo ‘features/step_definitios/bank_steps.rb’ para receber essas variáveis. Projeto: Estrutura e Configuração
  • 34.
    AUTOMAÇÃO DE TESTESAPI ● inserindo as variáveis na chamada Projeto: Estrutura e Configuração
  • 35.
    AUTOMAÇÃO DE TESTESAPI Projeto: Estrutura e Configuração
  • 36.
    AUTOMAÇÃO DE TESTESAPI ● [httparty]: baseado no Page Object Pattern. ● Vamos criar nossas classes para armazenar as requisições do HTTParty no diretório ‘features/httparty/bank_request.rb’ Projeto: Estrutura e Configuração
  • 37.
    AUTOMAÇÃO DE TESTESAPI #bank_request.rb class Bank include HTTParty base_uri “http://localhost:3000” def initialize(body) @options = {:body => body} end def postBank self.class.post(“/bank”, @options) end end Projeto: Estrutura e Configuração
  • 38.
    AUTOMAÇÃO DE TESTESAPI ● Agora vamos alterar o arquivo bank_hooks.rb para criar a instância da classe Bank. Before ‘@bank’ do @name = Faker::Bank.name @code = Faker::Bank.account_number(3) @body = {“name”: @name, “code”: @code} @bank = Bank.new(@body) end Projeto: Estrutura e Configuração
  • 39.
    AUTOMAÇÃO DE TESTESAPI ● Por último vamos alterar o arquivo bank_steps.rb para chamar o método post da classe Projeto: Estrutura e Configuração
  • 40.
    AUTOMAÇÃO DE TESTESAPI Projeto: Estrutura e Configuração
  • 41.
    AUTOMAÇÃO DE TESTESAPI ● SPECS: Para finalizar nosso teste a API precisa realizar alguns testes para garantir o que está sendo feito e se o resultado disso está correto, e para isso vamos utilizar o rspec do Ruby para realizar asserções dentro dos nossos testes. Projeto: Estrutura e Configuração
  • 42.
    AUTOMAÇÃO DE TESTESAPI Projeto: Estrutura e Configuração
  • 43.
    AUTOMAÇÃO DE TESTESAPI Projeto: Estrutura e Configuração
  • 44.
    AUTOMAÇÃO DE TESTESAPI HTTParty: HTTP Methods [ Net::HTTP::Get, Net::HTTP::Post, Net::HTTP::Patch, Net::HTTP::Put, Net::HTTP::Delete, Net::HTTP::Head, Net::HTTP::Options, Net::HTTP::Move, Net::HTTP::Copy ]
  • 45.
    AUTOMAÇÃO DE TESTESAPI ● GET ‘/bank’ => Retorna todos os registros ● GET ‘/bank/:id’ => Retorna um registro de acordo com o ID ● POST ‘/bank’ => Cadastra um novo registro ● PUT ‘/bank/:id’ => Altera os dados do registro de acordo com o ID ● DELETE ‘/bank/:id’ => Deleta o registro de acordo com o ID HTTParty: HTTP Methods
  • 46.
    AUTOMAÇÃO DE TESTESAPI É HORA DE TESTAR! É HORA DE TESTAR!
  • 47.
    AUTOMAÇÃO DE TESTESAPI Exemplos de configuração!
  • 48.
    AUTOMAÇÃO DE TESTESAPI Exemplos ● Autenticação (oauth2)
  • 49.
    AUTOMAÇÃO DE TESTESAPI Exemplos ● Autenticação (oauth2)
  • 50.
    AUTOMAÇÃO DE TESTESAPI Exemplos ● Autenticação (oauth2)
  • 51.
    AUTOMAÇÃO DE TESTESAPI Exemplos ● Autenticação (oauth2)
  • 52.
    AUTOMAÇÃO DE TESTESAPI Exemplos ● Autenticação (oauth2)
  • 53.
    AUTOMAÇÃO DE TESTESAPI ● Profile (cucumber.yml) Extrai argumentos de linha de comando de cucumber.yml que podem ser definidos como strings e arrays Exemplos
  • 54.
    AUTOMAÇÃO DE TESTESAPI ● Profile (cucumber.yml) No arquivo de ambiente você define qual configuração irá utilizar Exemplos
  • 55.
    AUTOMAÇÃO DE TESTESAPI ● Profile (cucumber.yml) Exemplos
  • 56.
    AUTOMAÇÃO DE TESTESAPI ● Profile (cucumber.yml) Exemplos
  • 57.
  • 58.
    AUTOMAÇÃO DE TESTESAPI ● https://github.com/jnunemaker/httparty ● https://github.com/stympy/faker ● https://medium.com/@JanisGraubins/open-banking-api- explained-in-3-gifs-b806f14ca2ca ● https://thallitaceleste.blogspot.com/2015/12/bdd.html ● https://www.slideshare.net/elias.nogueira/bdd-no- automao-de-testes Referências
  • 59.
    AUTOMAÇÃO DE TESTESAPI ● https://github.com/rbercam/cmobiTalksHTTParty.git Repositório
  • 60.
    Obrigado! Rafael Berçam QA |conta.MOBI rafael.bercam@conta.mobi www.conta.mobi