本文通过实例来讲解如何通过HttpUnit来对web应用进行测试,尤其是当下Ajax越来越流行的情况下,http request和response交互频繁,里面传输的内容也以Json或者XML为主,用HttpUnit结合JUnit来做测试可以带来很多好处,甚至是在web页面还不存在的情况下,通过模拟http请求,包括模拟上传文件,就可以用来测试服务端的servlet,action(有httprequest参数)等代码.

JAVA实例代码

HTTPStub :包装了HttpUnit提供的一些类,同时在初始化的时候做login验证,WebConversation会维护session的信息.

public class HTTPStub {

private WebConversation httpConversation;

private PostMethodWebRequest httpRequest;

public HTTPStub() {

httpConversation = new WebConversation();

String urlLogin = EnvConstant.SERVER_CTXT + EnvConstant.SERVER_LOGINURL;

GetMethodWebRequest getReq = new GetMethodWebRequest(urlLogin);

try {

httpConversation.getResponse(getReq);

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (SAXException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

public void initHttpRequest(String url) {

httpRequest = new PostMethodWebRequest(EnvConstant.SERVER_CTXT + url, true);

}

public void setParameter(String name, String value) {

httpRequest.setParameter(name, value);

}

public void setFile(String Filename) {

InputStream inputStream = FileUtil.readFromdefaultClspath(Filename);

httpRequest.selectFile("dumyfile", "dumyfile.csv", inputStream, "text/plain");

}

public WebResponse getHttpResponse() {

try {

return httpConversation.getResponse(httpRequest);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

public String getHttpResponseContents() {

try {

WebResponse resp = httpConversation.getResponse(httpRequest);

StringBuffer strbf = new StringBuffer();

BufferedReader in = new BufferedReader(new InputStreamReader(resp.getInputStream()));

String str;

while ((str = in.readLine()) != null) {

strbf.append(str);

}

in.close();

return strbf.toString();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

}

对inputstream处理的一个util类:

public class FileUtil {

public static InputStream readFromdefaultClspath(String fileName) {

InputStream stream = ClassLoader.getSystemResourceAsStream(fileName);

return stream;

}

public static String getContentsFromFile(String fileName) {

InputStream stream = readFromdefaultClspath(fileName);

StringBuffer strbf = new StringBuffer();

try {

BufferedReader in = new BufferedReader(new InputStreamReader(stream));

String str;

while ((str = in.readLine()) != null) {

strbf.append(str);

}

in.close();

} catch (IOException e) {

e.printStackTrace();

}

return strbf.toString();

}

}

Junit测试类:

public class ActionCopyBillTest {

private HTTPStub httpStub;

@Before

public void setUp() throws Exception {

httpStub = new HTTPStub();

}

@After

public void tearDown() throws Exception {

}

@Test

public void testPerform() {

httpStub.initHttpRequest("FrontController?command=CopyBill");

httpStub.setParameter("bm_cb_dtCategory", "Copy Bill Request");

httpStub.setParameter("bm_cb_SRID", "SR0001");

httpStub.setParameter("bm_cb_ItemOpt", "2- Custom Itemisation");

httpStub.setParameter("bm_cb_BillLanCode", "ENG");

httpStub.setParameter("bm_cb_LegendPrs", "Copy Legend");

httpStub.setParameter("bm_cb_BillStruct", "Front Page Only");

httpStub.setParameter("bm_cb_ItemThd", "1");

httpStub.setParameter("bm_cb_BillMedia", "Paper Bill");

httpStub.setParameter("bm_cb_BillFormat", "Blue Bill");

httpStub.setFile("testdata/req/CopyBill_1.csv");

String respContents = httpStub.getHttpResponseContents();

String ritContents = FileUtil.getContentsFromFile("testdata/rep/CopyBill_1.rsp");

Assert.assertEquals(respContents, ritContents);

}

}

如果想对response进行验证,可以通过手工从html页面输入数据,提交请求,用工具(如eclipse带有的插件tcp/ip monitor)将response截取下来保存为文件,然后和junit测试的时候的response对比.

另外,返回的response也提供了一系列方法来操作其包含的内容:

1,如返回的是文本,可以通过resp.getText()获取,如果文本是json格式,可以再进一步构造成jsonobject来操作.

String respContents = resp.getText();

JSONObject json = new JSONObject(respContents);

System.out.println(json.getInt("total"));

JSONArray arr = json.getJSONArray("userdata");

System.out.println(arr.get(0));

2,如果返回的是XML(标准结构的html也是合法的XML),可以得到w3c 的document对象,resp.getDOM();

3,如果返回的是html页面,WebResponse提供了一组类似于Javascript操作html dom的方法.

resp.getElementWithID(id)

resp.getTables();

...

java httpunit_实例简介HttpUnit结合JUnit自动测试Web应用相关推荐

  1. 通过录屏自动测试web端查询功能_海豚 Web UI自动化测试工具

    http://div.io/topic/1339 海豚是什么? 没错,它是一个 Web UI自动化测试工具,专治Web UI的各种疑难杂症,目前只针对移动端Webapp量身定做. 说到 Web UI的 ...

  2. junit 5测试异常处理_使用JUnit 5测试异常

    junit 5测试异常处理 JUnit 5带来了令人敬畏的改进,并且与以前的版本有很大不同. JUnit 5在运行时需要Java 8,因此Lambda表达式可以在测试中使用,尤其是在断言中. 这些断言 ...

  3. 使用JUnit 5测试异常

    JUnit 5带来了令人敬畏的改进,它与以前的版本有很大的不同. JUnit 5在运行时需要Java 8,因此Lambda表达式可以在测试中使用,尤其是在断言中. 这些断言之一非常适合测试异常. 设置 ...

  4. java httpunit_使用HttpUnit进行集成测试

    内容摘要 HttpUnit是一个集成测试工具,主要关注Web应用的测试,提供的帮助类让测试者可以通过Java类和服务器进行交互,并且将服务器端的响应当作文本或者DOM对象进行处理.HttpUnit还提 ...

  5. 【Java 代码实例 14】BeanUtils用法详解,附源码分析

    目录 一.org.apache.commons.beanutils.BeanUtils简介 二.使用的前置条件 三.添加pom 四.org.apache.commons.beanutils.BeanU ...

  6. 黑马就业班(01.JavaSE Java语言基础-11.Java基础加强)——基础加强:Junit单元测试、反射、注解

       1.Junit单元测试 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关注程序具体的执行流程. Junit使用:白盒测试 步骤: ...

  7. 整理的常用JAVA开源库简介

    Jakarta common: Commons Logging Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于 ...

  8. 【Java程序设计】Java基础类库简介

    Java基础类库简介 文章目录 Java基础类库简介 一.Java基础类库介绍 二.语言包(java.lang) (1)数据类型包裹类 1.生成数据类型包裹类对象的方法 2.得到基本数据类型数据的方法 ...

  9. java开发工具包 jdk_什么是JDK? Java开发工具包简介

    java开发工具包 jdk Java开发工具包(JDK)与JVM(Java虚拟机)和JRE(Java运行时环境)一起是Java编程中使用的三个核心技术软件包之一. 重要的是要区分这三种技术,并了解它们 ...

最新文章

  1. ASP.NET 163 smtp服务器响应为:User has no permission
  2. 【错误记录】Android 应用连接 BLE 设备无法读取数据 ( 可以写出数据 | 无法读取数据 )
  3. django-vue-admin前端设置后台接口地址为127.0.0.1产生跨域问题解决办法
  4. 思科服务器型号m1414,Cisco UCS M 系列模块化服务器
  5. VLAN基础配置及Access接口
  6. System类入门学习
  7. 【数据结构与算法】【算法思想】【MySQL数据库索引】B+树
  8. drupal mysql_Drupal MySQL查询优化
  9. linux服务chm,linux系统服务 chm
  10. linux红帽6架设apache,linux Redhat6.5 中 编译安装apache
  11. 接收POst数据流数据
  12. flex学习的博客...还是挺详细的
  13. VS2017社区版试用30天过期重新激活方法
  14. 关于5G使用的新型技术小结
  15. 红米k30支持html,红米K30S至尊纪念版发布:骁龙865+支持144Hz高刷
  16. 膨胀卷积(空洞卷积)
  17. 梦里什么都有(状压DP)
  18. 数据链路层功能概述----上
  19. 汽车尾灯控制电路代码
  20. 币挤卧氯幢瞻岗铺撞陀胃等直瓤爻

热门文章

  1. 算法知识点-排序-桶排序
  2. GO 语言中的`` 语法
  3. xilinx平台dma分析
  4. SchedulerFactory使用
  5. (c语言)static的用法详解
  6. 小白易懂的遗传算法(Python代码实现)
  7. stm8lLCD显示
  8. 改性塑料增强尼龙66是怎么跑到汽车里
  9. php编写购物车程序,实现简单的php购物车代码
  10. mapreduce求共同好友