33
Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

Embed Size (px)

Citation preview

Page 1: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

Teste De Sistemas Web Com JUnit E Suas Extensões

Eduardo Aranha

Page 2: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

Por Quê Testar Sistemas Web?

Sistemas 24x7 Corretude

Performance Escalabilidade Etc.

Page 3: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

O Que Devemos Testar?

Funcionalidade (testes de aceitação) Performance

Segurança Apresentação Muitos outros aspectos

Page 4: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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)

Page 5: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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

Page 6: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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)); }

}

Page 7: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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)

Page 8: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

A Extensão JPerf

Decoradores– TimedTest

Testa o tempo gasto por um teste– LoadTest

Simula a execução concorrente de um teste por um determinado número de usuários

– ThreadedTest Executa o teste em um novo Thread

Page 9: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

A Extensão JPerf: Exemplo

...

Test testCase = new ExampleTestCase("testOneSecondResponse");

Test loadTest = new LoadTest(testCase, maxUsers, iterations, timer);

Test timedTest = new TimedTest(loadTest, maxElapsedTime);

...

Page 10: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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)

Page 11: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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;

} …

Page 12: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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"));

}

Page 13: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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());

}

Page 14: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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));}

}

Page 15: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

A Extensão HttpUnit

Testes de sistemas Web (servlets, páginas estáticas, JSP, ...)

Testes de caixa preta Suporta HTTPS e cookies

Page 16: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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)

Page 17: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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) { ... }

Page 18: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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

Page 19: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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)

Page 20: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

A Extensão JXUnit

Código de teste– Classes que implementam a interface JXTestStep– Leitura dinâmica das classes

Dados de teste– Arquivos XML

Page 21: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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);

}

}

Page 22: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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>

Page 23: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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

Page 24: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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)

Page 25: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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)

Page 26: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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>

Page 27: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

A Extensão JXWeb: SCHEMA TREE

jxw   |---testStep*     

|---getForm     |---getFormParameter|---getLink|---httpGet     |---setFormParameter     |--- ... [ TODOS OS OUTROS MARCADORES DO

JXUNIT]

Page 28: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

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)

Page 29: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

Exemplo

Ver Arquivo de Exemplo Externo à Apresentação

Page 32: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

Referências

Quick

http://jxquick.sourceforge.net/quick3/

Extreme Programming

http://www.extremeprogramming.org

Page 33: Teste De Sistemas Web Com JUnit E Suas Extensões Eduardo Aranha

Referências

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software, 1995. Addison-Wesley.