AUTOMAÇÃO DE TESTE PARA
REST | WEB | MOBILE
E L I A S N O G U E I R A
@ e l i a s n o g u e i r a
Elias Nogueira
@eliasnogueira
Sênior QA Engineer, Agile Coach & Trainer - Adaptworks
Professor de Pós Graduação – Unisinos/RS
Coordenador da Trilha de Teste - The Developers Conference
3
Validação intermediária entre
back e front end
Teste no serviço REST
Para garantir a estabilidade
durante os ciclos contínuos
Mock do serviço REST
Testes Funcionais e
Aceitação na interface Mobile
Teste na camada Mobile
Testes Funcionais e
Aceitação na Interface Web
Teste na camada Web
CONJUNTO DE FERRAMENTAS
A seleção das ferramentas corretas é um ponto chave no seu processo de automação
4
API REST
Documentação da API alvo dos testes
ExemploURLVerboO que faz
/api/person/api/personGETListar pessoas
/api/person/:id/api/person/27GETRetornar a pessoa pelo id
/api/person/api/personPOSTAdicionar as pessoas
/api/person/:id/api/person/33PUTAtualizar uma pessoa pelo id
/api/person/:id/api/person/52DELETERemover uma pessoa pelo id
5
AUTOMAÇÃO DE SERVIÇOS REST
Atualmente uma das camadas mais importantes da aplicação
Os testes são tão necessários quanto na camada visual
Sempre validar as transações de negócio
Em novos serviços, sempre validar manualmente primeiro
CURL (CLI)
PostMan (Google Chrome)
RESTClient (Firefox)
6
MOCK DE SERVIÇOS REST
A forma mais fácil e rápida de criar mocks em Java
Microframework com o poder do Java 8
Ótima pedida para criar micro serviços
Fácil implementação para criar serviços REST
http://sparkjava.com
7
MOCK DE SERVIÇOS REST
Porque você não vai testar em produção, correto?
Exemplo de um mock com com dados fixos
Usar dados fixos pode ser uma boa pedida para não ter
grandes manutenções no seu código de mock
8
MOCK DE SERVIÇOS REST
Porque você não vai testar em produção, correto?
Exemplo de um mock com com dados dinâmicos
Dependendo da complexidade de seu código e conjunto de massa
de dados podemos criar uma abordagem com dados pré-definidos
REST
ASSURED
DSL de fácil utilização para automatizar serviços REST
Sintaxe de give-when-then
https://github.com/jayway/rest-assured
10
O QUE EU PRECISO?
O que é necessário para escrever um teste com RESTAssured
Importar um conjunto de classes estáticas
Informar URL Base, contexto de acesso e porta (se necessário)
import static com.jayway.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
baseURI = "http://localhost";
basePath = "/api";
port = 4567;
11
AUTOMAÇÃO DE SERVIÇOS REST
Nos métodos de pré e pós condição apontamos a URL principal, iniciamos e fechamos o Mock com Spark
Pré e Pós condição antes de cada testes
Abordagem obrigatória e automatizada para iniciar seus
testes utilizando o mock com Spark
12
AUTOMAÇÃO DE SERVIÇOS REST
O RESTAssured possui uma API fluente para automação dos serviços REST
Exemplo de um teste automatizado com RESTAssured
Um GET sendo enviado com ID 1 (when) e os dados de
retorno sendo validados na body do retorno (then)
SELENIUM
WEBDRIVER
API para automação em browser web reais
Diferentes linguagens suportadas
http://seleniumhq.org
Virando um padrão W3C
Simula um usuário real
14
O QUE EU PRECISO?
O que é necessário para escrever um teste com Selenium WebDriver
Browser alvo instalado
Alguma ferramenta de inspeção de código HTML
Nativa do browser
Firebug
[ProTip] Algum software para mudar a velocidade de conexão
16
PROCESSO DE AUTOMAÇÃO
O Selenim WebDriver possui um pequeno processo simples e fácil de lembrar
Script de Teste
com Selenium
Inicialização do browser e controles
de navegação (back, forward,
refresh)
Navegação
Formas de localizar um elemento
web
id, name, cssSelector, xpath
Interrogação
Esperas por elementos dinâmicos
e/ou requisições assíncronas
baseadas em elementos
Sincronização
Forma de interagir com os elementos
click, clear, sendKeys, getText
Manipulação
1
2
3
4
17
AUTOMAÇÃO DE TESTE WEB
O Selenium WebDriver possui uma API de fácil entendimento
Exemplo de um teste automatizado com Selenium WebDriver
Exemplo completo com navegação, interrogação, manipulação e sincronização
18
1
2
3
4
Usar Page Objects para modularizar os testes
Abusar dos Padrões de Projeto para facilitar a manutenção
Execute o teste em uma velocidade de internet menor
Use XPATH somente quando necessário
DICAS PARA AUTOMAÇÃO WEB
Para uma automação de teste web mais profissional
19
DICA PARA SUITE DE TESTE WEB
É importante dividir os testes em suítes específicas para um maior retorno e velocidade de feedback
HEADLESS TEST ACCEPTANCE TEST FUNCTIONAL TEST
SUITE DE AUTOMAÇÃO DE
TESTE
1 2 3 4
DAR VELOCIDADE E FEEDBACK MAIS RÁPIDO NOS CICLOS CONTÍNUOS
VALIDAR O SISTEMA COMO A UTILIZACÃO DE UM USUÁRIO
VALIDAR NA PERSPECTIVA DE REGRAS DE NEGÓCIO
1
2
3
APPIUM
API para automação para dispositivos mobile
Suporta Android e iOS
http://appium.io
Executa em emuladores ou dispositivos
Teste em aplicações nativas ou híbridas
21
O QUE EU PRECISO?
O que é necessário para escrever um teste com Appium
Android SDK
Appium (via Appium.app ou Nodejs)
Configurar PATHS (tools / platform-tools)
SDK Platform + System Image
Emulador / Simulador ou Dispositivo
23
PROCESSO DE AUTOMAÇÃO
Série de passos para criação do script de automação com Appium
Script de Teste
com Appium
Definição de dados padrão
plataforma, dispositivo, app)
DesiredCapabilities
Abrir a conexão com o dispositivo
via Appium.app ou Nodejs
Sessão
Esperas por elementos dinâmicos
e/ou requisições assíncronas
baseadas em elementos
Sincronização
Localizar e interagir com componentes
Mesma forma do Selenium WebDriver
Interrogação e Manipulação
1
2
3
4
24
AUTOMAÇÃO DE TESTE MOBILE
Tirando o DesiredCapabilities e Sessão não é igual ao Selenium?
Exemplo de script para um app pré instalada
Exemplo completo de um teste em uma app Android
25
DICAS PARA AUTOMAÇÃO MOBILE
Para ter scripts de automação mobile mais profissional
1
2
3
4
Execute testes instalando a app e com ela pré instalada
Crie uma suíte focada no usuário final
Teste em diferentes redes (Wi-Fi, 3G…)
Teste requisitos não funcionais
Obrigado pela
presença!
Código completo de exemplo disponível no GitHub
http://eliasnogueira.com elias.nogueira@gmail.co
m
@eliasnogueira fb.com/elias.nogueira.teste
https://github.com/eliasnogueira/javaone-testing-automation