对httpunit的概念是一片茫然,google了一下。

1.下载网址

目前版本是1.6.2,网上新版本的介绍中文的很罕见,找了两个比较旧的相关信息copy过来,仅仅为了有个粗略的印象。

文1

HttpUnit从根本上说并不是单元测试。它更接近于功能测试。使用HttpUnit编写的Web应用程序测试并不对应用程序代码的片段做测试,而是在外部询问Web服务器并检查接收的响应。

HttpUnit的WebClient(抽象类)/WebConversation扮演了诸如Web浏览器之类的角色: 维护客户端状态——包括诸如cookies、相关URL以及页面框架设置之类的持续响应头,并且允许某个用户发送请求到指定资源和得到响应。

下面这个例子假设访问一个需要登陆的站点,对于登陆部分所做的测试。

import com.meterware.httpunit.WebConversation;

import com.meterware.httpunit.WebForm;

import com.meterware.httpunit.WebRequest;

import com.meterware.httpunit.WebResponse;

import junit.framework.TestCase;

/**

* @author davis

*

* TODO To change the template for this generated type comment go to

* Window - Preferences - Java - Code Style - Code Templates

*/

public class TestSample extends TestCase {

WebConversation conversation;

/*

* @see TestCase#setUp()

*/

protected void setUp() throws Exception {

conversation = new WebConversation();

}

private WebResponse goToPrivatePage() throws Exception {

return conversation.getResponse("http://localhost:8080/myreport/reportGroup.action");

}

public void testLogin() throws Exception {

WebResponse response = this.goToPrivatePage();

//验证是否在登陆页面

assertLoginPage(response);

//使用不正确的用户名和密码登陆

response = login(response, "xxx", "xxx");

assertLoginPage(response);

//检查错误信息

String pageStr = response.getText();

assertTrue(pageStr.indexOf("用户名和密码不正确") > -1);

//正确登陆

response = login(response, "test", "test");

//检查已经不在登陆页面

assertTrue(!response.getTitle().equals("Login"));

}

public void assertLoginPage(WebResponse response) throws Exception {

//验证页面的标题一般是一个快速的验证是否在正确页面的方法

assertEquals("成功登陆", "Login", response.getTitle());

}

public WebResponse login(WebResponse loginPage, String userName, String pass) throws Exception {

WebForm form = loginPage.getForms()[0];

WebRequest loginRequest = form.getRequest();

loginRequest.setParameter("userName", userName);

loginRequest.setParameter("password", pass);

return conversation.getResponse(loginRequest);

}

}

然后在Eclipse中将这个测试Run/Junit Test就可以了,是不是很简单

btw:最新的HttpUnit 1.5.4已经支持JavaScript了。

文2

使用HttpUnit进行集成测试

[内容摘要] HttpUnit是一个集成测试工具,主要关注Web应用的测试,提供的帮助类让测试者可以通过Java类和服务器进行交互,并且将服务器端的响应当作文本或者DOM对象进行处理。HttpUnit还提供了一个模拟Servlet容器,让你可以不需要发布Servlet,就可以对Servlet的内部代码进行测试。本文中作者将详细的介绍如何使用HttpUnit提供的类完成集成测试。

关键词: httpunit 集成测试

1 HttpUnit简介

HttpUnit是SourceForge下面的一个开源项目,它是基于JUnit的一个测试框架,主要关注于测试Web应用,解决使用JUnit框架无法对远程Web内容进行测试的弊端。当前的最新版本是1.5.4。为了让HtpUnit正常运行,你应该安装JDK1.3.1或者以上版本。

1.1 工作原理

HttpUnit通过模拟浏览器的行为,处理页面框架(frames),cookies,页面跳转(redirects)等。通过HttpUnit提供的功能,你可以和服务器端进行信息交互,将返回的网页内容作为普通文本、XML Dom对象或者是作为链接、页面框架、图像、表单、表格等的集合进行处理,然后使用JUnit框架进行测试,还可以导向一个新的页面,然后进行新页面的处理,这个功能使你可以处理一组在一个操作链中的页面。

1.2 和其他商业工具的对比

商业工具一般使用记录、回放的功能来实现测试,但是这里有个缺陷,就是当页面设计被修改以后,这些被记录的行为就不能重用了,需要重新录制才能继续测试。

举个例子:如果页面上有个元素最先的设计是采用单选框,这个时候你开始测试,那么这些工具记录的就是你的单项选择动作,但是如果你的设计发生了变化,比如说我改成了下拉选择,或者使用文本框接受用户输入,这时候,你以前录制的测试过程就无效了,必须要重新录制。

而HttpUnit因为关注点是这些控件的内容,所以不管你的外在表现形式如何变化,都不影响你已确定测试的可重用性。

更多的关于httpunit的信息请访问httpunit的主页http://httpunit.sourceforge.net/

2 作者的演示环境

系统平台:Windows 2000 Sercver

应用服务器:深圳金蝶的apusic3.0

开发工具: eclipse 2.1.2

说明: 所有的代码请下载作者提供的code.jar文件。

3 HttpUnit安装、环境配置

3.1 安装

1. 到HttpUnit的主页http://httpunit.sourceforge.net下载最新的包文件,当前的最新版本是1.5.4。/

2. 将下载。Zip包解压缩到c:/httpunit(后面将使用%httpunit_home%引用该目录)

3.2 环境配置

作者的演示程序都是在eclipse中开发、执行的,所以环境配置都是以eclipse为例,如果你使用其他的开发工具,请根据这些步骤进行环境配置。

1. 启动eclipse,建立一个java工程

2. 将%httpunit_home%/lib/*.jar; %httpunit_home%/jars/*.jar加入到该java工程的Java build Path变量中

4 如何使用httpunit处理页面的内容

WebConversation类是HttpUnit框架中最重要的类,它用于模拟浏览器的行为。其他几个重要的类是:

WebRequest  模仿客户请求,通过它可以向服务器发送信息

WebResponse 模拟浏览器获取服务器端的响应信息

4.1 获取指定页面的内容

4.1.1 直接获取页面内容

System.out.println("直接获取网页内容:");

// 建立一个WebConversation实例

WebConversation wc = new WebConversation();

// 向指定的URL发出请求,获取响应

WebResponse wr = wc.getResponse( "http://localhost:6888/HelloWorld.html" );

// 用getText方法获取相应的全部内容

// 用System.out.println将获取的内容打印在控制台上

System.out.println( wr.getText() );

4.1.2 通过Get方法访问页面并且加入参数

System.out.println("向服务器发送数据,然后获取网页内容:");

//建立一个WebConversation实例

WebConversation wc = new WebConversation();

//向指定的URL发出请求

WebRequest     req = new GetMethodWebRequest( "http://localhost:6888/HelloWorld.jsp" );

//给请求加上参数

req.setParameter("username","姓名");

//获取响应对象

WebResponse   resp = wc.getResponse( req );

//用getText方法获取相应的全部内容

//用System.out.println将获取的内容打印在控制台上

System.out.println( resp.getText() );

4.1.3 通过Post方法访问页面并且加入参数

System.out.println("使用Post方式向服务器发送数据,然后获取网页内容:");

//建立一个WebConversation实例

WebConversation wc = new WebConversation();

//向指定的URL发出请求

WebRequest     req = new PostMethodWebRequest( "http://localhost:6888/HelloWorld.jsp" );

//给请求加上参数

req.setParameter("username","姓名");

//获取响应对象

WebResponse   resp = wc.getResponse( req );

//用getText方法获取相应的全部内容

//用System.out.println将获取的内容打印在控制台上

System.out.println( resp.getText() );

大家关注一下上面代码中打了下划线的两处内容,应该可以看到,使用Get、Post方法访问页面的区别就是使用的请求对象不同。

4.2 处理页面中的链接

这里的演示是找到页面中的某一个链接,然后模拟用户的单机行为,获得它指向文件的内容。比如在我的页面HelloWorld.html中有一个链接,它显示的内容是TestLink,它指向我另一个页面TestLink.htm. TestLink.htm里面只显示TestLink.html几个字符。

下面是处理代码:

System.out.println("获取页面中链接指向页面的内容:");

//建立一个WebConversation实例

WebConversation wc = new WebConversation();

//获取响应对象

WebResponse   resp = wc.getResponse( "http://localhost:6888/HelloWorld.html" );

//获得页面链接对象

WebLink       link = resp.getLinkWith( "TestLink" );

//模拟用户单击事件

link.click();

//获得当前的响应对象

WebResponse   nextLink = wc.getCurrentPage();

//用getText方法获取相应的全部内容

//用System.out.println将获取的内容打印在控制台上

System.out.println( nextLink.getText() );

4.3 处理页面中的表格

表格是用来控制页面显示的常规对象,在HttpUnit中使用数组来处理页面中的多个表格,你可以用resp.getTables()方法获取页面所有的表格对象。他们依照出现在页面中的顺序保存在一个数组里面。

[注意] Java中数组下标是从0开始的,所以取第一个表格应该是resp.getTables()[0],其他以此类推。

下面的例子演示如何从页面中取出第一个表格的内容并且将他们循环显示出来:

System.out.println("获取页面中表格的内容:");

//建立一个WebConversation实例

WebConversation wc = new WebConversation();

//获取响应对象

WebResponse   resp = wc.getResponse( "http://localhost:6888/HelloWorld.html" );

//获得对应的表格对象

WebTable webTable = resp.getTables()[0];

//将表格对象的内容传递给字符串数组

String[][] datas = webTable.asText();

//循环显示表格内容

int i = 0 ,j = 0;

int m = datas[0].length;

int n = datas.length;

while (i

j=0;

while(j

System.out.println("表格中第"+(i+1)+"行第"+(j+1)+"列的内容是:"+datas[j]);

++j;

}

++i;

}

4.4 处理页面中的表单

表单是用来接受用户输入,也可以向用户显示用户已输入信息(如需要用户修改数据时,通常会显示他以前输入过的信息),在HttpUnit中使用数组来处理页面中的多个表单,你可以用resp.getForms()方法获取页面所有的表单对象。他们依照出现在页面中的顺序保存在一个数组里面。

[注意] Java中数组下标是从0开始的,所以取第一个表单应该是resp.getForms()[0],其他以此类推。

下面的例子演示如何从页面中取出第一个表单的内容并且将他们循环显示出来:

System.out.println("获取页面中表单的内容:");

//建立一个WebConversation实例

WebConversation wc = new WebConversation();

//获取响应对象

WebResponse   resp = wc.getResponse( "http://localhost:6888/HelloWorld.html" );

//获得对应的表单对象

WebForm webForm = resp.getForms()[0];

//获得表单中所有控件的名字

String[] pNames = webForm.getParameterNames();

int i = 0;

int m = pNames.length;

//循环显示表单中所有控件的内容

while(i

System.out.println("第"+(i+1)+"个控件的名字是"+pNames+",里面的内容是"+webForm.getParameterValue(pNames));

++i;

}

5 如何使用httpunit进行测试

5.1 对页面内容进行测试

httpunit中的这部分测试完全采用了JUnit的测试方法,即直接将你期望的结果和页面中的输出内容进行比较。不过这里的测试就简单多了,只是字符串和字符串的比较。

比如你期望中的页面显示是中有一个表格,它是页面中的第一个表格,而且他的第一行第一列的数据应该是显示username,那么你可以使用下面的代码进行自动化测试:

System.out.println("获取页面中表格的内容并且进行测试:");

//建立一个WebConversation实例

WebConversation wc = new WebConversation();

//获取响应对象

WebResponse   resp = wc.getResponse( "http://localhost:6888/TableTest.html" );

//获得对应的表格对象

WebTable webTable = resp.getTables()[0];

//将表格对象的内容传递给字符串数组

String[][] datas = webTable.asText();

//对表格内容进行测试

String expect = "中文";

Assert.assertEquals(expect,datas[0][0]);

5.2 对Servlet进行测试

除了对页面内容进行测试外,有时候(比如开发复杂的Servlets的时候),你需要对Servlet本身的代码块进行测试,这时候你可以选择HttpUnit,它可以提供一个模拟的Servlet容器,让你的Servlet代码不需要发布到Servlet容器(如tomcat)就可以直接测试。

5.2.1 原理简介

使用httpunit测试Servlet时,请创建一个ServletRunner的实例,他负责模拟Servlet容器环境。如果你只是测试一个Servlet,你可以直接使用registerServlet方法注册这个Servlet,如果需要配置多个Servlet,你可以编写自己的web.xml,然后在初始化ServletRunner的时候将它的位置作为参数传给ServletRunner的构造器。

在测试Servlet时,应该记得使用ServletUnitClient类作为客户端,他和前面用过的WebConversation差不多,都继承自WebClient,所以他们的调用方式基本一致。要注意的差别是,在使用ServletUnitClient时,他会忽略URL中的主机地址信息,而是直接指向他的ServletRunner实现的模拟环境。

5.2.2 简单测试

本实例只是演示如何简单的访问Servlet并且获取他的输出信息,例子中的Servlet在接到用户请求的时候只是返回一串简单的字符串:Hello World!.

1. Servlet的代码如下:

public class MyServlet extends HttpServlet {

public void service(HttpServletRequest req, HttpServletResponse resp)

throws IOException

{

PrintWriter out = resp.getWriter();

//向浏览器中写一个字符串Hello World!

out.println("

Hello World!");

out.close();

}

java httpunit_HttpUnit简介相关推荐

  1. Java EE 简介

    Java EE 简介 Java EE 基本架构 JavaEE 的诞生是为了解决传统 C/S 架构的弊端:客户端臃肿庞大,扩展性差等弊端. JavaEE 将传统的两层结构细分为了四层. 这四层分别是:C ...

  2. java程序包不存在_第一章 Java语言简介

    Java语言简介 Java之父 James Gosling(詹姆斯·高斯林) 正式诞生时间 1995年,已有二十多年历史 三大方向 JavaSE(桌面版,基础需重点掌握) JavaME(移动版,现在基 ...

  3. (一:NIO系列)JAVA NIO 简介

    出处:JAVA NIO 简介 Java 中 New I/O类库 是由 Java 1.4 引进的异步 IO.由于之前老的I/O类库是阻塞I/O,New I/O类库的目标就是要让Java支持非阻塞I/O, ...

  4. ibm java_IBM i 上Java 虚拟机简介

    Abstract IBM i 上Java 虚拟机简介 Body Java在IT业界有多流行?google上搜索一下java, 结果一目了然(今天早上我搜索到的记录数是840000000条).Java之 ...

  5. Java异常(一) Java异常简介及其架构

    概要 本章对Java中的异常进行介绍.内容包括: Java异常简介 Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.htm ...

  6. Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略

    Java:计算机编程语言Java的简介.编程环境/工具.如何学习Java之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编程Java语言→定义Java类→Java虚拟机 ...

  7. OpenCV Java开发简介

    OpenCV Java开发简介 OpenCV Java开发简介 我们将在本指南中做什么 获得适当的OpenCV 下载 构建 Java示例与Ant Java和Scala的SBT项目 运行SBT样本 Op ...

  8. JDK14中的java tools简介

    文章目录 故事发生了 java tools简介 jaotc jar jarsigner java javac javadoc javap jcmd jconsole jdb jdeprscan jde ...

  9. JAVA NIO 简介 (netty源码死磕1.1)

    [基础篇]netty 源码死磕1.1:  JAVA NIO简介 1. JAVA NIO简介 Java 中 New I/O类库 是由 Java 1.4 引进的异步 IO.由于之前老的I/O类库是阻塞I/ ...

最新文章

  1. javaweb功能模块如何合理设计_产品设计:如何设计出合理的凑单模式?
  2. 消息摘要算法-MAC算法系列
  3. C++一天一个程序(四)
  4. laplacian,degree,adjacency and oriented incidence matrix, differential and laplacian coordinates
  5. 如何制作个人网站(如何搭建个人博客)
  6. usb杂谈之获取设备信息——举例鼠标urb
  7. 致我们终将远离的子女
  8. 马云选择了西雅图模式,你家公司选硅谷还是西雅图?
  9. 竞价推广常见难题及优化调整思路
  10. table 超级详细的 商品订单列表
  11. android entries属性,ListPreference需要设置两个属性:android:entries和android:entryValues...
  12. K8S二进制环境搭建苹果电脑(M1芯片)
  13. angular的ngStrictDi
  14. keil uvision4 调试教程
  15. 01背包,完全背包的区别
  16. Shading 编程
  17. 数据分析行业薪资的秘密,你想知道的都在这里(1)
  18. 【博学谷学习记录】超强总结,用心分享| ETL基本介绍
  19. STM32L431 MCU温度计算
  20. struts2+hibernate留言板并发布到自己的主机上(-)

热门文章

  1. full join 与 union
  2. 给中国学生的第七封信:21世纪最需要的7种人才
  3. Linux 查看二进制文件的三种方法
  4. cmake添加系统标准库
  5. 关于英巴卡迪诺c++builder XE3的一点看法
  6. 信息服务器在哪里打开,信息服务,详细教您哪里打开Internet信息服务(IIS)管理器...
  7. internet信息服务器在哪,win10系统Internet信息服务的位置在什么地方如何打开
  8. oracle如何查看sequence的值,Oracle sequence详解
  9. 奥特曼r版_奥特曼新作“奥特曼R/B”公布!网友:让国产奥特曼无地之容!
  10. 弱市宜以股息收益率找黑马