本文通过实例来讲解如何通过
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();
...
可以在http://httpunit.sourceforge.net/doc/cookbook.html找到更详细的信息.
分享到:
相关推荐
HttpUnit 是基于JUnit构建的一个开源测试框架,专门针对Web应用的测试,解决使用JUnit框架无法对远程Web内容进行测试,支持JS,cookies。。。。
NULL 博文链接:https://jisonami.iteye.com/blog/2202505
HttpUnit是SourceForge下面的一个开源项目,它是基于JUnit的一个测试框架,主要关注于测试Web应用,解决使用JUnit框架无法对远程Web内容进行测试的弊端。 HttpUnit让测试者可以通过Java类和服务器进行交互,并且将...
如何使用HttpUnit进行集成测试软件测试1HttpUnit简介HttpUnit是SourceForge下面的一个开源项目,它是基于JUnit的一个测试框架,主要关注于测试Web应用,解决使用JUnit框架无法对远程Web内容进行测试的弊端。...
使用HttpUnit进行集成测试使用HttpUnit进行集成测试使用HttpUnit进行集成测试使用HttpUnit进行集成测试
可以利用httpunit做网站接口测试和网站自动化测试
附件是一个完整的web工程(带源码),用jdk1.8及以上编译后可运行, HttpUtilTest类中有两个测试实例,所涉及的数据都有来自ajax异步的
HttpUnit 小结 HttpUnit 是基于JUnit构建的一个开源测试框架,专门针对Web应用的测试,解决使用JUnit框架无法对远程Web内容进行测试,支持JS,cookies。。。。
HttpUnit所有依赖打包下载,HttpUnit是一个集成测试工具,主要关注Web应用的测试,提供的帮助类让测试者可以通过Java类和服务器进行交互,并且将服务器端的响应当作文本或者DOM对象进行处理。HttpUnit还提供了一个...
httpunit jwebunit tesing for web application
项目实现了JAVA底层自动打开页面,模拟事件操作,获取源文件整体功能。 继承了httpunit selenium两组插件包。 包含完全源代码和JAVA包。 自己花了20多个积分,东拼西凑,用了一个星期,总算把程序调通。希望后来者...
几乎包含了所有junit所要用到的扩展包
内部含有httpunit单元测试所必需的jar包 httpunit.jar, js.jar, nekohtml.jar, xercesImpl.jar, xercesSamples.jar, servlet-api.jar, resolver.jar
使用HttpUnit提供的类完成集成测试源码
httpUnit的应用模拟登录一个网站 程序比较简单,用了jxl和httpUnit二个开源的包,从execl表格中读取数据,然后进行登录,并进行了一些操作
java爬取工具httpunit全部jar包(包含httpunit使用需要的全部jar包),经过测试,可以使用
httpunit-1.7.jar下载
httpunit.jar