desafio rest api

16
Autor: Reinaldo Mateus Rossetti Junior Analista de Testes

Upload: reinaldo-junior

Post on 21-Jan-2017

153 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Desafio Rest API

Autor: Reinaldo Mateus Rossetti Junior

Analista de Testes

Page 2: Desafio Rest API

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

Page 3: Desafio Rest API

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.

Page 4: Desafio Rest 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.

Page 5: Desafio Rest API

• 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

Page 6: Desafio Rest API

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.

Page 7: Desafio Rest API

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>[email protected]</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>

Page 8: Desafio Rest API

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

Page 9: Desafio Rest API

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 | [email protected] |

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 | [email protected] |

Page 10: Desafio Rest API

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

Page 11: Desafio Rest API

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");

Page 12: Desafio Rest API

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.

Page 13: Desafio Rest API

Nosso código: git clone https://[email protected]/reiload/cucumber_rest_api.git

Page 14: Desafio Rest API

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.

Page 15: Desafio Rest API

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/

Page 16: Desafio Rest API

Autor: Reinaldo Mateus Rossetti Junior

Analista de Testes