SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
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

Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasRodrigo Branas
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018André Luiz Forchesatto
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo httpCarlos Veiga
 
WANs e Roteadores Cap. 6 Roteamento e Protocolos de Roteamento - CCNA 3.1 Wel...
WANs e Roteadores Cap. 6 Roteamento e Protocolos de Roteamento - CCNA 3.1 Wel...WANs e Roteadores Cap. 6 Roteamento e Protocolos de Roteamento - CCNA 3.1 Wel...
WANs e Roteadores Cap. 6 Roteamento e Protocolos de Roteamento - CCNA 3.1 Wel...Wellington Oliveira
 
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introduçãoAgrupamento de Escolas da Batalha
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de softwareRondinelli Mesquita
 
Compreendendo a redundância de camada 3
Compreendendo a redundância de camada 3Compreendendo a redundância de camada 3
Compreendendo a redundância de camada 3Vitor Albuquerque
 
Arquiteturas de Computadores Paralelos
Arquiteturas de Computadores ParalelosArquiteturas de Computadores Paralelos
Arquiteturas de Computadores ParalelosElaine Cecília Gatto
 
Aula 3: Introdução a sistema de arquivos
Aula 3: Introdução a sistema de arquivosAula 3: Introdução a sistema de arquivos
Aula 3: Introdução a sistema de arquivoscamila_seixas
 

Mais procurados (20)

Instalação de Servidor de Arquivo
Instalação de Servidor de ArquivoInstalação de Servidor de Arquivo
Instalação de Servidor de Arquivo
 
BDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + JavaBDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + Java
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
API - Como fazer?
API - Como fazer?API - Como fazer?
API - Como fazer?
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo http
 
Windows Server 2003
Windows Server 2003Windows Server 2003
Windows Server 2003
 
WANs e Roteadores Cap. 6 Roteamento e Protocolos de Roteamento - CCNA 3.1 Wel...
WANs e Roteadores Cap. 6 Roteamento e Protocolos de Roteamento - CCNA 3.1 Wel...WANs e Roteadores Cap. 6 Roteamento e Protocolos de Roteamento - CCNA 3.1 Wel...
WANs e Roteadores Cap. 6 Roteamento e Protocolos de Roteamento - CCNA 3.1 Wel...
 
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de software
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
PowerShell
PowerShellPowerShell
PowerShell
 
Compreendendo a redundância de camada 3
Compreendendo a redundância de camada 3Compreendendo a redundância de camada 3
Compreendendo a redundância de camada 3
 
Arquiteturas de Computadores Paralelos
Arquiteturas de Computadores ParalelosArquiteturas de Computadores Paralelos
Arquiteturas de Computadores Paralelos
 
Trabalho sobre Proxy
Trabalho sobre ProxyTrabalho sobre Proxy
Trabalho sobre Proxy
 
Aula 3: Introdução a sistema de arquivos
Aula 3: Introdução a sistema de arquivosAula 3: Introdução a sistema de arquivos
Aula 3: Introdução a sistema de arquivos
 

Semelhante a Teste API Mollom com Cucumber, Maven e Page Object

[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 CodeceptionQualister
 
[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
 
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 PHPArlindo Santos
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnicaSilvio Dias
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnicaSilvio 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ãosThiago 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ápidosElias Nogueira
 
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 trincheirasBruno 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 AWSAmazon 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 CarlosRodolfo 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-endGiovanny 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ápidasAmazon 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 seleniumQualister
 

Semelhante a Teste API Mollom com Cucumber, Maven e Page Object (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
 

Teste API Mollom com Cucumber, Maven e Page Object

  • 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