SlideShare uma empresa Scribd logo
Autor: Reinaldo Mateus Rossetti Junior
Analista deTestes
• Nessa postagem, vamos resolver um desafio para um emprego, uma vaga de
automação de testes. O desafio é testar uma Rest API chamada Mollom API.
Para o desafio ficar melhor, vamos adicionar o Maven e o Cucumber. Esse
pessoal de testes é “arretado” (como dizem os paraenses). Além de resolver,
vamos melhorar o desafio.
• O ponto forte do desafio é adicionar o Page Object, ou seja usar o mesmo
conceito. O bom do conceito, de forma simples, é que você separa bem os
objetos da classe para ser reutilizada, facilitando, assim, a manutenção e reuso
das classes.
2 – Dado uma API pública e sua documentação em https://docs.acquia.com/mollom/api/rest/list,
criar um teste que valide o seguinte:
(deve-se utilizar a URL http://dev.mollom.com/v1/ para as chamadas nessa API):
· Criar um novo site definindo uma URL e um email para o mesmo;
· Realizar uma chamada para validar que foi criado com sucesso;
· Fazer um update somente da URL desse site e validar que foi feito com sucesso;
· Fazer um update somente do email desse site e validar que foi feito com sucesso.
· DESAFIO: utilize um conceito similar ao Page Object para encapsular as chamadas para a API.
• Encapsular em ProgramaçãoOrientada a Objetos (POO) significa separar o
programa em partes, o mais isolado possível. A idéia é tornar o software
mais flexível, fácil de modificar e de criar novas implementações. O
encapsulamento serve para controlar o acesso aos atributos e métodos de
uma classe.
• Primeira coisa que precisamos entender é como funciona uma Rest API. Uma Rest API
trabalha com o conceito de chaves entre cliente -> servidor, ou seja você precisa de uma
chave pública e o servidor tem uma chave privada.Como no exemplo abaixo, ele solicita a
autenticação e o servidor fornece as chaves.
• Uma vez com a chave pública em mãos (token), ele faz uma busca no site (request), e no
retorno ele recebe um JSON com os dados que foram solicitados (response). Com isso ele
monta a página do resultado da busca.
Fonte: www.websequencediagrams.com
Cucumber Framework
• Cucumber é um framework escrito por Aslak
Hellesøy baseado no RSpec Story Runner,
primariamente feito para Ruby, depois evolui
para várias linguagens como Java, Jython,
.NET, Flex, Lua etc. O mesmo foi traduzido
para mais de 40 línguas.
• O cucumber permite a escrita das
features/scenario/steps diretamente no código
fonte (Behaviour Driven Development ),
tornado assim, mais fácil o entendimento e a
manutenção do mesmo.
Create a site
Mollom é um módulo para WordPress e Drupal, que avalia a qualidade do conteúdo e bloqueia spam
em seu site por meio de técnicas de aprendizado de máquina e análise de linguagem. Mollom
fornece uma API REST que é baseada em padrões RESTful.
Como obter as chaves no Mollom API? Existe dois ambientes: um de Teste e outro de Produção. No
ambiente de teste quando criamos o site via POST ele nos fornece a chave pública e privada. No
ambiente de produção você faz o cadastro ao logar no site (no menu Site Manager) e gera as
chaves. Acesse https://docs.acquia.com/mollom/install/drupal8 para mais informações.
• POST http://rest.mollom.com/v1/site?parameters
Recebemos a resposta no formato ao lado:
<response>
<code>200</ code>
<message>Error message</message>
<site>
<id>siteId</id>
<publicKey>publicKey</publicKey>
<privateKey>privateKey</privateKey>
<url>example.com</url>
<email>mail@example.com</email>
<expectedLanguages>
<languageCode>en</languageCode>
</expectedLanguages>
<subscriptionType></subscriptionType>
<platformName>Drupal</platformName>
<platformVersion>7.2</platformVersion>
<clientName>Mollom</clientName>
<clientVersion>7.x-1.0</clientVersion>
</site>
</response>
Validação
Error handling
Returned Status Description:
• HTTP 200 OK ("OK") with raw media content CAPTCHA resource exists and can be delivered
• HTTP 404 Not Found ("Unknown CAPTCHA resource") with empty response CAPTCHA resource
does not exist.
• HTTP 409 Conflict ("CAPTCHA was processed already") with empty response CAPTCHA resource
exists, but was already processed/updated (solved or not), and can no longer be shown or solved.
• HTTP 410 Gone ("Expired CAPTCHA") with empty response CAPTCHA resource previously
existed, but has expired and can no longer be shown or solved.
No JSON vem o código de Resposta. Isso quer dizer que toda vez que a resposta for realizada com
sucesso, o JSON vai me retornar o código 200, então nosso Assert ficaria assim:
Assert.assertEquals(200, site_create_response);
Nossa Feature
Feature: Dado uma API pública -> MollomAPI e sua documentação para validacao
Scenario Outline: Criar um novo site
Given Dado um "<Site>" para as chamadas dessa API
When Criar um novo site definindo uma "<URL>" e um "<Email>" para o mesmo
ThenValidar que foi criado com sucesso
Examples:
| Site | URL | Email |
| http://dev.mollom.com/v1/site | www.vidadetestador.com | reiload@gmail.com |
Scenario Outline: Fazer update da url e do email no novo site
Given Fazer um update somente da "<URL_Update>" desse site
And Fazer um update somente do "<Email_Update>" desse site
ThenValidar que foi feito com sucesso
Examples:
| URL_Update | Email_Update |
| www.vidadetestadores.com | reinaldo.rossetti@outlook.com |
Dica 01 – Armazenando dados.
• Uma dica importante é criar um arquivo de configuração, ou seja, o que é
comum em todos os testes poderia ser colocado nesse arquivo para uso.
Assim não precisamos passar todas as vezes o site e a chave pública como
parâmetro na função.
• Armazenamos no arquivo properties o site e a public key.
mollom_site = http://dev.mollom.com/v1/site
publicKey = zcxr5a5n8ebq1nfsaajflswui1jaas33
Dica 02 – Entendendo a Lógica.
• Outra dica importante é testar o resultado dos valores primeiro, antes da implementação (fazer um teste
manual pra conhecer a lógica é sempre bom). Para isso, usamos um plugin no Chrome chamado de
Advanced RestClient:
• No nosso aplicativo adicionamos a URL, junto com a chave e, no fim, o ponto de interrogação. A partir da
interrogação vêm os parâmetros. Diferentemente do GET, o POST você não vê na URL, como o próprio
aplicativo fala “Values from here will beURL encoded!”. Desse resultado que você vai entender a lógica,
resultado positivo -> código 200.Tente enviar um valor errado pra entender os erros.
1
2
3
Nosso código:
String code = xmlPath.get("code");
String publicKey = xmlPath.get("site.publicKey");
String privateKey = xmlPath.get("site.privateKey");
Apache Maven
É uma ferramenta de automação de compilação utilizada primariamente em projetos
Java.
No meu ponto de vista, seu melhor benefício é centralizar informações de forma
organizada no projeto, incluir suas dependências (fazemos isso no pom.xml),
armazenar os resultados dos testes, documentação etc.
Benefícios:
• compilação do código fonte de computador em código binário;
• empacotamento do código binário;
• execução de testes;
• implantação para sistemas de produção;
• criação de documentação e / ou notas de lançamento.
Nosso código: git clone https://reiload@bitbucket.org/reiload/cucumber_rest_api.git
Resultado!
Agora vamos ao resultado dos nossos testes. Temos dois 2 cenários e 6 passos. Rodando o nosso
teste, todos os cenários e passos foram realizados com sucesso.
Olhando a Feature e os Steps fica fácil entender o nosso código, facilitando a comunicação e a
manutenção do mesmo. Foi implementado o Data Tables. É praticamente uma tabela como no Excel:
mudando os valores da tabela, muda os valores do seu teste, assim os nossos testes ficam mais dinâmicos.
Bom, espero que tenham gostado! Para se aprofundar mais sobre o assunto, leia as referências.
Referências:
• https://docs.acquia.com/mollom/api/rest/list
• http://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991
• https://code.google.com/p/selenium/wiki/PageObjects
• https://github.com/jayway/rest-assured
• https://code.google.com/p/rest-assured/wiki/Usage#XML_(using_XmlPath_)
• https://cucumber.io/
• http://luizricardo.org/2014/06/instalando-configurando-e-usando-o-maven-para-gerenciar-
suas-dependencias-e-seus-projetos-java/
Autor: Reinaldo Mateus Rossetti Junior
Analista deTestes

Mais conteúdo relacionado

Mais procurados

Teste de software
Teste de softwareTeste de software
Teste de software
COTIC-PROEG (UFPA)
 
Teste de software
Teste de softwareTeste de software
Teste de software
Rafael Sanches
 
Qualidade de Software - Introdução
Qualidade de Software - Introdução Qualidade de Software - Introdução
Qualidade de Software - Introdução
Elaine Cecília Gatto
 
Introdução à Qualidade de Software
Introdução à Qualidade de SoftwareIntrodução à Qualidade de Software
Introdução à Qualidade de Software
Cloves da Rocha
 
Automação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SCAutomação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SC
Mayara Fernandes
 
Teste de software
Teste de softwareTeste de software
Teste de software
Daniel Paulo de Assis
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de software
Rondinelli Mesquita
 
Front End x Back End
Front End x Back EndFront End x Back End
Front End x Back End
Tatiane Aguirres Nogueira
 
Testes de Software
Testes de SoftwareTestes de Software
Testes de Software
Capgemini
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágil
Elias Nogueira
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
Daniel Brandão
 
Banner WhatsApp - Objetos no corredor
Banner WhatsApp - Objetos no corredorBanner WhatsApp - Objetos no corredor
Banner WhatsApp - Objetos no corredor
sindiconet
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
Pedro De Almeida
 
Testes de Integração
Testes de IntegraçãoTestes de Integração
Testes de Integração
André Faria Gomes
 
Introdução ao Teste de Software
Introdução ao Teste de SoftwareIntrodução ao Teste de Software
Introdução ao Teste de Software
X25 Treinamento e Consultoria
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
Kleitor Franklint Correa Araujo
 
Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)
Elmano Cavalcanti
 
Sistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - IntroduçãoSistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - Introdução
Adriano Teixeira de Souza
 
Análise e Projeto de Sistemas com UML e Java
Análise e Projeto de Sistemas com UML e JavaAnálise e Projeto de Sistemas com UML e Java
Análise e Projeto de Sistemas com UML e Java
armeniocardoso
 
Métodos e técnicas de Pesquisa
Métodos e técnicas de PesquisaMétodos e técnicas de Pesquisa
Métodos e técnicas de Pesquisa
MBA em Marketing Digital e Gestão de Projetos Web
 

Mais procurados (20)

Teste de software
Teste de softwareTeste de software
Teste de software
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Qualidade de Software - Introdução
Qualidade de Software - Introdução Qualidade de Software - Introdução
Qualidade de Software - Introdução
 
Introdução à Qualidade de Software
Introdução à Qualidade de SoftwareIntrodução à Qualidade de Software
Introdução à Qualidade de Software
 
Automação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SCAutomação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SC
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de software
 
Front End x Back End
Front End x Back EndFront End x Back End
Front End x Back End
 
Testes de Software
Testes de SoftwareTestes de Software
Testes de Software
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágil
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Banner WhatsApp - Objetos no corredor
Banner WhatsApp - Objetos no corredorBanner WhatsApp - Objetos no corredor
Banner WhatsApp - Objetos no corredor
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Testes de Integração
Testes de IntegraçãoTestes de Integração
Testes de Integração
 
Introdução ao Teste de Software
Introdução ao Teste de SoftwareIntrodução ao Teste de Software
Introdução ao Teste de Software
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)
 
Sistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - IntroduçãoSistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - Introdução
 
Análise e Projeto de Sistemas com UML e Java
Análise e Projeto de Sistemas com UML e JavaAnálise e Projeto de Sistemas com UML e Java
Análise e Projeto de Sistemas com UML e Java
 
Métodos e técnicas de Pesquisa
Métodos e técnicas de PesquisaMétodos e técnicas de Pesquisa
Métodos e técnicas de Pesquisa
 

Semelhante a Desafio Rest API

[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
Qualister
 
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
Júlio de Lima
 
Palestra
PalestraPalestra
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Arlindo Santos
 
Cake Php
Cake PhpCake Php
Cake Php
Laura Lopes
 
Python 08
Python 08Python 08
Python 08
Bruno Catão
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnica
Silvio Dias
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnica
Silvio Dias
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Daniel Makiyama
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
Thiago Soares
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Elias Nogueira
 
Gsp007
Gsp007Gsp007
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheiras
Bruno Luiz Pereira da Silva
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Amazon Web Services LATAM
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
Rodolfo Fadino Junior
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
Giovanny Valente
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
Amazon Web Services LATAM
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
Qualister
 
Gsp313 desafio selo_01
Gsp313 desafio selo_01Gsp313 desafio selo_01
Gsp313 desafio selo_01
GestoFinanceiraFatec
 
Nao sensivel
Nao sensivelNao sensivel
Nao sensivel
GestoFinanceiraFatec
 

Semelhante a Desafio Rest API (20)

[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
 
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
 
Palestra
PalestraPalestra
Palestra
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Cake Php
Cake PhpCake Php
Cake Php
 
Python 08
Python 08Python 08
Python 08
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnica
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnica
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Gsp007
Gsp007Gsp007
Gsp007
 
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheiras
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
 
Gsp313 desafio selo_01
Gsp313 desafio selo_01Gsp313 desafio selo_01
Gsp313 desafio selo_01
 
Nao sensivel
Nao sensivelNao sensivel
Nao sensivel
 

Desafio Rest API

  • 1. Autor: Reinaldo Mateus Rossetti Junior Analista deTestes
  • 2. • Nessa postagem, vamos resolver um desafio para um emprego, uma vaga de automação de testes. O desafio é testar uma Rest API chamada Mollom API. Para o desafio ficar melhor, vamos adicionar o Maven e o Cucumber. Esse pessoal de testes é “arretado” (como dizem os paraenses). Além de resolver, vamos melhorar o desafio. • O ponto forte do desafio é adicionar o Page Object, ou seja usar o mesmo conceito. O bom do conceito, de forma simples, é que você separa bem os objetos da classe para ser reutilizada, facilitando, assim, a manutenção e reuso das classes.
  • 3. 2 – Dado uma API pública e sua documentação em https://docs.acquia.com/mollom/api/rest/list, criar um teste que valide o seguinte: (deve-se utilizar a URL http://dev.mollom.com/v1/ para as chamadas nessa API): · Criar um novo site definindo uma URL e um email para o mesmo; · Realizar uma chamada para validar que foi criado com sucesso; · Fazer um update somente da URL desse site e validar que foi feito com sucesso; · Fazer um update somente do email desse site e validar que foi feito com sucesso. · DESAFIO: utilize um conceito similar ao Page Object para encapsular as chamadas para a API.
  • 4. • Encapsular em ProgramaçãoOrientada a Objetos (POO) significa separar o programa em partes, o mais isolado possível. A idéia é tornar o software mais flexível, fácil de modificar e de criar novas implementações. O encapsulamento serve para controlar o acesso aos atributos e métodos de uma classe.
  • 5. • Primeira coisa que precisamos entender é como funciona uma Rest API. Uma Rest API trabalha com o conceito de chaves entre cliente -> servidor, ou seja você precisa de uma chave pública e o servidor tem uma chave privada.Como no exemplo abaixo, ele solicita a autenticação e o servidor fornece as chaves. • Uma vez com a chave pública em mãos (token), ele faz uma busca no site (request), e no retorno ele recebe um JSON com os dados que foram solicitados (response). Com isso ele monta a página do resultado da busca. Fonte: www.websequencediagrams.com
  • 6. Cucumber Framework • Cucumber é um framework escrito por Aslak Hellesøy baseado no RSpec Story Runner, primariamente feito para Ruby, depois evolui para várias linguagens como Java, Jython, .NET, Flex, Lua etc. O mesmo foi traduzido para mais de 40 línguas. • O cucumber permite a escrita das features/scenario/steps diretamente no código fonte (Behaviour Driven Development ), tornado assim, mais fácil o entendimento e a manutenção do mesmo.
  • 7. Create a site Mollom é um módulo para WordPress e Drupal, que avalia a qualidade do conteúdo e bloqueia spam em seu site por meio de técnicas de aprendizado de máquina e análise de linguagem. Mollom fornece uma API REST que é baseada em padrões RESTful. Como obter as chaves no Mollom API? Existe dois ambientes: um de Teste e outro de Produção. No ambiente de teste quando criamos o site via POST ele nos fornece a chave pública e privada. No ambiente de produção você faz o cadastro ao logar no site (no menu Site Manager) e gera as chaves. Acesse https://docs.acquia.com/mollom/install/drupal8 para mais informações. • POST http://rest.mollom.com/v1/site?parameters Recebemos a resposta no formato ao lado: <response> <code>200</ code> <message>Error message</message> <site> <id>siteId</id> <publicKey>publicKey</publicKey> <privateKey>privateKey</privateKey> <url>example.com</url> <email>mail@example.com</email> <expectedLanguages> <languageCode>en</languageCode> </expectedLanguages> <subscriptionType></subscriptionType> <platformName>Drupal</platformName> <platformVersion>7.2</platformVersion> <clientName>Mollom</clientName> <clientVersion>7.x-1.0</clientVersion> </site> </response>
  • 8. Validação Error handling Returned Status Description: • HTTP 200 OK ("OK") with raw media content CAPTCHA resource exists and can be delivered • HTTP 404 Not Found ("Unknown CAPTCHA resource") with empty response CAPTCHA resource does not exist. • HTTP 409 Conflict ("CAPTCHA was processed already") with empty response CAPTCHA resource exists, but was already processed/updated (solved or not), and can no longer be shown or solved. • HTTP 410 Gone ("Expired CAPTCHA") with empty response CAPTCHA resource previously existed, but has expired and can no longer be shown or solved. No JSON vem o código de Resposta. Isso quer dizer que toda vez que a resposta for realizada com sucesso, o JSON vai me retornar o código 200, então nosso Assert ficaria assim: Assert.assertEquals(200, site_create_response);
  • 9. Nossa Feature Feature: Dado uma API pública -> MollomAPI e sua documentação para validacao Scenario Outline: Criar um novo site Given Dado um "<Site>" para as chamadas dessa API When Criar um novo site definindo uma "<URL>" e um "<Email>" para o mesmo ThenValidar que foi criado com sucesso Examples: | Site | URL | Email | | http://dev.mollom.com/v1/site | www.vidadetestador.com | reiload@gmail.com | Scenario Outline: Fazer update da url e do email no novo site Given Fazer um update somente da "<URL_Update>" desse site And Fazer um update somente do "<Email_Update>" desse site ThenValidar que foi feito com sucesso Examples: | URL_Update | Email_Update | | www.vidadetestadores.com | reinaldo.rossetti@outlook.com |
  • 10. Dica 01 – Armazenando dados. • Uma dica importante é criar um arquivo de configuração, ou seja, o que é comum em todos os testes poderia ser colocado nesse arquivo para uso. Assim não precisamos passar todas as vezes o site e a chave pública como parâmetro na função. • Armazenamos no arquivo properties o site e a public key. mollom_site = http://dev.mollom.com/v1/site publicKey = zcxr5a5n8ebq1nfsaajflswui1jaas33
  • 11. Dica 02 – Entendendo a Lógica. • Outra dica importante é testar o resultado dos valores primeiro, antes da implementação (fazer um teste manual pra conhecer a lógica é sempre bom). Para isso, usamos um plugin no Chrome chamado de Advanced RestClient: • No nosso aplicativo adicionamos a URL, junto com a chave e, no fim, o ponto de interrogação. A partir da interrogação vêm os parâmetros. Diferentemente do GET, o POST você não vê na URL, como o próprio aplicativo fala “Values from here will beURL encoded!”. Desse resultado que você vai entender a lógica, resultado positivo -> código 200.Tente enviar um valor errado pra entender os erros. 1 2 3 Nosso código: String code = xmlPath.get("code"); String publicKey = xmlPath.get("site.publicKey"); String privateKey = xmlPath.get("site.privateKey");
  • 12. Apache Maven É uma ferramenta de automação de compilação utilizada primariamente em projetos Java. No meu ponto de vista, seu melhor benefício é centralizar informações de forma organizada no projeto, incluir suas dependências (fazemos isso no pom.xml), armazenar os resultados dos testes, documentação etc. Benefícios: • compilação do código fonte de computador em código binário; • empacotamento do código binário; • execução de testes; • implantação para sistemas de produção; • criação de documentação e / ou notas de lançamento.
  • 13. Nosso código: git clone https://reiload@bitbucket.org/reiload/cucumber_rest_api.git
  • 14. Resultado! Agora vamos ao resultado dos nossos testes. Temos dois 2 cenários e 6 passos. Rodando o nosso teste, todos os cenários e passos foram realizados com sucesso. Olhando a Feature e os Steps fica fácil entender o nosso código, facilitando a comunicação e a manutenção do mesmo. Foi implementado o Data Tables. É praticamente uma tabela como no Excel: mudando os valores da tabela, muda os valores do seu teste, assim os nossos testes ficam mais dinâmicos. Bom, espero que tenham gostado! Para se aprofundar mais sobre o assunto, leia as referências.
  • 15. Referências: • https://docs.acquia.com/mollom/api/rest/list • http://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 • https://code.google.com/p/selenium/wiki/PageObjects • https://github.com/jayway/rest-assured • https://code.google.com/p/rest-assured/wiki/Usage#XML_(using_XmlPath_) • https://cucumber.io/ • http://luizricardo.org/2014/06/instalando-configurando-e-usando-o-maven-para-gerenciar- suas-dependencias-e-seus-projetos-java/
  • 16. Autor: Reinaldo Mateus Rossetti Junior Analista deTestes