陳向東
(馬鞍山師范高等專科學校 理工系,安徽 馬鞍山 243041)
Web服務測試內容和執行框架
陳向東
(馬鞍山師范高等專科學校 理工系,安徽 馬鞍山 243041)
Web服務的測試內容包括系統功能測試和性能測試,性能直接決定Web服務所提供服務的質量水平,本文選擇性能測試作為主要研究目標,根據Web服務測試的特點,對Web服務測試的內容進行分析.指定測試內容為:應用在服務請求端性能的測試、應用在網絡上性能的測試和應用在Web服務提供端性能的測試.根據測試內容,提出了Web服務測試執行框架.測試執行框架由4個部分組成:測試主管、測試代理、測試用例、測試監視器.依據Web服務測試的內容和執行框架,使用.NET技術設計實現了一個Web服務測試工具WSTest.
Web服務;測試;內容;執行框架
隨著Web服務滲入到社會的各個應用領域,在市場需求的推動下,Web服務軟件規模不斷擴大,軟件復雜性增加,但激烈的商業競爭使軟件開發周期縮短,如何保證Web服務的正確性和可靠性越來越成為人們關注的問題.作為保證軟件質量和可靠性的重要手段,Web服務軟件測試就成為軟件開發過程中的一個重要環節.由于Web服務軟件的異構、分布、開發和平臺無關等特性[1],因而不可能完全沿用傳統軟件測試技術對其進行測試,這使得對Web服務軟件的測試要比傳統程序的測試更加困難,從而在軟件測試領域提出了新的挑戰.
測試是一種信息的收集和分析過程,過程中收集的數據用來預測怎樣的負載水平將耗盡系統資源.測試保證程序具有良好的性能,能考察在不同的用戶負載下,Web服務對用戶請求做出的響應情況,以確保將來系統運行的安全性、可靠性和執行效率.測試的主要目的是為維護系統的性能,并找到有效的改善策略[2].測試在軟件的質量保證中起著重要的作用,它包括的測試內容豐富多樣.主要包括三個方面的測試:應用在服務請求端性能的測試、應用在網絡上性能的測試和應用在Web服務提供端性能的測試.通常情況下,三方面有效、合理的結合,可以達到對系統性能全面的分析和瓶頸的預測.
應用在Web服務請求端性能測試的目的是考察Web服務的性能.它主要包括功能測試、性能測試、壓力測試等,其中并發性能測試是重點[3].并發性能測試的過程是一個負載測試和壓力測試的過程,即逐漸增加負載,直到系統的瓶頸或者不能接收的性能點,通過綜合分析請求響應數據和資源監控指標來確定系統并發性能的過程.壓力測試是確定在各種工作負載下系統的性能,目標是測試當負載逐漸增加時,系統組成部分的相應輸出項,例如吞吐量、響應時間、CPU負載、內存使用等來決定系統的性能,其中響應時間尤為重要,因為它直接反映了Web服務響應請求的速度.負載測試是一個分析軟件應用程序和支撐架構、模擬真實環境的使用,從而來確定能夠接收的性能過程.壓力測試是通過確定一個系統的瓶頸或者不能接收的性能點,來獲得系統能提供的最大服務級別的測試.進行壓力測試是指實際破壞一個Web服務,測試系統的反映.壓力測試是測試系統的限制和故障恢復能力,也就是測試Web服務系統會不會崩潰,在什么情況下會崩潰.并發性能測試的目的主要體現在三個方面:以真實的業務為依據,選擇有代表性的、關鍵的業務操作設計測試案例,以評價系統的當前性能:當擴展應用程序的功能或者新的應用程序將要被部署時,負載測試會幫助確定系統是否還能夠處理期望的用戶負載,以預測系統的未來性能.通過模擬成百上千個用戶,重復執行和運行測試,可以確認性能瓶頸并優化和調整應用,目的在于尋找到瓶頸問題.負載測試,它是采用系統穩定運行情況下能夠支持的最大并發用戶數,持續執行一段時間業務,通過綜合分析交易執行指標和資源監控指標來確定系統處理最大工作量強度性能的過程.如出現錯誤導致測試不能成功執行,則及時調整測試指標,例如降低用戶數、縮短測試周期等.
應用在網絡上性能的測試重點是利用成熟先進的自動化技術進行網絡應用性能監控、網絡應用性能分析和網絡預測.網絡應用性能分析的目的是準確展示網絡帶寬、延遲、負載和TCP端口的變化是如何影響用戶的響應時間的.可以解決多種問題:服務請求端是否對數據庫服務器運行了不必要的請求;當服務提供者從客戶端接受了一個請求服務,應用服務器是否花費了不可接受的時間請求Web服務;在系統試運行之后,需要及時準確地了解網絡上正在發生什么事情,什么應用在運行,如何運行;多少PC正在訪問Web服務;哪些應用程序導致系統瓶頸或資源競爭.這時網絡應用性能監控以及網絡資源管理對系統的正常穩定運行是非常關鍵的.在大多數情況下用戶較關心的問題還有哪些應用程序占用大量帶寬,哪些用戶產生了最大的網絡流量.考慮到系統未來發展的擴展性,預測網絡流量的變化、網絡結構的變化對用戶系統的影響非常重要.根據規劃數據進行預測并及時提供網絡性能預測數據.
對于應用在服務提供者端上性能的測試,可以采用工具監控,也可以使用系統本身的監控命令.
下面是執行Web服務測試時,提出的一個測試的框架,它由四部分組成:測試主管、測試代理、測試用例和測試監視器.這四部分可以同處一地,實際應用中通常分布在不同的地方,并且它們彼此之間使用SOAP(Simple Object Access Protocol)進行通訊.
測試監視器經常駐留和被測的Web服務同樣的地方.測試監視器捕獲在Web服務和測試代理客戶端的信息,并且記錄狀態的變化.測試主管通過從數據庫中創建案例(Scenarios)管理測試,并且通過使用SOAP并行的發送命令到一個或多個測試代理那運行[4].它也同步或異步的接受來自于一個或多個測試監視器的數據.
測試代理擔當在Web服務方面測試主管的代理,它執行測試,驗證結果,并且報告響應結果給測試主管.如果一個測試代理也和被測Web服務在同一位置的時候,它也能擔當一個測試監視器的角色.
測試監視器經常駐留在與被測的Web服務同樣的地方.測試監視器捕獲在Web服務和測試客戶端的信息,并且記錄狀態的變化.
測試主管通過從Web服務注冊庫中得到WSDL文檔,并且通過使用SOAP并行的發送命令到一個或更多測試客戶端那運行.它也同步或異步的接受來自于一個或更多測試監視器的數據.Web服務測試的執行框架如圖1所示.

測試代理擔當在Web服務方面測試主管的代理,它執行測試,驗證結果,并且報告響應結果給測試主管.測試代理會先在注冊庫中搜尋需要的Web服務,如果一個測試客戶端也和被測的Web服務在同一位置的時候,它也能擔當一個測試監視器的角色.
Web服務測試用例的產生,由WSDL中得到能夠使用的具體Web服務,以及調用每個Web服務需要輸入的具體參數后,就能夠通過CTM方法產生測試用例,該方法是針對功能性測試中面向黑盒產生測試用例的一種具體方法.通過CTM一個SUT(System Under Test)的輸入和輸出域的各個方面被劃分成多個有效輸入類,因此各個類之間的每種組合就是一個測試用例,這其中每個類之間的某種耦合或關聯會減少有效測試用例的數量,這樣會很大程度上提高產生測試用例的效率.目前,軟件CTE(classification-tree editor)支持CTM,通過該CTE可以實現CTM,自動產生測試用例[5].
Web服務調用框架提供了一組基于WSDL文檔驅動的簡單API來調用、測試Web服務.只要服務采用WSDL文檔描述,則不管服務是怎樣提供或由哪里提供,均可以采用統一的模式來調用,過去僅局限于SOAP進行服務調用的模式轉變為基于WSDL文檔的通用服務調用模式.Web服務調用框架將Web服務調用的全部問題從以綁定為中心的觀點轉移到更抽象的級別上,與傳統調用模式相比,Web服務測試框架具有以下一些特點:
(1)提供了一組對任何服務都獨立于綁定訪問的API;
(2)內置了端口類型編譯器產生存根,允許使用抽象服務接口調用;
(3)允許無存根(完全動態)的服務調用;
(4)可以在運行時更新綁定;
(5)可以在運行時插入新的綁定;
(6)允許將綁定選擇延后到運行時.
Web服務的最終承諾就是實現遠程調用,通過對服務調用各階段的分析,以及階段間調用關系的總結,將服務從最初發現到最終調用的整個過程進行無縫連接,實現了服務的動態調用、測試[6].事實證明,它被直接設計用來調用由Web服務描述語言描述的Web服務,隱藏了底層訪問協議 (如SOAP)的復雜性,由于WSDL文檔的服務綁定部分本身是可擴展的,這樣就可以通過給服務添加新的綁定,使之能夠通過某個定制的協議訪問該服務,Web服務測試執行框架不僅增加了面向服務應用的靈活性和擴展性,也在某種程度上將Web服務的調用提高到一個更抽象的不基于特定SOAP協議的高度,有效隱藏了底層訪問協議的復雜性.
WSTest測試系統是在微軟VS.NET2005環境下實現的.由于Web服務通信協議多采用標準的SOAP協議,因此.NET提供了一套API來實現SOAP的封裝、傳輸、解析,作為SOAP處理機,它的處理對象就是SOAP消息..NET中對SOAP消息的處理是通過在處理器間傳送一個MessageContext對象來完成的.MessageContext含有處理請求消息或響應消息所需的所有數據,其中關鍵數據有:一個請求消息、一個響應消息以及當前消息處理的所有元數據.每個處理器都可訪問MessageContext的所有數據,因此,每一處理器都可使用修改請求消息及任何可能存在的響應消息.
WSTest測試程序主要包括6個部分:(1)輸入WSDL地址,解析WSDL文檔,得到Web服務信息.(2)初始化被測Web服務需要輸入的參數值.(3)發送Web服務請求,封裝請求消息為SOAP格式.(4)傳輸SOAP請求,得到返回結果.(5)解析SOAP消息,得到Web服務結果.(6)用二維圖表顯示不同測試的性能指標.程序主體框架描述如圖2所示.

WSTest的用戶界面如圖3所示,開始的時候,先要確定請求Web服務的WSDL地址的具體位置,如 http://localhost/service1.asmx,此時點擊“測試”按鈕,這一步就是在Web服務提供者位置查找到該Web服務的WSDL地址,并且把WSDL文件的內容解析出來.如果輸入所需參數,則會返回不同的測試結果.

圖3 測試名為service1.asmx的Web服務
在進行Web服務測試時,需要確定測試內容,定義測試執行框架,然后設計具體測試系統進行測試.Web服務性能測試的內容主要包括應用在服務請求端性能測試、應用在網絡上性能測試和應用在Web服務提供端性能測試.Web服務測試執行框架包括測試主管、測試代理、測試用例和測試監視器.
〔1〕湯永剛.Web service實現技術研究[J],福建電腦,2006,15(3):34-35,29.
〔2〕陳隋和,鐘勇.一種增強 Web Services的服務質量和性能的方法[J].計算機應用,2006,26(2):472-475.
〔3〕宮去戰.軟件測試[M].北京:國防工業出版社,2006.
〔4〕李剛毅,金蓓弘.自動化回歸測試的技術和實現[J].計算機應用研究,2006:186-188.
〔5〕W3C.WebServicearchitecture,W3C working Group Note,www.w3.org/tr/ws-arch/,2009.
〔6〕Davidson,N. Web Services Testing.The Red-gate software technical papers,2002.http://www.redgate.com.
〔7〕黃寧,余瑩,張大勇.Web服務軟件測試技術的研究與實現 [J].計算機工程與應用,2004,35:147-149.
TP311.5
A
1673-260X(2010)02-0056-03