<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    基于SOAP報文的純服務端測試

    AbstractXFireTest擴展于JUnit標準的TestCase類,提供了向某個Web Service發送SOAP請求報文并對返回的SOAP響應報文進行檢驗的能力。該測試類提供了若干個方便的斷言方法,分別介紹如下:

    —  void assertNoFault(Document node):確認SOAP響應報文無錯誤;

    —  java.util.List assertValid(java.lang.String xpath, java.lang.Object node):確認在DOM節點特定路徑下有對應的元素,路徑通過XPath表達式進行定義,該方法還將匹配的元素以List對象返回,用戶可以對匹配的元素進行進一步檢驗;

    —  void assertXPathEquals(java.lang.String xpath, java.lang.String value, Document node):確認特定路徑DOM節點為某一特定值;

    —  assertInvalid(java.lang.String xpath, java.lang.Object node):確認DOM節點特定路徑下未包含元素。

    AbstractXFireSpringTest是AbstractXFireTest的子類,在Spring中用戶只需要擴展該類并實現該類的抽象方法ApplicationContext createContext(),就可以對Spring容器中用XFire定義的Web Service進行測試了。

    為了測試Web Service,我們必須準備一個SOAP請求報文,用戶可以簡單地手工編寫一個,或通過SOAP報文截取工具(如前面我們介紹的TcpTrace、SOAPScope、Apache Axis的TCPMon等)獲得一些可用的SOAP請求報文。代碼清單16-6是一個訪問BbtForumService 服務的請求SOAP報文:

    代碼清單16-6  request_soap.xml:SOAP報文層面測試

     

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

        xmlns:xsd
    ="http://www.w3.org/2001/XMLSchema"

        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance">

        
    <soap:Body>

            
    <getRefinedTopicCount

                
    xmlns="http://server.xfire.baobaotao.com">

                
    <in0 xmlns="http://server.xfire.baobaotao.com">20</in0>

            
    </getRefinedTopicCount>

        
    </soap:Body>

    </soap:Envelope>

     

    我們將其保存在request_soap.xml文件中,放置在類路徑com/baobaotao/xfire/server下。當該SOAP請求報文發送給BbtForumService的Web Service后,我們預計它應該返回如代碼清單16-7所示的正確的SOAP響應報文:

    代碼清單16-7  SOAP響應報文

     

    <?xml version="1.0" encoding="UTF-8"?>

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

      
    <soap:Body>

        
    <getRefinedTopicCountResponse xmlns="http://www.baobaotao.com">

          
    <out>32</out>

        
    </getRefinedTopicCountResponse>

      
    </soap:Body>

    </soap:Envelope>

     

    下面,我們著手編寫測試BbtForumService Web Service的測試類,以驗證實際SOAP響應報文是否和代碼清單16-7中的一樣:

    代碼清單16-8  TestBbtForumService

    使用AbstractXFireSpringTest測試Web Service首先要做的第一件事是通過實現createContext()方法構造Spring容器,如①所示。當Spring容器啟動時,XFire將自動讓容器中的Web Service生效(僅進行測試,不能對外提供服務)。

    第二步需要向Web Service發送一個SOAP請求報文以得到一個SOAP響應報文,如②所示。接下來,通過AbstractXFireTest提供的檢測DOM內容的方法對報文進行正確性驗證。由于代碼清單16?7的SOAP報文體中對應的<getRefinedTopicCountResponse>元素及內部元素都位于http://www.baobaotao.com命名空間中,報文體中沒有為這個命名空間定義相應的別名,為了在后續斷言方法中能夠使用簡單的方式定義XPath表達式,我們在④處為http://www.baobaotao.com命名空間定義了一個別名。

    理解以上測試代碼中幾個斷言方法的關鍵在于理解XPath表達式語言,XPath語法內容很豐富,不可能在這里逐一講解,我們只介紹一些典型的XPath語法以滿足常見的測試需求:

    — 以“/”為前綴的路徑表示從DOM根路徑開始,如“/soap:Envelope/soap:Body”;

    — 以“//”為前綴的路徑表示從DOM任意元素開始查詢,如“//out”表示任意元素為out的元素;

    — 元素的屬性通過@attrName表示,如“//xsd:complexType[@name=""Book""]”表示DOM中任意元素名為complexType并且擁有一個值為Book的name屬性的元素;

    — 元素的值通過text()表示,如“//test:Response[text()='32']”表示DOM中任意值為32、元素名為Response,且位于test命名空間中的元素。

    現在回過頭來看⑤、⑥兩處的斷言方法,相信大家就可以很容易地理解斷言規則了,⑤處的斷言檢測SOAP響應報文是否包含某一特定元素,而⑥處的斷言則對元素內的值進行檢測。我們也可以通過printNode()方法將一個節點輸出到控制臺上,以便于查看。

    16.5.2  在JVM模式通過客戶端進行測試

    能夠不啟動Web服務器的情況下通過客戶端程序測試Web Service的功能,這一嶄新的測試方法對于開發人員來說一定頗具吸引力。因為,這意味著用戶可以完全在IDE環境中運行測試,不需要外部環境的支持。不過享受這一測試好處的應用必須保證客戶端和服務端的Web Service都位于同一JVM中,這時請求報文和響應報文直接在JVM內部通道中傳輸。當使用JVM內部通道傳輸請求和響應的SOAP報文時,我們只需要調整服務的地址就可以了:

    代碼清單16-9  TextBbtForumService  JVM模式測試

     

    以上代碼中,①處的服務地址采用了JVM模式的地址,和其對應的HTTP地址則是http://localhost:8080/baobaotao/service/BbtForumService,所以只需要將服務名前的部分替換為“xfire.local://”就可以了。



    posted on 2008-05-15 15:57 々上善若水々 閱讀(4854) 評論(0)  編輯  收藏 所屬分類: WebService

    主站蜘蛛池模板: 国产亚洲精品国产福利在线观看| 99精品免费视品| 91亚洲视频在线观看| 成人影片一区免费观看| 亚洲最新黄色网址| 免费看国产一级片| 97视频免费观看2区| 风间由美在线亚洲一区| 亚洲AV日韩AV天堂一区二区三区| 性一交一乱一视频免费看| 中国极品美軳免费观看| 久久亚洲国产最新网站| 伊人久久大香线蕉亚洲五月天| 美女无遮挡拍拍拍免费视频 | 国产成人精品日本亚洲专区61 | 亚洲精品专区在线观看| 最近中文字幕免费mv在线视频 | 免费无码AV片在线观看软件| www成人免费视频| 四虎必出精品亚洲高清| 亚洲精品无码永久在线观看你懂的| 99精品国产免费久久久久久下载 | 最好免费观看高清在线| 亚洲精品国产高清在线观看| 亚洲国产综合无码一区 | 亚洲黄网站wwwwww| 亚洲国产成人五月综合网 | 大陆一级毛片免费视频观看| 久久久久久久99精品免费观看| 色天使亚洲综合一区二区| 亚洲精品电影天堂网| 成人免费午夜视频| 亚洲精品免费在线观看| 亚洲国产最大av| 国产成人在线观看免费网站| 一级毛片免费播放男男| 亚洲熟妇AV一区二区三区宅男| 男人的天堂亚洲一区二区三区 | 亚洲欧洲在线播放| 亚洲日本乱码在线观看| 免费午夜爽爽爽WWW视频十八禁|