Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Arquitetura básica de testes para seu projeto Java

808 views

Published on

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.

Published in: Software

Arquitetura básica de testes para seu projeto Java

  1. 1. ARQUITETURA BÁSICA DE TESTES PARA SEU PROJETO JAVA ELIAS NOGUEIRA @eliasnogueira
  2. 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. 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. 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. 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. 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. 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. 8. ESTRATÉGIA PARA UM PIPELINE CONTENDO TESTES ARQUITETURA DE TESTES
  9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  23. 23. @eliasnogueira eliasnogueira.com github.com/eliasnogueira fb.com/elias.nogueira.teste

×