View
153
Download
1
Category
Preview:
Citation preview
Autor: Reinaldo Mateus Rossetti Junior
Analista de Testes
• 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ção Orientada 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 AslakHellesøy baseado no RSpec Story Runner, primariamente feito para Ruby, depois evoluipara várias linguagens como Java, Jython, .NET, Flex, Lua etc. O mesmo foi traduzidopara mais de 40 línguas.
• O cucumber permite a escrita das features/scenario/steps diretamente no códigofonte (Behaviour Driven Development ), tornado assim, mais fácil o entendimento e a manutenção do mesmo.
Create a siteMollom é 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. Mollomfornece 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. Noambiente de teste quando criamos o site via POST ele nos fornece a chave pública e privada. Noambiente de produção você faz o cadastro ao logar no site (no menu Site Manager) e gera aschaves. 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 comsucesso, o JSON vai me retornar o código 200, então nosso Assert ficaria assim:
Assert.assertEquals(200, site_create_response);
Nossa FeatureFeature: Dado uma API pública -> Mollom API 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
Then Validar 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
Then Validar 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 Rest Client:
• 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 be URL 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 de Testes
Recommended