View
29
Download
1
Category
Preview:
DESCRIPTION
Teste De Sistemas Web Com JUnit E Suas Extensões. Eduardo Aranha. Por Quê Testar Sistemas Web?. Sistemas 24x7 Corretude Performance Escalabilidade Etc. O Que Devemos Testar?. Funcionalidade (testes de aceitação) Performance Segurança Apresentação Muitos outros aspectos. - PowerPoint PPT Presentation
Citation preview
Teste De Sistemas Web Com JUnit E Suas Extensões
Eduardo Aranha
Por Quê Testar Sistemas Web?
Sistemas 24x7
Corretude
Performance
Escalabilidade
Etc.
O Que Devemos Testar?
Funcionalidade (testes de aceitação)
Performance
Segurança
Apresentação
Muitos outros aspectos
Por Quê Utilizar O Framework JUnit?
Automação de testes de unidade
JUnit e suas extensões são Free e Open Source
Utilização no mercado alavancada pela metodologia Extreme Programming
Versão atual: 3.7 (21/05/2001)
O Framework JUnit
Implementação de classes e métodos de teste
Execução dos testes através de modo textual ou com interface gráfica
Não dá suporte para parametrização dos dados de teste
O Framework Junit: Exemplo
public class MoneyTest extends TestCase {
private Money m12CHF; ....
protected void setUp() { m12CHF = ... }
public void testSimpleAdd() {
Money result = m12CHF.add(m14CHF);
assert(expected.equals(result));
}
}
A Extensão JPerf
Teste de Performance
Aplicação do padrão de projeto Decorator
Utilização de classes decoradoras em testes JUnit já criados
Versão atual: 1.3 (11/05/2001)
A Extensão JPerf
Decoradores– TimedTest
Testa o tempo gasto por um teste
– LoadTestSimula a execução concorrente de um teste por um
determinado número de usuários
– ThreadedTest Executa o teste em um novo Thread
A Extensão JPerf: Exemplo
...
Test testCase = new ExampleTestCase("testOneSecondResponse");
Test loadTest = new LoadTest(testCase, maxUsers, iterations, timer);
Test timedTest = new TimedTest(loadTest, maxElapsedTime);
...
A Extensão Cactus
Projeto suportado pelo grupo Apache
Teste de unidade de Servlets
Testes de caixa branca
Simulação do ambiente de execução de Servlets
Versão atual: 1.0 (02/05/2001)
A Extensão Cactus: Exemplo
public class SampleServlet extends HttpServlet {
void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { ... registerUser(req, resp) ... }
String registerUser(HttpServletRequest req, HttpServletResponse resp) {
String name = theRequest.getParameter("USER_NAME");
HttpSession session = theRequest.getSession(); session.putValue("NAME", name);
Cookie cookie = new Cookie("ID", name); theResponse.addCookie(cookie);
return name;
}
…
A Extensão Cactus: Exemplo
public class TestSimpleServlet extends ServletTestCase {
void beginRegisterUser(ServletTestRequest theRequest) { theRequest.addParameter("USER_NAME", "Vincent");
}
void testRegisterUser() {
SimpleServlet servlet = new SimpleServlet();
String name = servlet.registerUser(request, response);
assertEquals("Vincent", name);
assertEquals("Vincent", (String)session.getValue("NAME"));
}
A Extensão Cactus: Exemplo
void endRegisterUser(HttpURLConnection theConnection) {
Hashtable cookies = AssertUtils.getCookies(theConnection);
Vector list = (Vector) cookies.get("ID");
assert(list.size() == 1);
ClientCookie cookie = (ClientCookie) list.elementAt(0);
assertEquals("ID", cookie.getName());
assertEquals("Vincent", cookie.getValue());
}
A Extensão Cactus: Exemplo
void testDoGet() {
SimpleServlet servlet = new SimpleServlet();
servlet.doGet(request, response);
}
void endDoGet(HttpURLConnection theConnection) {
assertEquals(
"<html><head/><body><h1>Your name is” + “Vincent</h1></body></html>",
AssertUtils.getResponseAsString(theConnection));
}
}
A Extensão HttpUnit
Testes de sistemas Web (servlets, páginas estáticas, JSP, ...)
Testes de caixa preta
Suporta HTTPS e cookies
A Extensão HttpUnit
Não suporta JavaScript (em construção)
Utilização de classes que representam conexões, páginas HTML, formulários, ...
Versão atual: 1.2.4 (04/05/2001)
A Extensão HttpUnit: Exemplo
try {
WebRequest request; WebResponse response;
WebConversation conversation = new WebConversation();
request = new GetMethodWebRequest("http://www.x.com/" );
response = conversation.getResponse( request );
WebForm loginForm = response.getForms()[0];
request = loginForm.getRequest();
request.setParameter( "name", "master" );
response = conversation.getResponse( request );
} catch (Exception e) { ... }
A Extensão JXUnit
Testes de unidade assim como o JUnit
Separação entre dados e código de teste
Não suporta diretamente a parametrização dos dados de teste
A Extensão JXUnit
Não suporta testes de performance
Integração com JPerf não é direta
Integrado com Quick (mapeamento de dados XML para objetos Java)
Versão atual: 2.1 (20/05/2001)
A Extensão JXUnit
Código de teste– Classes que implementam a interface JXTestStep– Leitura dinâmica das classes
Dados de teste– Arquivos XML
A Extensão JXUnit: Exemplo
import net.sourceforge.jxunit.*;
public class CopiadorTestStep implements JXTestStep {
public void eval(JXTestCase testCase) throws Throwable {
JXProperties properties=testCase.getProperties();
Object data=properties.get("input");
properties.put("output",data);
}
}
A Extensão JXUnit: Exemplo
<jxu>
<set name="input" value=“v1"/>
<eval stepClass=“CopiadorTestStep"/>
<ifEqual converse=“true” name="output" value=“v1">
<save name="output" file=“output.txt"/>
<fail>Dummy Test Failure: myData.xml</fail>
</ifEqual>
...
</jxu>
A Extensão JXUnit: SCHEMA TREE
Jxu |---testStep*
|---fail |---isNull |---ifNull |---testStep* |---isEqual |---ifEqual |---testStep* |---set |---save |---eval
|---exception |---trap
|---testStep* |---subst |---main
|---testStep* |---arg |---absolute
A Extensão JXUnit
Execução do JXUnit procura no diretório corrente e nos subdiretórios
– Dados de teste (.jxu)
– Arquivo de contexto (.jxuc)
A Extensão JXWeb
Integração do HttpUnit e do JXUnit
Script de teste escrito em JXWeb (extensão da linguagem JXUnit)
Não é necessário programação em Java (em tese)
Versão atual: 0.2 (23/05/2001)
A Extensão JXWeb: Exemplo
<jxw>
<set name="req" value="http://www.expoimovel.com.br"/>
<httpGet/>
<getLink text=“Lançamentos"/>
<httpGet/>
<save file=“paginaLancamentos.html" name="respText"/>
</jxw>
A Extensão JXWeb: SCHEMA TREE
jxw
|---testStep*
|---getForm
|---getFormParameter
|---getLink
|---httpGet |---setFormParameter
|--- ... [ TODOS OS OUTROS MARCADORES DO JXUNIT]
Suporte Para Teste de Sistemas Web
O ideal– Utilização exclusiva do JXWeb e/ou Cactus
O possível (“Quem não tem cão…”)– Utilização do JXWeb e/ou Cactus– JXUnit e HttpUnit para os comandos ainda não
implementados em JXWeb– JXPerf para o teste de performance enquanto não
for implementado em JXUnit (ou JXWeb)
Exemplo
Ver Arquivo de Exemplo Externo à Apresentação
Referências
JUnit
http://www.junit.org JPerf
http://www.clarkware.com/software/JUnitPerf.html Cactus
http://jakarta.apache.org/commons/cactus/
Referências
HttpUnit
http://httpunit.sourceforge.net/ JXUnit
http://jxunit.sourceforge.net/ JXWeb
http://sourceforge.net/projects/jxweb/
Referências
Quick
http://jxquick.sourceforge.net/quick3/
Extreme Programming
http://www.extremeprogramming.org
Referências
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software, 1995. Addison-Wesley.
Recommended