J820. Testes de interface Web com. HttpUnit. argonavis.com.br. Helder da Rocha (helder@acm.org)



Documentos relacionados
INTRODUÇÃO À TECNOLOGIA SERVLETS

Web Services. Autor: Rômulo Rosa Furtado

Java e JavaScript. Krishna Tateneni Tradução: Lisiane Sztoltz

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Java II. Sérgio Luiz Ruivace Cerqueira

Programação Web. Professor: Diego Oliveira. Conteúdo 02: JSP e Servlets

Ajax Asynchronous JavaScript and Xml

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

PROGRAMAÇÃO PARA INTERNET. Fonte: Raul Paradeda

Tecnologias Web. Formulários HTML

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS -HTML 5: ARMAZENAMENTO DE DADOS (CLIENTE) Prof. Angelo Augusto Frozza, M.Sc.

Manual de Instalação do Agente Citsmart

Kassius Vargas Prestes

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

Desenvolvimento WEB II. Professora: Kelly de Paula Cunha

Manipulação de Banco de Dados com Java 1. Objetivos

Aula 03 - Projeto Java Web

Parte I. Demoiselle Mail

Servlets e Applets, funcionamento e comparativo.

Java para Desenvolvimento Web

Programando em PHP. Conceitos Básicos

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Java para WEB. Servlets

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Associação Carioca de Ensino Superior Centro Universitário Carioca

JavaScript (Funções, Eventos e Manipulação de Formulários)


3. Explique o motivo pelo qual os protocolos UDP e TCP acrescentam a informação das portas (TSAP) de origem e de destino em seu cabeçalho.

Java 2 Standard Edition Fundamentos de

MANUAL DO ANIMAIL Terti Software

Ajax não é dependente dos servidores Web, e como tal poderá ser usado com PHP, JSP, ASP e ASP.NET.

PHP. Hypertext Pre-Processor

Mais sobre uso de formulários Site sem Ajax

4. Qual seria o impacto da escolha de uma chave que possua letras repetidas em uma cifra de transposição?

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

Como funciona a plataforma Superlógica? - Livro 4 de 4. Como funciona a interface de integração? Como você poderá complementar o sistema?

Objetos Implícitos. Conceito. Instanciados pelo próprio contêiner. Disponíveis em quaisquer páginas JSP.

Programação para a Internet. Prof. M.Sc. Sílvio Bacalá Jr sbacala@gmail.com

Curso de Aprendizado Industrial Desenvolvedor WEB

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

TUTORIAL JAVA AS - HTTP CLIENT COMPOSITION ENVIROMENT 7.1

AJAX no GASweb. Mas e afinal, para que usamos o AJAX?

Guia de instalação. Configuração necessária Instalação e ativação

Scriptlets e Formulários

Manual de Operação do Sistema de Tickets Support Suite

Acesso Remoto Placas de captura

Módulo e-rede Prestashop v1.0. Manual de. Instalação do Módulo. estamos todos ligados

Conteúdo Dinâmico. Introdução. Interação Browser x Servidor Web. Interação Browser x Servidor Web

JDBC Java Database Connectivity

Criação de Servlets Name Directory Build WAR JSP/Servlet frameworks Launch URL Package Class name Generate header comments

Fonte: - Illustration by Gaich Muramatsu

Conhecendo um pouco mais o servidor Apache TomCat

Lista de Revisão. 3. Analise a afirmativa a seguir como verdadeira ou falsa e justifique.

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

Acessando um Banco de Dados

PASSO A PASSO GOOGLE DOCS - FORMULÁRIOS GOOGLE DOCS

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

J550 Segurança e Controle de erros

Programação WEB (JSP + Banco Dados) Eng. Computação Prof. Rodrigo Rocha

Manual de Gerenciamento de Conteúdo

Material de apoio a aulas de Desenvolvimento Web. Tutorial Java WEB JSP & HTML & CSS & CLASSE & OBJETOS. AAS -

Ajax Asynchronous JavaScript and Xml

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

INTRODUÇÃO AO DESENVOLVIMENTO WEB

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Manual Integra S_Line

Linguagem de Programação III Aula 2 Revisão Parte II

IFSC-Programação para a WEB - prof. Herval Daminelli

EN3611 Segurança de Redes Prof. João Henrique Kleinschmidt Prática Wireshark Sniffer de rede

Configuração de assinatura de

Java II. Sérgio Luiz Ruivace Cerqueira

Java para Desenvolvimento Web

Integração de sistemas utilizando Web Services do tipo REST

Prática Sobre Servlets e JSP

HTML Básico Formulários. Matheus Meira

Manual de Utilização Moodle

Módulo e-rede Prestashop v1.0. Manual de. Instalação do Módulo. estamos todos ligados

QUALIDATA Soluções em Informática. Módulo CIEE com convênio empresas

Introdução ao PHP. Prof. Késsia Marchi

Java Beans e Servlets

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS -HTML 5: ARMAZENAMENTO DE DADOS (CLIENTE) Prof. Angelo Augusto Frozza, M.Sc.

Tutorial do administrador do HelpCenterLive (Sistema de Ajuda)

Arquiteturas de Aplicações Web. Leonardo Gresta Paulino Murta

Criando variáveis via URL

PHP Profissional. Alexandre Altair de Melo Mauricio G. F. Nascimento

WEBDESIGN. Professor: Paulo Trentin Escola CDI de Videira

EAI Manual do Administrador

DIRETORIA DE TECNOLOGIA DA INFORMAÇÃO

Manual de Utilização do GLPI

GUIA DE CONFIGURAÇÃO CONEXÕES VPN SSL (CLIENT TO SERVER)

Como usar a documentaçã

Transcrição:

J820 Testes de interface Web com HttpUnit Helder da Rocha (helder@acm.org)

O que é HttpUnit API Java para comunicação com servidores HTTP Permite que programas construam e enviem requisições, e depois recebam e processem respostas Cria parâmetros de formulários, cria cookies, segue links, interpreta HTML (tabelas, links, etc.) e realiza outras tarefas normalmente feitas por browsers Não é uma ferramenta de testes Ésóum cliente HTTP. Pode ser usado com JUnit para realizar testes em aplicações Web Testes HttpUnit não são testes de unidade São testes de interface (funcionais) ou testes de integração (dependem do servidor) Não testa JavaScript (use JsUnit: jsunit.sourceforge.net) 2

Como instalar e usar Onde encontrar http://httpunit.sourceforge.net Acrescente Tidy.jar e httpunit.jar no classpath da aplicação testada Tidy.jar: monta uma árvore DOM do HTML recebido na resposta (permite também interpretar página como XML) httpunit.jar: classes que implementam o cliente HTTP Importe com.meterware.httpunit.* no TestCase Operação básica WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest("http://xyz.com/t.html"); WebResponse response = wc.getresponse(request); String html = response.gettext(); 3

Principais classes da API do HttpUnit com.meterware.httpunit.webconversation Representa uma sessão de cliente Web (usa cookies e permite lidar com requisições e respostas HTTP) com.meterware.httpunit.webrequest Representa uma requisição. Permite setar parâmetros com.meterware.httpunit.webresponse Representa uma resposta. A partir deste objeto pode-se obter objetos WebLink, WebTable e WebForm com.meterware.httpunit.weblink Possui métodos para extrair dados de links de hipertexto com.meterware.httpunit.webtable Possui métodos para navegar na estrutura de tabelas com.meterware.httpunit.webform Possui métodos para analisar a estrutura de formulários 4

WebConversation, WebRequest, WebResponse WebRequest pode ser criado de várias formas. Primeiro é preciso obter uma página. Para isto a melhor solução é usar GetMethodWebRequest WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest("http://xyz.com/t.html"); WebResponse response = wc.getresponse(request); Se não for preciso usar o objeto request (para, por exemplo, acrescentar parâmetros), pode-se utilizar forma mais compacta WebConversation wc = new WebConversation(); WebResponse response = wc.getresponse("http://xyz.com/t.html"); Tendo-se uma página pode-se iniciar novas requisições através de métodos de WebLink e WebForm 5

Testes com HttpUnit Para usar HttpUnit, importe o pacote com.meterware.httpunit no TestCase e use asserções normalmente no código Vários métodos que permitem navegar no HTML retornado apóes uma requisição podem ser usados para extrair dados testáveis da resposta para uso nas asserções. gettext() de WebResponse retorna a página inteira. Pode-se fazer asserções verificando a presença de determinados substrings com String.indexOf(): asserttrue(resp.gettext().indexof("texto esperado")); getcolumncount(), getrowcount(), gettablecell() e outros métodos de WebTable permitem testar tabelas Métodos de WebForm permitem verificar a existência de objetos de formulário como botões, conteúdo de caixas de texto, etc. WebRequest permite ler cookies criados WebLink permite descobrir a presença de links na página 6

Simulação de cliques em links Uma vez obtida uma página, pode-se selecionar os links que ela contém e clicá-los para obter uma segunda resposta a ser testada Links podem ser selecionados através do seu conteúdo através de response.getlinkwith() Se webconversation.getresponse() receber código 404 uma exceção HttpNotFoundException será provocada WebConversation wc = new WebConversation(); WebResponse response = wc.getresponse("http://xyz.com/t.html"); WebLink link = response.getlinkwith("resumo"); WebRequest clickresumo = link.getrequest(); try { WebResponse respresumo = wc.getresponse(clickresumo); } catch (HttpNotFoundException e) { fail("link quebrado! " + e); } 7

Parâmetros de uma requisição HTTP Parâmetros são pares nome=valor gerados pelo cliente em links e formulários. São concatenados em strings separados por &: nome=jo%e3o+grand%e3o&id=agente007&acesso=3 Parâmetros podem ser passados na requisição de duas formas Se o método HTTP for GET, os parâmetros são passados em uma única linha no query string, que estende a URL após um "?" GET /servlet/teste?id=agente007&acesso=3 HTTP/1.0 Se o método HTTP for POST, os parâmetros são passados como um stream no corpo na mensagem (o cabeçalho Content-length, presente em requisições POST informa o tamanho POST /servlet/teste HTTP/1.0 Content-length: 21 Content-type: x-www-form-urlencoded id=agente007&acesso=3 8

Envio de requisições com parâmetros Parâmetros HTTP podem ser acrescentados em qualquer requisição através do HTTPUnit Podem ser incluídos em um acesso via HttpUnit usando o método setparameter() de WebRequest Para testar o resultado de uma requisição que recebeu parâmetro, pode-se usar gettext() de WebResponse para obter o HTML WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest("http://xyz.com/t.html"); request.setparameter("nome", "fulano"); request.setparametro("senha", "F932*xw"); WebResponse response = wc.getresponse(request); String html = response.gettext(); assertfalse(html.indexof("acesso Negado")); 9

Formulários Há vários métodos para manipular formulários. Pode-se Detectar a presença de objetos de formulários e seu conteúdo Verificar métodos usados, nome do formulários e outros atributos Simular o envio clicando no botão submit e obter a resposta No exemplo abaixo, a página retornada após o envio do formulário deve conter um campo de texto preenchido com o valor do parâmetro definido na requisição WebConversation wc = new WebConversation(); WebResponse response = wc.getresponse("http://xyz.com/t.html"); WebForm form = response.getformwithid("cadastro"); assertequals("post", form.getmethod().touppercase()); String camponome = form.getparametervalue("nome"); assertnotnull(camponome); // se for null, campo não existe form.setparameter("nome", "Fulano"); WebRequest request = form.getrequest("botaoenviar"); WebResponse response = wc.getresponse(request); assertequals("fulano", form.getparametervalue("nome"); 10

Testes de tabelas Há vários métodos para navegar nas células de tabelas Use métodos das classes WebTable e TableCell WebConversation wc = new WebConversation(); WebResponse response = wc.getresponse("http://xyz.com/t.html"); WebTable[] tables = response.gettables(); assertnotnull(tables); assertequals(tables.length, 1); // só há uma tabela WebTable table = tables[0]; int rows = table.getrowcount(); boolean keydefined = false; for (int i = 0; i < rows; i++) { String key = table.getcellastext(i, 0); // col 1 String value = table.getcellastext(i, 1); // col 2 if (key.equals("user")) { keydefined = true; assertequals("jabberwock", value); } } if (!keydefined) { fail("no key named USER was found!"); } 11

Configuração de proxy Para realizar testes em um Web site remoto quando as máquinas de desenvolvimento estiverem atrás de uma firewall é preciso seter algumas propriedades proxyset=true proxyhost=nomedohostouip proxyport=portadoproxy Podem ser passadas em linha de comando (usando "-D"), através do Ant (<jvmargs>) ou pelo código: System.getProperties().put("proxySet", "true"); System.getProperties().put("proxyHost","200.9.2.1"); System.getProperties().put("proxyPort", "3831"); 12

Exercícios 1. Escreva testes para testar a aplicação Web fornecida A aplicação recebe parâmetros e grava os dados no contexto. No final retorna uma página HTML Rode a aplicação passando parâmetros diferentes e analise os resultados. Escreva testes com o HttpUnit que capturem todas as situações possíveis (tabelas, links e objetos de formulário esperados) 13

Exercícios com aplicações Web Para compilar aplicações Web é preciso importar os arquivos da Servlet API Pode-se usar o JBoss ou o Tomcat Para usar o JBoss altere os arquivos build.properties server.home=c:/jboss-3.2.1/server/default servlet.jar=${server.home}/lib/javax.servlet.jar deploy.dir=${server.home}/deploy No build.xml, é preciso carregar build.properties Use <property file="build.properties" /> Arquivo necessário apenas na fase de compilação 14

Fontes [1] Richard Hightower e Nicholas Lesiecki. Java Tools for extreme Programming. Wiley, 2002. [2] Eric Burke & Brian Coyner. Java extreme Programming Cookbook. O'Reilly, 2003 15

Curso J820 Produtividade e Qualidade em Java: Ferramentas e Metodologias Revisão 1.1 2002, 2003, Helder da Rocha (helder@acm.org)