1 / 33

Teste De Sistemas Web Com JUnit E Suas Extensões

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.

neo
Download Presentation

Teste De Sistemas Web Com JUnit E Suas Extensões

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Por Quê Testar Sistemas Web? • Sistemas 24x7 • Corretude • Performance • Escalabilidade • Etc.

  3. O Que Devemos Testar? • Funcionalidade (testes de aceitação) • Performance • Segurança • Apresentação • Muitos outros aspectos

  4. 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)

  5. 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

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

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

  8. 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

  9. A Extensão JPerf: Exemplo ... Test testCase = new ExampleTestCase("testOneSecondResponse"); Test loadTest = new LoadTest(testCase, maxUsers, iterations, timer); Test timedTest = new TimedTest(loadTest, maxElapsedTime); ...

  10. 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)

  11. 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; } …

  12. 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")); }

  13. 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()); }

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

  15. A Extensão HttpUnit • Testes de sistemas Web (servlets, páginas estáticas, JSP, ...) • Testes de caixa preta • Suporta HTTPS e cookies

  16. 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)

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

  18. 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

  19. 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)

  20. A Extensão JXUnit • Código de teste • Classes que implementam a interface JXTestStep • Leitura dinâmica das classes • Dados de teste • Arquivos XML

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

  22. 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>

  23. 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

  24. 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)

  25. 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)

  26. 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>

  27. A Extensão JXWeb: SCHEMA TREE jxw |---testStep*      |---getForm |---getFormParameter |---getLink |---httpGet |---setFormParameter |--- ... [ TODOS OS OUTROS MARCADORES DO JXUNIT]

  28. 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)

  29. Exemplo • Ver Arquivo de Exemplo Externo à Apresentação

  30. Referências • JUnit http://www.junit.org • JPerf http://www.clarkware.com/software/JUnitPerf.html • Cactus http://jakarta.apache.org/commons/cactus/

  31. Referências • HttpUnit http://httpunit.sourceforge.net/ • JXUnit http://jxunit.sourceforge.net/ • JXWeb http://sourceforge.net/projects/jxweb/

  32. Referências • Quick http://jxquick.sourceforge.net/quick3/ • Extreme Programming http://www.extremeprogramming.org

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

More Related