国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

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

聯系客服