往网站上做新东西需要什么,威海哪家网站做的好,公司注册资金实缴政策最新,房屋中介网站模板本文通过实例来讲解如何通过HttpUnit来对web应用进行测试,尤其是当下Ajax越来越流行的情况下,http request和response交互频繁,里面传输的内容也以Json或者XML为主,用HttpUnit结合JUnit来做测试可以带来很多好处,甚至是在web页面还不存在的情况下,通过模拟http请求,包括模拟上传… 本文通过实例来讲解如何通过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?commandCopyBill); 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(); ...