SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
Arquitetura básica de testes para seu projeto Java
Palestra ministrada no The Developers Conference São Paulo 2017 dia 21/07 na Trilha Arquitetura Java.
Nesta apresentação falo da importância de planejar testes em diversos níveis dentro de um processo de desenvolvimento, bem como uma build pipeline ideal pensando em testes e dicas do que devemos ter na nossa arquitetura de teste para uma aplicação em Java.
Palestra ministrada no The Developers Conference São Paulo 2017 dia 21/07 na Trilha Arquitetura Java.
Nesta apresentação falo da importância de planejar testes em diversos níveis dentro de um processo de desenvolvimento, bem como uma build pipeline ideal pensando em testes e dicas do que devemos ter na nossa arquitetura de teste para uma aplicação em Java.
Arquitetura básica de testes para seu projeto Java
1.
ARQUITETURA BÁSICA DE TESTES
PARA SEU PROJETO JAVA
ELIAS NOGUEIRA
@eliasnogueira
2.
ARQUITETURA DE TESTES
ESTRATÉGIA SOBRE TESTES EM DIFERENTES FASES
Story 1
0 It 1 It 2 It 3 - 5 End Game
Entrega do Time
Tarefa A 8 horas
Tarefa B 5 horas
Tarefa C 6 horas
Tarefa D 8 horas
Release 1 Release 2 Release 3
Entendimento dos
Tipos de Testes
3.
ESTRATÉGIA SOBRE TESTES EM DIFERENTES FASES
Story 1
0 It 1 It 2 It 3 - 5 End Game
Entrega do Time
Tarefa A 8 horas
Tarefa B 5 horas
Tarefa C 6 horas
Tarefa D 8 horas
Release 1 Release 2 Release 3
Entendimento dos
Tipos de Testes
Planejamento
dos Tipos de Testes
ARQUITETURA DE TESTES
4.
ESTRATÉGIA SOBRE TESTES EM DIFERENTES FASES
Story 1
0 It 1 It 2 It 3 - 5 End Game
Entrega do Time
Tarefa A 8 horas
Tarefa B 5 horas
Tarefa C 6 horas
Tarefa D 8 horas
Release 1 Release 2 Release 3
Entendimento dos
Tipos de Testes
Planejamento
dos Tipos de Testes
Testes e
Execução de
Teste das User
Stories
ARQUITETURA DE TESTES
5.
ESTRATÉGIA SOBRE TESTES EM DIFERENTES FASES
Story 1
0 It 1 It 2 It 3 - 5 End Game
Entrega do Time
Tarefa A 8 horas
Tarefa B 5 horas
Tarefa C 6 horas
Tarefa D 8 horas
Release 1 Release 2 Release 3
Entendimento dos
Tipos de Testes
Planejamento
dos Tipos de Testes
Testes e
Execução de
Teste das User
Stories
Testes e Execução de
Testes das Tarefas
ARQUITETURA DE TESTES
6.
ESTRATÉGIA SOBRE TESTES EM DIFERENTES FASES
Story 1
0 It 1 It 2 It 3 - 5 End Game
Entrega do Time
Tarefa A 8 horas
Tarefa B 5 horas
Tarefa C 6 horas
Tarefa D 8 horas
Release 1 Release 2 Release 3
Entendimento dos
Tipos de Testes
Planejamento
dos Tipos de Testes
Testes e
Execução de
Teste das User
Stories
Testes e Execução de
Testes das Tarefas
Testes Funcionais
Testes E2E
ARQUITETURA DE TESTES
7.
ESTRATÉGIA SOBRE TESTES EM DIFERENTES FASES
Story 1
0 It 1 It 2 It 3 - 5 End Game
Entrega do Time
Tarefa A 8 horas
Tarefa B 5 horas
Tarefa C 6 horas
Tarefa D 8 horas
Release 1 Release 2 Release 3
Entendimento dos
Tipos de Testes
Planejamento
dos Tipos de Testes
Testes e
Execução de
Teste das User
Stories
Testes e Execução de
Testes das Tarefas
Testes Funcionais
Testes E2E
Execução de Testes E2E
Testes em Produção
Testes Não Funcionais
ARQUITETURA DE TESTES
8.
ESTRATÉGIA PARA UM PIPELINE CONTENDO TESTES
ARQUITETURA DE TESTES
9.
Testes
Manuais
Baseados
em Sessão
Testes Unitários
Testes de Componentes
Testes de Integração
Testes de API
Testes em UI
Web / Mobile
UI/Aceitação
Regressão Visual
Performance
Testes de Segurança
Mocks
Stubs
Serviços
Testes de Unidade
Análise estática
ESTRATÉGIA PARA FERRAMENTAS EM DIFERENTES NÍVEIS
ARQUITETURA DE TESTES
10.
Pirâmide de Automação de TesteTestes
Manuais
Baseados
em Sessão
Testes Unitários
Testes de Componentes
Testes de Integração
Testes de API
Testes em UI
Web / Mobile Máquinas para execução Web
Servidores para teste das
integrações e APIs
Servidores para execução de
Testes Não Funcionais
Dispositivos para
execução Mobile
ESTRATÉGIA PARA AMBIENTES EM DIFERENTES NÍVEIS
ARQUITETURA DE TESTES
11.
MODELOS DE ABSTRAÇÃO
▸ Utilizar Modelos de Abstração
▸ Implementação através de padrões de projeto
▸ Factory | Builder | Singleton
▸ Page Objects [para API | Web | Mobile]
ARQUITETURA DE TESTES
12.
EXEMPLO PAGE OBJECTS
// exemplo com Selenium WebDriver
private WebDriver driver;
public LoginPage(WebDriver driver) {
this.driver = driver;
}
public void preencherLogin(String email) {
driver.findElement(By.id("username")).sendKeys(email);
}
public void preencherSenha(String senha) {
driver.findElement(By.id("password")).sendKeys(senha);
}
public void clicarEmLogin() {
driver.findElement(By.name("submit")).click();
}
13.
EXEMPLO PAGE OBJECTS
// exemplo com Selenium WebDriver
private WebDriver driver;
public LoginPage(WebDriver driver) {
this.driver = driver;
}
public void preencherLogin(String email) {
driver.findElement(By.id("username")).sendKeys(email);
}
public void preencherSenha(String senha) {
driver.findElement(By.id("password")).sendKeys(senha);
}
public void clicarEmLogin() {
driver.findElement(By.name("submit")).click();
}
14.
EXEMPLO PAGE OBJECTS
@Test
public void testeLoginComSenhaErrada() {
LoginPage login = new LoginPage(driver);
login.efetuarLogin("elias@elias.com", "eli@s134");
assertEquals("Usuário ou senha inválido", login.mensagemErro());
}
TESTE FUNCIONAL
15.
EXEMPLO PAGE OBJECTS
@Test
public void adicionaProdutosNoEstoque() {
String produto = "iPhone 7 16GB";
LoginPage login = new LoginPage(driver);
login.efetuarLogin("elias@elias.com", "3li@s123!");
MainPage paginaPrincipal = new MainPage(driver);
paginaPrincipal.clicarEmProdutos().clicarEmGestaoDeProdutos();
GestaProdutosPage gestaoProdutos = new GestaProdutosPage(driver);
gestaoProdutos.pesquisaProduto(produto);
gestaoProdutos.clicarEmEditar();
gestaoProdutos.atualizaQuantidadeEstoque(23);
assertEquals(72, gestaoProdutos.obtemEstoqueProduto(produto));
}
16.
EXEMPLO PAGE OBJECTS
@Test
public void adicionaProdutosNoEstoque() {
String produto = "iPhone 7 16GB";
LoginPage login = new LoginPage(driver);
login.efetuarLogin("elias@elias.com", "3li@s123!");
MainPage paginaPrincipal = new MainPage(driver);
paginaPrincipal.clicarEmProdutos().clicarEmGestaoDeProdutos();
GestaProdutosPage gestaoProdutos = new GestaProdutosPage(driver);
gestaoProdutos.pesquisaProduto(produto);
gestaoProdutos.clicarEmEditar();
gestaoProdutos.atualizaQuantidadeEstoque(23);
assertEquals(72, gestaoProdutos.obtemEstoqueProduto(produto));
}
17.
EXEMPLO PAGE OBJECTS
@Test
public void adicionaProdutosNoEstoque() {
String produto = "iPhone 7 16GB";
LoginPage login = new LoginPage(driver);
login.efetuarLogin("elias@elias.com", "3li@s123!");
MainPage paginaPrincipal = new MainPage(driver);
paginaPrincipal.clicarEmProdutos().clicarEmGestaoDeProdutos();
GestaProdutosPage gestaoProdutos = new GestaProdutosPage(driver);
gestaoProdutos.pesquisaProduto(produto);
gestaoProdutos.clicarEmEditar();
gestaoProdutos.atualizaQuantidadeEstoque(23);
assertEquals(72, gestaoProdutos.obtemEstoqueProduto(produto));
}
18.
EXEMPLO PAGE OBJECTS
@Test
public void adicionaProdutosNoEstoque() {
String produto = "iPhone 7 16GB";
LoginPage login = new LoginPage(driver);
login.efetuarLogin("elias@elias.com", "3li@s123!");
MainPage paginaPrincipal = new MainPage(driver);
paginaPrincipal.clicarEmProdutos().clicarEmGestaoDeProdutos();
GestaProdutosPage gestaoProdutos = new GestaProdutosPage(driver);
gestaoProdutos.pesquisaProduto(produto);
gestaoProdutos.clicarEmEditar();
gestaoProdutos.atualizaQuantidadeEstoque(23);
assertEquals(72, gestaoProdutos.obtemEstoqueProduto(produto));
}
TESTE E2E
19.
LOGS
▸ Gerar logs da execução de teste em qualquer nível
▸ Em caso de falha [asserts] ou erro [exceptions]
▸ Gerar arquivos .log
▸ Gerar screenshots
▸ Agregar arquivos de resultado em formato xUnit
▸ Ou usar ferramentas de geração de relatórios
▸ Evitar o uso do Cucumber em múltiplas camadas
ARQUITETURA DE TESTES
20.
ARQUIVOS DE CONFIGURAÇÃO
▸ Abusar de arquivos de configuração
▸ Eles apoiarão com um menor esforço de testar em diversos
ambientes
▸ Fácil apontamento de endpoints e URLs
▸ .properties
▸ .conf
▸ .xml
ARQUITETURA DE TESTES
21.
DIFERENTES ESTRATÉGIAS E NÍVEIS
Web | Mobile
Smoke/Sanity Test
Pequenos testes, de preferência headless [web] para
garantir que o fluxo principal funciona
Functional
Validação de cada funcionalidade de forma singular
Aceitação | E2E
Validação de um fluxo do usuário
ARQUITETURA DE TESTES
22.
DIFERENTES ESTRATÉGIAS E NÍVEIS
API
EndPoint
garantir que endpoints estão ativos
Contrato
garantir que existe o retorno esperado
Funcional
validação das regras do próprio endpoint
Aceitação | E2E
validação de regras usando diversos endpoints
ARQUITETURA DE TESTES