<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

    主站蜘蛛池模板: 亚洲乱色熟女一区二区三区蜜臀| 黄色免费在线网站| 成年午夜视频免费观看视频| 日韩亚洲一区二区三区| 免费一区二区无码东京热| 亚洲国产精品一区第二页| 久久香蕉国产线看免费| 日韩亚洲AV无码一区二区不卡| 久久国产亚洲精品| 91在线品视觉盛宴免费| 亚洲精品美女久久7777777| 国产老女人精品免费视频| 人人爽人人爽人人片av免费| 久久亚洲国产精品123区| 久久大香伊焦在人线免费| 亚洲精品日韩中文字幕久久久| 新最免费影视大全在线播放| 亚洲国产中文字幕在线观看| 国产视频精品免费视频| 亚洲日本中文字幕区| 歪歪漫画在线观看官网免费阅读 | 成年人性生活免费视频| 亚洲婷婷第一狠人综合精品| 免费无码又爽又刺激高潮的视频| 亚洲综合久久久久久中文字幕| 青青草国产免费国产是公开| 丝袜熟女国偷自产中文字幕亚洲| 亚洲第一成年网站视频 | 日韩免费在线中文字幕| 亚洲精品国产精品国自产观看| 亚洲人片在线观看天堂无码| 亚洲男人第一无码aⅴ网站| 免费精品一区二区三区第35 | 免费的黄色网页在线免费观看| 在线a级毛片免费视频| 免费无码国产V片在线观看| 亚洲四虎永久在线播放| 国产成人免费a在线视频色戒| 2020年亚洲天天爽天天噜| 亚洲成av人在线观看网站| 在线jlzzjlzz免费播放|