ARQUITETURA PARA AUTOMAÇÃO
DE TESTE DE SOFTWARE

Em quais pontos pensar quando
automatizamos funcionalmente os testes de
uma aplicação?
O que é Arquitetura de
Automação de Teste
pra mim?


                     2
Automação sem uma
    arquitetura
     é pobre!



                    3
Olha, eu automatizo!!!

Gravar um script através do Record and Play

Alterar o script em cada execução

Analisar o resultado em tela após e execução do script

Talvez documentar a execução

Talvez documentar um erro encontrado

Reexecutar o script


                                                   4
Automatiza mesmo???

[Humano] Gravar um script através do Record and Play

[Humano] Alterar o script em cada execução

[Humano] Analisar o resultado em tela após e execução do script

[Humano] Talvez documentar a execução

[Humano] Talvez documentar um erro encontrado

[Humano] Reexecutar o script


                                                            5
Automação por record
     and play...

Você está fazendo isso
       errado!
                         6
A automação deve ser
rápida...
... e o mais rápido que puder!



                            7
Porque???

É um dos maiores ganhos que temos com a automação


Em automação funcional não precisamos de think time!




                                                       8
Evite!!!

Evite usar mecanismos de pausas implícitas (bare
sleeps)

       Preencher o campo de usuário e senha
       Clicar no botão Login
       Esperar por 30 segundos
       Clicar no link Relatórios




                                              9
Use!

Use mecanismos nativos para esperas (callback or
polling)

    Preencher o campo de usuário e senha
    Clicar no botão Login
    Esperar pelo carregamento da página
       carregou?
          não: espere mais 1 segundo
          sim: continue
    Clicar no link Relatórios



                                            10
Gerenciar os erros (ou possíveis
erros)
é essencial!



                              11
Como analisar e tratar os erros?




                                   12
Mecanismos


Geração de arquivos de logs

Utilização de mecanismos da própria linguagem de programação
    • raise-rescue    Ruby
    • try-cath        Java/C#
    • try-except      Phyton


Uso de alguma ferramenta



                                                               13
14
Programe!




            15
Programe!

Fica esperto se ocorrer algum erro
    Carregar dados do arquivo externo
    Clicar sobre o link Cadastro
        Enquanto existir dados no arquivo externo
            Preencher Nome: <nome>
            Preencher CPF: <CPF>
            Clicar no botão OK
            Validar mensagem apresentada <mensagem>
            Clicar no link Voltar
Deu erro? Fu....
   Se erro for Não encontrou campo
        Tente novamente
    Se erro for Registro não chegou
        Tente carregar o registro novamente
    Se erro foi qualquer outro
        Gere um arquivo de log
Finalize
    Gere o relatório de evidência
                                                      16
Programe!

try {
     ArrayList dados = CarregaDados.carrega(C:massaDados.xls);
     driver.findElement(By.visibleText(“cadastro”)).click();
         for (int i = 0; i < dados.size() ; i++) {
             driver.findElement(By.id(“nome”)).sendKeys(dados[i]);
             driver.findElement(By.id(“cpf”)).sendKeys(dados[i+1]);
             driver.findElement(By.id(“ok”)).click();
             Assert.assertEquals(“Sucesso!”, alert.getAlert());
             Driver.findElement(By.visibleText(“Voltar”)).click();
         }
catch (ElementNotFound enf) {}
catch (DataNotFound dnf) {}
catch (Exception e) {}
finally {
     Report.geraEvidencia();
}
                                                                 17
Data Driven Testing!




                       18
Como executamos testes com dados?

Cenário de Teste: efetue transferências entre contas do mesmo
banco

Caso de Teste: Efetuar transferência de conta corrente para conta
corrente
 Passo                            Resultado Esperado

Clicar sobre o link “Transferência entre contas”   Apresentar tela de Transferência com os dados
                                                   básicos do usuário apresentados:
                                                        •   Agencia: 1234
                                                        •   Nome: Fulano da Silva
Preencher os seguintes campos e clicar em          Apresentar nova tela com os seguintes dados:
“Transferir”
                                                        •   Mensagem: Saldo Suficiente para
     •   Minha Conta: 98765-1                               transferir
     •   Agencia creditada: 7489                        •   Para: Ciclano Souza
     •   Conta Creditada: 361029-5                      •   Valor (R$): 400.00
     •   Retirar da: Poupança

Clicar•no Valor (R$): 400.00
          botão “Efetivar”                         Apresentar nova tela com a mensagem:
                                                   “Transferência efetuada com sucesso”
                                                                                                   19
Script?

Clicar sobre o link “Transferência entre contas”
Validar Agencia: 1234
Validar Nome: Fulano da Silva
Preencher Minha Conta: 98765-1
Preencher Agencia creditada: 7489
Preencher Conta Creditada: 361029-5
Preencher Retirar da: Poupança
Preencher Valor (R$): 400.00
Clicar em Transferir
Validar Mensagem: Saldo suficiente para transferir
Validar Para: Ciclano Souza
Validar Valor (R$): 400.00
Clicar em Efetivar
Validar mensagem: Transferência efetuada com sucesso


                                                       20
Não mantenha dados
fixos em casos/scripts
de teste... NUNCA!


                        21
Nunca crie N Casos de
Teste “diferentes”
somente para mudança
dos dados!

                        22
Script Data Driven

Carrega arquivo dados.csv
Enquanto existir dados no arquivo
   Clicar sobre o link “Transferência entre contas”
   Validar Agencia: <agencia>
   Validar Nome: <nome cliente>
   Preencher Minha Conta: <minha_conta>
   Preencher Agencia creditada: <agencia_cred>
   Preencher Conta Creditada: <conta_cred>
   Preencher Retirar da: <retirar_da>
   Preencher Valor (R$): <valor_retirada>
   Clicar em Transferir
   Validar Mensagem: <mensagem>
   Validar Para: <favorecido>
   Validar Valor (R$): <valor_retirada>
   Clicar em Efetivar
   Validar mensagem: <mensagem_sucesso>
                                                      23
Gerar relatórios é essencial!




                                24
Quais relatórios gerar?

High-Level
  •   Relatório Sumarizado do Teste
  •   Relatório individual de execução

Low-Level
  •   Relatório de Evidências de Teste
  •   Relatório das validações de cada Teste




                                               25
Como gerar?

Funcionalidade existente dentro da própria
ferramenta

Ferramentas externas

Desenvolver sua própria engine de relatórios




                                               26
Defina uma estratégia para
execução




                            27
Como?




        28
@eliasnogueira

http://about.me/eliasnogueira

http://slideshare.net/elias.nogueira




                                       29

Arquitetura de Automação de Teste

  • 1.
    ARQUITETURA PARA AUTOMAÇÃO DETESTE DE SOFTWARE Em quais pontos pensar quando automatizamos funcionalmente os testes de uma aplicação?
  • 2.
    O que éArquitetura de Automação de Teste pra mim? 2
  • 3.
    Automação sem uma arquitetura é pobre! 3
  • 4.
    Olha, eu automatizo!!! Gravarum script através do Record and Play Alterar o script em cada execução Analisar o resultado em tela após e execução do script Talvez documentar a execução Talvez documentar um erro encontrado Reexecutar o script 4
  • 5.
    Automatiza mesmo??? [Humano] Gravarum script através do Record and Play [Humano] Alterar o script em cada execução [Humano] Analisar o resultado em tela após e execução do script [Humano] Talvez documentar a execução [Humano] Talvez documentar um erro encontrado [Humano] Reexecutar o script 5
  • 6.
    Automação por record and play... Você está fazendo isso errado! 6
  • 7.
    A automação deveser rápida... ... e o mais rápido que puder! 7
  • 8.
    Porque??? É um dosmaiores ganhos que temos com a automação Em automação funcional não precisamos de think time! 8
  • 9.
    Evite!!! Evite usar mecanismosde pausas implícitas (bare sleeps) Preencher o campo de usuário e senha Clicar no botão Login Esperar por 30 segundos Clicar no link Relatórios 9
  • 10.
    Use! Use mecanismos nativospara esperas (callback or polling) Preencher o campo de usuário e senha Clicar no botão Login Esperar pelo carregamento da página carregou? não: espere mais 1 segundo sim: continue Clicar no link Relatórios 10
  • 11.
    Gerenciar os erros(ou possíveis erros) é essencial! 11
  • 12.
    Como analisar etratar os erros? 12
  • 13.
    Mecanismos Geração de arquivosde logs Utilização de mecanismos da própria linguagem de programação • raise-rescue Ruby • try-cath Java/C# • try-except Phyton Uso de alguma ferramenta 13
  • 14.
  • 15.
  • 16.
    Programe! Fica esperto seocorrer algum erro Carregar dados do arquivo externo Clicar sobre o link Cadastro Enquanto existir dados no arquivo externo Preencher Nome: <nome> Preencher CPF: <CPF> Clicar no botão OK Validar mensagem apresentada <mensagem> Clicar no link Voltar Deu erro? Fu.... Se erro for Não encontrou campo Tente novamente Se erro for Registro não chegou Tente carregar o registro novamente Se erro foi qualquer outro Gere um arquivo de log Finalize Gere o relatório de evidência 16
  • 17.
    Programe! try { ArrayList dados = CarregaDados.carrega(C:massaDados.xls); driver.findElement(By.visibleText(“cadastro”)).click(); for (int i = 0; i < dados.size() ; i++) { driver.findElement(By.id(“nome”)).sendKeys(dados[i]); driver.findElement(By.id(“cpf”)).sendKeys(dados[i+1]); driver.findElement(By.id(“ok”)).click(); Assert.assertEquals(“Sucesso!”, alert.getAlert()); Driver.findElement(By.visibleText(“Voltar”)).click(); } catch (ElementNotFound enf) {} catch (DataNotFound dnf) {} catch (Exception e) {} finally { Report.geraEvidencia(); } 17
  • 18.
  • 19.
    Como executamos testescom dados? Cenário de Teste: efetue transferências entre contas do mesmo banco Caso de Teste: Efetuar transferência de conta corrente para conta corrente Passo Resultado Esperado Clicar sobre o link “Transferência entre contas” Apresentar tela de Transferência com os dados básicos do usuário apresentados: • Agencia: 1234 • Nome: Fulano da Silva Preencher os seguintes campos e clicar em Apresentar nova tela com os seguintes dados: “Transferir” • Mensagem: Saldo Suficiente para • Minha Conta: 98765-1 transferir • Agencia creditada: 7489 • Para: Ciclano Souza • Conta Creditada: 361029-5 • Valor (R$): 400.00 • Retirar da: Poupança Clicar•no Valor (R$): 400.00 botão “Efetivar” Apresentar nova tela com a mensagem: “Transferência efetuada com sucesso” 19
  • 20.
    Script? Clicar sobre olink “Transferência entre contas” Validar Agencia: 1234 Validar Nome: Fulano da Silva Preencher Minha Conta: 98765-1 Preencher Agencia creditada: 7489 Preencher Conta Creditada: 361029-5 Preencher Retirar da: Poupança Preencher Valor (R$): 400.00 Clicar em Transferir Validar Mensagem: Saldo suficiente para transferir Validar Para: Ciclano Souza Validar Valor (R$): 400.00 Clicar em Efetivar Validar mensagem: Transferência efetuada com sucesso 20
  • 21.
    Não mantenha dados fixosem casos/scripts de teste... NUNCA! 21
  • 22.
    Nunca crie NCasos de Teste “diferentes” somente para mudança dos dados! 22
  • 23.
    Script Data Driven Carregaarquivo dados.csv Enquanto existir dados no arquivo Clicar sobre o link “Transferência entre contas” Validar Agencia: <agencia> Validar Nome: <nome cliente> Preencher Minha Conta: <minha_conta> Preencher Agencia creditada: <agencia_cred> Preencher Conta Creditada: <conta_cred> Preencher Retirar da: <retirar_da> Preencher Valor (R$): <valor_retirada> Clicar em Transferir Validar Mensagem: <mensagem> Validar Para: <favorecido> Validar Valor (R$): <valor_retirada> Clicar em Efetivar Validar mensagem: <mensagem_sucesso> 23
  • 24.
    Gerar relatórios éessencial! 24
  • 25.
    Quais relatórios gerar? High-Level • Relatório Sumarizado do Teste • Relatório individual de execução Low-Level • Relatório de Evidências de Teste • Relatório das validações de cada Teste 25
  • 26.
    Como gerar? Funcionalidade existentedentro da própria ferramenta Ferramentas externas Desenvolver sua própria engine de relatórios 26
  • 27.
    Defina uma estratégiapara execução 27
  • 28.
  • 29.