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