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

Arquitetura de Automação de Teste
Arquitetura de Automação de TesteArquitetura de Automação de Teste
Arquitetura de Automação de TesteElias Nogueira
 
Testes de ponta a ponta
Testes de ponta a pontaTestes de ponta a ponta
Testes de ponta a pontaElias Nogueira
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaFabrício Campos
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosArthur Emanuel
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismoArthur Emanuel
 
Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaElias Nogueira
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de testeMarcos Pessoa
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Cypress-vs-Playwright: Let the Code Speak
Cypress-vs-Playwright: Let the Code SpeakCypress-vs-Playwright: Let the Code Speak
Cypress-vs-Playwright: Let the Code SpeakApplitools
 
API Testing following the Test Pyramid
API Testing following the Test PyramidAPI Testing following the Test Pyramid
API Testing following the Test PyramidElias Nogueira
 
Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Softwaremarthahuback
 
Automação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumAutomação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumElias Nogueira
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilElias Nogueira
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_SingaporeCI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_SingaporeAmazon Web Services
 
Laravel Design Patterns
Laravel Design PatternsLaravel Design Patterns
Laravel Design PatternsBobby Bouwmann
 

Mais procurados (20)

Arquitetura de Automação de Teste
Arquitetura de Automação de TesteArquitetura de Automação de Teste
Arquitetura de Automação de Teste
 
Testes de ponta a ponta
Testes de ponta a pontaTestes de ponta a ponta
Testes de ponta a ponta
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem prática
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de Erros
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto Java
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de teste
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Cypress-vs-Playwright: Let the Code Speak
Cypress-vs-Playwright: Let the Code SpeakCypress-vs-Playwright: Let the Code Speak
Cypress-vs-Playwright: Let the Code Speak
 
API Testing following the Test Pyramid
API Testing following the Test PyramidAPI Testing following the Test Pyramid
API Testing following the Test Pyramid
 
Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Software
 
Automação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumAutomação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com Appium
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_SingaporeCI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
 
Laravel Design Patterns
Laravel Design PatternsLaravel Design Patterns
Laravel Design Patterns
 
BitBucket presentation
BitBucket presentationBitBucket presentation
BitBucket presentation
 
Clean Code
Clean CodeClean Code
Clean Code
 
Introdução CSS
Introdução CSSIntrodução CSS
Introdução CSS
 

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 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 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