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

Teste De Sistemas Web Com JUnit E Suas Extensões

  • Upload
    neo

  • View
    29

  • Download
    1

Embed Size (px)

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

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

Teste De Sistemas Web Com JUnit E Suas Extensões

Eduardo Aranha

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

Por Quê Testar Sistemas Web?

Sistemas 24x7

Corretude

Performance

Escalabilidade

Etc.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Exemplo

Ver Arquivo de Exemplo Externo à Apresentação

Page 30: Teste De Sistemas Web Com JUnit E Suas Extensões

Referências

JUnit

http://www.junit.org JPerf

http://www.clarkware.com/software/JUnitPerf.html Cactus

http://jakarta.apache.org/commons/cactus/

Page 31: Teste De Sistemas Web Com JUnit E Suas Extensões

Referências

HttpUnit

http://httpunit.sourceforge.net/ JXUnit

http://jxunit.sourceforge.net/ JXWeb

http://sourceforge.net/projects/jxweb/

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

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

Referências

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