O documento discute a automação de testes de aceitação em sistemas web. Ele apresenta os conceitos de teste de aceitação, motiva a automação destes testes e discute ferramentas como FitNesse e Selenium que podem ser usadas para automatizar testes de um sistema web de exemplo de busca de livros.
1. Automação de Testes de
Aceitação em Sistemas Web
Rodrigo Veiga
Apresentação originalmente exibida durante a disciplina INF2134 (Mestrado PUC-Rio)
2. Agenda
Motivação
O que é um Teste de Aceitação
Histórico
Tipos
Porque automatizar?
Problemas enfrentados na automação
Como automatizar
Ferramentas atualmente disponíveis (web)
Apresentação de um exemplo web
Análise de Ferramentas disponíveis
Conclusão
2 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
3. Motivação
Área de estudo recente e pouco explorada no país.
Relação direta com a qualidade percebida pelo cliente.
Compartilhar experiências adquiridas utilizando práticas
de automação.
3 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
4. O que é um Teste de Aceitação?
Técnica para verificar a conformidade de uma
história ou funcionalidade em relação à
expectativa do cliente
(User) Acceptance Test, Customer Test ou Story
Test
4 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
5. O que é um Teste de Aceitação
Histórico
Década de 1970
Testes de acessibilidade.
Estudos de tolerância a falhas em software
Práticas XP
Ênfase em automação desde a década de 90
Tipos existentes
User Acceptance Test
Contract / Regulation Acceptance Test
Alpha / Beta Acceptance Test
5 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
6. Porque automatizar?
“Testar é chato”
“Ninguém gosta de testar”
“Deixa o estagiário fazer…”
“Ah, isso é tão fácil que nem precisa testar”
Tornar o teste mais assertivo
Tornar o teste mais frequente
Possibilitar fazer regressão com baixo custo direto
Proporcionar Repetibilidade
Maior confiabilidade no código: diminuir custo de mudanças
Resposta mais rápida a falhas, mais produtividade
6 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
7. Problemas enfrentados
Dificuldade de aprendizado.
Mudança de cultura do corpo técnico.
Custo de desenvolvimento imediato é alto e muitas
vezes não é aceito.
Dificuldade para gerenciar a expectativa sobre os
resultados
Não elimina a necessidade de testes manuais
Dificuldade de aplicação em código “legado”.
Quem deve fazer os casos de teste? É necessário caso
de teste? Ou o script o substitui?
7 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
8. Como automatizar?
Idéia Básica:
Identificar critérios de aceitação para seus requisitos,
formatando-os de forma a serem “executáveis”, de
acordo com a ferramenta que você está trabalhando.
Ferramentas disponíveis (Plataforma Web)
Arbiter, Concordion, Fit (Fitnesse), Selenium, RFT,
SilkTest, STIQ, TestComplete, Twist, Watir, WebTest,
Zibreve…
8 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
9. Sistema Web para Exemplo
“Livros On Line”
Cadastro de Livros
Pesquisa de Livros
9 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
10. Como automatizar?
“Livros On Line”
Abordagem “Ágil”
História #1: Pesquisa de Livros
Eu, usuário, quero pesquisar um livro informando o nome do
autor ou do título do livro.
Critérios de Aceitação:
Um usuário entra com um valor que corresponda ao menos
a um autor ou título de algum livro cadastrado e a pesquisa
exibe o mesmo no seu resultado.
Um usuário entra com um valor que não corresponda a
nenhum autor ou livro cadastrado e nenhum livro é
encontrado no resultado da pesquisa.
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
10 / 28
11. Fit/ Fitnesse
O que é?
Fit
“framework open-source para automação de testes de
aceitação cuja idéia principal é integrar o trabalho de
clientes, analista, testadores e desenvolvedores”
Fitnesse
“Um Wiki, um servidor web, uma ferramenta de testes”
Facilita a entrada de dados no formato aceito pelo Fit.
Ajuda a organizar os casos de teste.
11 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
12. Fit / Fitnesse
Como funcionam
Fit:
Clientes escrevem exemplos de como seu software deve funcionar,
formatados em tabelas e salvos como HTML (usando planilhas, por
exemplo). Esses exemplos são então conectados com o software através
das Fixtures (hotspots do framework que devem ser instanciados, um para
cada teste) e checados automaticamente pelo framework
Fitnesse:
complementa o Fit, facilitando a entrada das informações no formato de
tabela, através de uma interface semelhante a uma Wiki.
Instalação
Fit e Fitnesse: Requerem JDK 1.5 instalado
Colocar o Fit dentro do seu projeto e rodar um jar usando a jvm
12 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
13. Fit / Fitnesse
Exemplo (Livros On Line – pesquisa)
pacote.exemplo.PesquisaLivrosTestFixture
termoPesquisado pesquisar?
“Gabriela, Cravo e “Gabriela, Cravo e
Canela” Canela”
“Machado de Assis”
“Vidas Secas” “Vidas Secas”
Ou seja, se pesquisarmos por “Gabriela, Cravo e Canela”, o retorno deve ser um
livro com o título mesmo título. Já se pesquisarmos por “Machado de Assis”, o
retorno deve ser vazio.
A tabela executa diretamente o código a seguir (a referência é feita por nomes)
Você diz para o Fitnesse onde entronar o código através de um “ClassPath”.
13 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
14. Fit / Fitnesse
Exemplo (Livros On Line – pesquisa)
Código
public class PesquisarLivrosTestFixture extends ColumnFixture {
public String termoPesquisado;
public boolean pesquisar() {
String titulo = quot;quot;;
List livros = Facade.obterLivros(termoPesquisado);
if (livro != null && !livro.isEmpty()) {
titulo = livro.get(0).getTitulo();
}
return titulo;
}
}
14 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
15. Fit / Fitnesse
Linguagens de programação suportadas
Atualmente: Java, C++, Python, Ruby, Delphi, C#
Extensível?
Sim
Podem ser criadas novas Fixtures, facilitando a interpretação das
tabelas.
Integração Contínua?
Através de outras ferramentas relacionadas (AntFit)
15 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
16. Selenium
O que é?
Suíte de ferramentas open-source que auxiliam na
execução de “testes de sistema” a partir da camada
de apresentação de um sistema Web
Selenium IDE Selenium Remote Control
Selenium Suite
Selenium Grid
16 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
17. Selenium
ou
17 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
18. Selenium
Instalação
Selenium IDE: Mozilla Firefox add-on
Selenium Remote Control: rodar um build do pacote
na linguagem desejada
Selenium Grid: rodar um build do pacote (requer jdk e
ANT)
Linguagens de programação suportadas
“Selenesse”, Java, C#, Python, Ruby, Perl, PHP
Integração Contínua?
Sim, usando o ANT (disponibiliza tasks para acionar
o RC)
18 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
19. Selenium
Exemplo (Livros On Line – pesquisa)
19 / 28
20. Selenium
Exemplo (“Selenesse” ou Java)
<!DOCTYPE html PUBLIC quot;-//W3C//DTD XHTML 1.0 Strict//ENquot;
quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtdquot;>
<html xmlns=quot;http://www.w3.org/1999/xhtmlquot; xml:lang=quot;enquot;
lang=quot;enquot;>
<head profile=quot;http://selenium-ide.openqa.org/profiles/test-casequot;>
<meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=UTF-8quot;
/>
<link rel=quot;selenium.basequot; href=quot;quot; />
<title>New Test</title>
</head>
<body>
<table cellpadding=quot;1quot; cellspacing=quot;1quot; border=quot;1quot;>
<thead>
<tr><td rowspan=quot;1quot; colspan=quot;3quot;>New Test</td></tr>
</thead><tbody>
<tr>
<td>open</td>
public class NewTest extends SeleneseTestCase {
<td>/books/search</td>
public void setUp() throws Exception {
<td></td>
</tr>
setUp(quot;http://localhost:8080/quot;, quot;*chromequot;); }
<tr>
public void testNew() throws Exception {
<td>type</td>
<td>query</td>
selenium.open(quot;/books/searchquot;);
<td>Livro 1</td>
</tr> selenium.type(quot;queryquot;, quot;Livro 1quot;);
<tr>
selenium.click(quot;quot;);
<td>clickAndWait</td>
<td></td>
selenium.waitForPageToLoad(quot;30000quot;);
<td></td>
verifyEquals(quot;Livro 1quot;,
</tr>
<tr>
selenium.getText(quot;livrosquot;)); }}
<td>verifyText</td>
<td>livros</td>
<td>Livro 1</td>
</tr>
</tbody></table>
</body>
</html>
20 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
21. Concordion
O que é?
Ferramenta open-source de teste de aceitação também
baseada em colaboração entre clientes e desenvolvedores
Como funciona?
Especificações são escritas em formato HTML
Desenvolvedores “instrumentam” o HTML, com “comandos”
necessários para uma validação
Fixtures (extensões de Junit Test Cases, não ligadas ao Fit)
processam os “comandos” presentes na especificação
instrumentada
21 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
22. Concordion
Como funciona a ferramenta Concordion
22 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
23. Concordion
Exemplo (Livros On Line – pesquisa)
<html xmlns:concordion=quot;http://www.concordion.org/2007/concordionquot;>
Historia #1 <body>
… <h1>Pesquisa de Livros</h1>
<p>
Critérios de Aceitação: Um usuário entra com um valor que corresponda ao menos a um
Um usuário entra com um valor autor ou título de algum livro cadastrado e a pesquisa exibe o mesmo no
seu resultado.
que corresponda ao menos a um </p>
autor ou título de algum livro <p>
instrumentação Um usuário entra com um valor que não corresponda a nenhum autor ou
cadastrado e a pesquisa exibe o livro cadastrado e nenhum livro é encontrado no resultado da pesquisa.
mesmo no seu resultado. </p>
<div class=quot;exemploquot;>
<h3>Exemplo</h3>
<p>
Um usuário entra com um valor Nome do livro pesquisado
que não corresponda a nenhum <span concordion:execute=quot;#result = pesquisar(#TEXT)quot;>Livro
1</span>
autor ou livro cadastrado e <span concordion:assertEquals=quot;#resultquot;>Livro 1</span>
nenhum livro é encontrado no <span concordion:execute=quot;#result = pesquisar(#TEXT)quot;>Livro
nao cadastrado</span>
resultado da pesquisa. <span concordion:assertEquals=quot;#resultquot;></span>
</p>
</div>
</body>
</html>
23 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
24. Concordion
Exemplo (Livros On Line – pesquisa)
Código
public class PesquisaLivrosTest extends ConcordionTestCase {
public Result pesquisar(String termo) {
String titulo = quot;quot;;
List livros = Facade.obterLivros(termoPesquisado);
if (livro != null && !livro.isEmpty()) {
titulo = livro.get(0).getTitulo();
}
return titulo;
}
}
24 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
25. Concordion
Instalação
Rodar um jar (requer jdk, junit)
Linguagens de Programação suportadas
Java
Integração Contínua?
Sim: através do ANT
25 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
26. Conclusão
Fit / Fitnesse
Foco na colaboração com cliente
Dificuldade para testar camada de apresentação
Selenium
Gravação dos testes de forma visual (Firefox)
Exige conhecimento de HTML / DOM para criar testes eficazes
Concordion
Foco na colaboração com o cliente
Exige um passo a mais de instrumentação, que requer conhecimento
de html e da api do Concordion
Restrito a Java (por enquanto)
Perguntas?
26 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
27. Referência Bibliográfica
Fit: http://fit.c2.com
Fitnesse; http://fitnesse.org, http://fitnesse.info
Concordion; http://www.concordion.org
Rational Functional Tester; http://www-
01.ibm.com/software/awdtools/tester/functional/
Twist; http://studios.thoughtworks.com/twist-agile-test-automation
Selenium; http://selenium.openqa.org
Selenium RC; http://selenium-rc.openqa.org
StoryTestIQ (STIQ); http://storytestiq.solutionsiq.com/wiki/Main_Page
Zibreve; http://www.zibreve.com
Arbiter; http://arbiter.sourceforge.net/
27 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB
28. Referência Bibliográfica
Beck, K.; Test-Driven Development by Example; New York, NY: Addison-
Wesley; 2003
Mugridge R., Cunningham W.; Fit for Developing Software: Framework for
Integrated Tests: Prentice Hall; 2005
Fewster, M.; Graham, D.; Software Test Automation; Addison-Wesley;
1999
Koskela, L; Test Driven: TDD and Acceptance TDD for Java Developers;
Manning Publications; 2007
Koomen, Tim; Pol, Martin; Test Process Improvement: A step-by-step guide
to structured testing; ACM Press; 1999
Black, Rex; Pragmatic Software Testing: Becoming an Effective and
Efficient Test Professio$nal; 2007
B. Randell, System structure for software fault tolerance; ACM; 1975, Los
Angeles, CA
28 / 28
INF2134 - Teste e medição de software Automação de Testes de Aceitação em Sistemas WEB