欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
應用 HttpUnit 進(jìn)行Web測試
簡(jiǎn)介:HttpUnit是基于JUnit構建的一個(gè)開(kāi)源測試框架,專(zhuān)門(mén)針對Web應用的測試,解決使用JUnit框架無(wú)法對遠程Web內容進(jìn)行測試的弊端。當前的最新版本是1.6.2。
1  簡(jiǎn)介
HttpUnit 是基于JUnit構建的一個(gè)開(kāi)源測試框架,專(zhuān)門(mén)針對Web應用的測試,解決使用JUnit框架無(wú)法對遠程Web內容進(jìn)行測試的弊端。當前的最新版本是1.6.2 (發(fā)布于2006年3月)。
2  工作原理
HttpUnit通過(guò)模擬瀏覽器的行為,包括提交表單(form)、處理頁(yè)面框架(frames)、基本的http驗證、cookies及頁(yè)面跳轉(redirects)處理等。通過(guò)HttpUnit提供的功能,用戶(hù)可以方便的和服務(wù)器端進(jìn)行信息的交互,將返回的網(wǎng)頁(yè)內容作為普通文本、XML Dom對象或者是作為鏈接、頁(yè)面框架、圖像、表單、表格等的集合進(jìn)行處理,然后使用JUnit框架進(jìn)行測試,還可以導向一個(gè)新的頁(yè)面,然后進(jìn)行新頁(yè)面的處理,這個(gè)功能使你可以處理一組在一個(gè)操作鏈中的頁(yè)面。
3  特征
對于一般Web測試工具使用記錄、回放的功能來(lái)說(shuō),這些測試工具的缺陷就是當頁(yè)面設計被修改以后,這些被記錄的行為就不能再重用了,每當頁(yè)面改變一次,就需要重新錄制一次才能正常重放。例如,若頁(yè)面上有個(gè)元素開(kāi)始的設計是采用單選框,此時(shí)這些工具記錄的就是你的單項選擇動(dòng)作,一旦設計發(fā)生了變化,比如說(shuō)改成了下拉選擇,這時(shí)候,以前錄制的測試過(guò)程就無(wú)效了,必須要重新錄制。
而HttpUnit因為關(guān)注的是這些控件的內容,而不管頁(yè)面的表現形式(layout),所以不管表現形式如何變化,都不影響已確定的測試的可重用性。
4  HttpUnit 工作原理
4.1  如何使用httpunit處理頁(yè)面的內容
   WebConversation類(lèi)是HttpUnit框架中最重要的類(lèi),WebConversation可以被看作是“瀏覽器”。用戶(hù)首先創(chuàng )建一個(gè)請求(WebRequest),然后讓W(xué)ebConversation返回響應(WebResponse)。如下:
  //新創(chuàng )建一個(gè)“瀏覽器”對象
  WebConversation wc = new WebConversation();
  // WebRequest類(lèi),用于模仿客戶(hù)的“請求”,通過(guò)它可以向服務(wù)器發(fā)送信息。
  WebRequest req = new GetMethodWebRequest( http://www.sqalab.com );
  // WebResponse類(lèi),用于模仿瀏覽器獲取服務(wù)器端的響應信息。
  WebResponse resp = wc.getResponse ( req );
4.2  獲取指定頁(yè)面的內容
4.2.1  通過(guò) getText 直接獲取頁(yè)面的所有內容
// 建立一個(gè)“瀏覽器”實(shí)例
WebConversation wc = new WebConversation();
// 將指定URL的請求傳給wc,然后獲取相應的響應
WebResponse wr = wc.getResponse( "
// 用wc的getText方法獲取相應的全部?jì)热?/div>
System.out.println( wr.getText() );
4.2.2  增加參數通過(guò)Get方法訪(fǎng)問(wèn)頁(yè)面
// 建立一個(gè)WebConversation實(shí)例
WebConversation wc = new WebConversation();
// 向指定的URL發(fā)出請求
WebRequest req = new GetMethodWebRequest( "
// 給請求加上參數 
req.setParameter("keyword","httpunit");
// 獲取響應對象
WebResponse resp = wc.getResponse( req );
// 用getText方法獲取相應的全部?jì)热?/div>
System.out.println( resp.getText() );
4.2.3 增加參數通過(guò)Post方法訪(fǎng)問(wèn)頁(yè)面
//建立一個(gè)WebConversation實(shí)例
WebConversation wc = new WebConversation();
//向指定的URL發(fā)出請求
WebRequest req = new PostMethodWebRequest( "
//給請求加上參數 
req.setParameter("keyword","httpunit");
//獲取響應對象
WebResponse resp = wc.getResponse( req );
//用getText方法獲取相應的全部?jì)热?/div>
//用System.out.println將獲取的內容打印在控制臺上
System.out.println( resp.getText() );
4.3 處理頁(yè)面的鏈接(links)
  // 建立一個(gè)WebConversation實(shí)例
  WebConversation   wc = new WebConversation();
  // 獲取響應對象
  WebResponse    resp = wc.getResponse( "
  // 獲得頁(yè)面鏈接對象
  WebLink    link = resp.getLinkWith( "應用 HttpUnit 進(jìn)行Web測試 " );
  //  模擬用戶(hù)單擊事件
  link.click();
  // 獲得當前的響應對象
  WebResponse   nextLink = wc.getCurrentPage();                                          
  
  //  用getText方法獲取相應的全部?jì)热?,并打?/div>
  System.out.println( nextLink.getText() );
4.4  處理頁(yè)面的表格(table)
表格是用來(lái)控制頁(yè)面顯示的對象,在HttpUnit中使用數組來(lái)處理頁(yè)面中的多個(gè)表格,可以用 resp.getTables() 方法獲取頁(yè)面所有的表格對象。將它們依次出現在頁(yè)面中的順序保存在一個(gè)數組里。
    // 創(chuàng )建一個(gè)WebConversation對象
    WebConversation wc = new WebConversation();
    // 設置HTTP代理服務(wù)器地址和端口
    wc.setProxyServer( "proxy.pvgl.sap.corp", 8080 );
    // 新建一個(gè)URL請求對象req
    WebRequest req = new GetMethodWebRequest("
    // 發(fā)出一個(gè)請求req,并取得它相對應的響應resp
    WebResponse resp = wc.getResponse(req);
    // 獲得響應的頁(yè)面中的 Table
    WebTable[] tables = resp.getTables();
    // 取出第一個(gè) table
    WebTable table = tables[0];
    // 從 2 * 2 的 table 取出cell里的值
    for ( int i=0 ; i<3 ; i++ ) {
       for ( int j=0 ; j<2 ; j++ )
          System.out.println(table.getCellAsText(i,j).trim());
    }
4.5  處理頁(yè)面的表單(form)
表單是用來(lái)接受用戶(hù)輸入,也可以向用戶(hù)顯示用戶(hù)已輸入信息(如需要用戶(hù)修改數據時(shí),通常會(huì )顯示他以前輸入過(guò)的信息),在HttpUnit中使用數組來(lái)處理頁(yè)面中的多個(gè)表單,你可以用resp.getForms()方法獲取頁(yè)面所有的表單對象。他們依照出現在頁(yè)面中的順序保存在一個(gè)數組里面。
  // 建立一個(gè)WebConversation實(shí)例
  WebConversation wc = new WebConversation();
  // 獲取響應對象
  WebResponse   resp = wc.getResponse( "
  // 獲得對應的表單對象
  WebForm webForm = resp.getForms()[0];
  // 獲得表單中所有控件的名字
  String[] pNames = webForm.getParameterNames();
  int i = 0;
  int m = pNames.length;
  // 循環(huán)顯示表單中所有控件的內容
  while(i<m){
     System.out.println("第"+(i+1)+"個(gè)控件的名字是"+pNames[i]+
        ",里面的內容是"+webForm.getParameterValue(pNames[i]));
     ++i;
  }
5  如何使用httpunit進(jìn)行測試
5.1  對頁(yè)面內容進(jìn)行測試
httpunit中的這部分測試完全采用了JUnit的測試方法,即直接將你期望的結果和頁(yè)面中的輸出內容進(jìn)行比較。
比如你期望中的頁(yè)面顯示是中有一個(gè)表格,它是頁(yè)面中的第一個(gè)表格,而且他的第一行第一列的數據應該是顯示username,那么你可以使用下面的代碼進(jìn)行自動(dòng)化測試:
  // 建立一個(gè)WebConversation實(shí)例
  WebConversation wc = new WebConversation();
  // 獲取響應對象
  WebResponse   resp = wc.getResponse( "
  // 獲得對應的表格對象
  WebTable webTable = resp.getTables()[0];
  // 將表格對象的內容傳遞給字符串數組
  String[][] datas = webTable.asText();
  // 對表格內容進(jìn)行測試
  String expect = "中文";
  // 增加 assertEquals 判斷
  Assert.assertEquals(expect,datas[0][0]);
5.2  對Servlet進(jìn)行測試
除了對頁(yè)面內容進(jìn)行測試外,有時(shí)候(比如開(kāi)發(fā)復雜的Servlets的時(shí)候),你需要對Servlet本身的代碼塊進(jìn)行測試,這時(shí)候你可以選擇HttpUnit,它可以提供一個(gè)模擬的Servlet容器,讓你的Servlet代碼不需要發(fā)布到Servlet容器(如tomcat)就可以直接測試。
5.2.1  原理簡(jiǎn)介
使用httpunit測試Servlet時(shí),請創(chuàng )建一個(gè)ServletRunner的實(shí)例,他負責模擬Servlet容器環(huán)境。如果你只是測試一個(gè)Servlet,你可以直接使用registerServlet方法注冊這個(gè)Servlet,如果需要配置多個(gè)Servlet,你可以編寫(xiě)自己的web.xml,然后在初始化ServletRunner的時(shí)候將它的位置作為參數傳給ServletRunner的構造器。
在測試Servlet時(shí),應該記得使用ServletUnitClient類(lèi)作為客戶(hù)端,他和前面用過(guò)的WebConversation差不多,都繼承自WebClient,所以他們的調用方式基本一致。要注意的差別是,在使用ServletUnitClient時(shí),他會(huì )忽略URL中的主機地址信息,而是直接指向他的ServletRunner實(shí)現的模擬環(huán)境。
5.2.2  簡(jiǎn)單測試
本實(shí)例只是演示如何簡(jiǎn)單的訪(fǎng)問(wèn)Servlet并且獲取他的輸出信息,例子中的Servlet在接到用戶(hù)請求的時(shí)候只是返回一串簡(jiǎn)單的字符串:Hello World!.
 1. Servlet的代碼如下:
  public class MyServlet extends HttpServlet {
    public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
         PrintWriter out = resp.getWriter();
         //向瀏覽器中寫(xiě)一個(gè)字符串Hello World!
        out.println("Hello World!");
        out.close();
    }
         
}
 2. 測試的調用代碼如下:
  // 創(chuàng )建Servlet的運行環(huán)境
  ServletRunner sr = new ServletRunner();
  // 向環(huán)境中注冊Servlet
  sr.registerServlet( "myServlet", MyServlet.class.getName() );
  // 創(chuàng )建訪(fǎng)問(wèn)Servlet的客戶(hù)端
  ServletUnitClient sc = sr.newClient();
  // 發(fā)送請求
  // 獲得模擬服務(wù)器的信息
  WebResponse response = sc.getResponse( request );
  // 將獲得的結果打印到控制臺上
  System.out.println(response.getText());
5.2.3  測試Servlet的內部行為
對于開(kāi)發(fā)者來(lái)說(shuō),僅僅測試請求和返回信息是不夠的,所以HttpUnit提供的ServletRunner模擬器可以讓你對被調用Servlet內部的行為進(jìn)行測試。和簡(jiǎn)單測試中不同,這里使用了InvocationContext獲得該Servlet的環(huán)境,然后你可以通過(guò)InvocationContext對象針對request、response等對象或者是該Servlet的內部行為(非服務(wù)方法)進(jìn)行操作。
下面的代碼演示了如何使用HttpUnit模擬Servlet容器,并且通過(guò)InvocationContext對象,測試Servlet內部行為的大部分工作,比如控制request、session、response等。
  // 創(chuàng )建Servlet的運行環(huán)境
  ServletRunner sr = new ServletRunner();
  // 向環(huán)境中注冊Servlet
  sr.registerServlet( "InternalServlet", InternalServlet.class.getName() );
  // 創(chuàng )建訪(fǎng)問(wèn)Servlet的客戶(hù)端
  ServletUnitClient sc = sr.newClient();
  // 發(fā)送請求
  WebRequest request   = new GetMethodWebRequest( "http://localhost/InternalServlet" );
  request.setParameter("pwd","pwd");
  // 獲得該請求的上下文環(huán)境
  InvocationContext ic = sc.newInvocation( request );
       
  // 調用Servlet的非服務(wù)方法
  InternalServlet is = (InternalServlet)ic.getServlet();
  is.myMethod();
    
  // 直接通過(guò)上下文獲得request對象
  System.out.println("request中獲取的內容:"+ic.getRequest().getParameter("pwd"));
    
  // 直接通過(guò)上下文獲得response對象,并且向客戶(hù)端輸出信息
  ic.getResponse().getWriter().write("haha");
    
  // 直接通過(guò)上下文獲得session對象,控制session對象
  // 給session賦值
  ic.getRequest().getSession().setAttribute("username","timeson");
  // 獲取session的值
  System.out.println("session中的值:"+ic.getRequest().getSession().getAttribute("username"));
         
  // 使用客戶(hù)端獲取返回信息,并且打印出來(lái)
  WebResponse response = ic.getServletResponse();
  System.out.println(response.getText());
6  總結
1.      模擬用戶(hù)行為向服務(wù)器發(fā)送請求,傳遞參數
2.      模擬用戶(hù)接受服務(wù)器的響應信息,并且通過(guò)輔助類(lèi)分析這些響應信息,結合JUnit框架進(jìn)行測試
3.      使用HttpUnit提供的模擬Servler容器,測試開(kāi)發(fā)中的Servlet的內部行為
 
 
本文來(lái)自CSDN博客,轉載請標明出處:http://blog.csdn.net/hikin/archive/2009/03/10/3976417.aspx
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久