摘要:隨著移動平臺的發展,Web服務在移動端的應用越來越廣泛,這對移動端Web服務的正確性提出了一些新的挑戰。本課題通過分析WSDL文檔的結構和了解Android平臺的開發方法以及學習Web服務測試的有關理論,最終在Android平臺上實現了一個Web服務自動化測試的解決方案。理解Web服務的協議棧,包括SOAP、UDDI、WSDL等協議,重點學習WSDL的結構及其解析方法。為了保證Web服務的質量,必須對其進行詳盡的測試,而由于Web服務是基于接口設計而實現的,采用自動化的測試方法對于提高Web服務測試的質量和效率顯得尤為重要,本文在理解Web服務和測試相關知識,了解分析基于WSDL接口說明的Web服務自動測試方法的基礎上,在Android平臺上實現了Web服務自動化測試的解決方案。
關鍵詞:Web服務;測試:Android:WSDL;SOAP
1、緒論
Web服務已經逐漸成為Internet上的重要組件之一,Web服務天生的優點使它完全適合于為移動設備提供服務;智能手機的不斷普及,移動網民越來越多。Web服務和移動設備的結合,必將推動移動應用和移動互聯網的發展。在此基礎上,我們提出基于Android的Web服務自動測試研究與實現這一課題,為了保證Web Service的質量,必須對其進行詳盡的測試,而由于Web服務是基于接口設計而實現的,因此采用自動化的測試方法對于提高Web服務測試的質量和效率顯得尤為重要。本課題理解Web服務和測試相關知識,了解分析基于WSDL接口說明的Web服務自動測試方法。在當前Web服務和移動平臺發展的大背景下,選擇在Android平臺下研究Web服務的自動化測試,即課題《基于Android的Web服務自動測試研究與實現》,研究在Android平臺上Web服務的解決方案并實現。本文主要描述了Web服務及其測試的相關理論知識和Android平臺下Web服務開發,最后介紹一種基于Android的Web服務自動測試研究與實現的實現方案。
2、Web服務描述語言(WSDL)
2.1 WSDL概述
Web服務描述語言(Web service s De scriDtionLanguage,WSDL)是用xML文檔來描述Web服務的標準,是Web服務的接口定義語言,它用一種和具體語言無關的抽象方式定義了給定Web服務收發的有關操作和消息,與XM一樣,具有可擴展性。通過WSDL,可以描述Web服務的以下三個基本屬性:服務做些什么:服務所提供的操作(方法);如何訪問服務:和服務交互的數據格式以及必要協議;服務位于何處;協議相關的地址,如URL。WSDL是一種XML Application,他將Web服務描述定義為一組服務訪問點,客戶端可以通過這些服務訪問點對包含面向文檔信息或面向過程調用的服務進行訪問(類似遠程過程調用)。WSDL首先對訪問的操作和訪問時使用的請求/響應消息進行抽象描述,然后將其綁定到具體的傳輸協議和消息格式上以最終定義具體部署的服務訪問點。相關的具體部署的服務訪問點通過組合就成為抽象的Web服務。
2.2 WSDL結構
一個基本的WSDL文檔包含7個重要的元素。下面將分別介紹這幾個元素以及他們的作用。WSDL文檔的結構如圖3—1所示。WSDLl文檔在Web服務的定義中使用下列元素:
(1)Types-數據類型定義的容器,它使用某種類型系統(一般地使用XML Schema中的類型系統)。
(2)Message-通信消息的數據結構的抽象類型化定義。使用Types所定義的類型來定義整個消息的數據結構。
(3)Operation-對服務中所支持的操作的抽象描述,一般單個Operation描述了一個訪問入口的請求/響應消息對。
(4)PortType-對于某個訪問入口點類型所支持的操作的抽象集合,這些操作可以由一個或多個服務訪問點來支持。
(5)Binding-特定端口類型的具體協議和數據格式規范的綁定。
(6)Port-定義為協議/數據格式綁定與具體Web訪問地址組合的單個服務訪問點。
(7)Service-相關服務訪問點的集合。
3、Android與Web服務
3.1 Android簡介
Android是基于linux開放性內核的操作系統,是Google公司在2007年11月5日公布的手機操作系統,它采用了軟件堆層(software stack)的架構,主要分為三部分。底層linux內核只提供基本的功能。其他的額應用則由各軟件公司自行開發,部分程序以Java開發。Android不僅是一個操作系統,更是一個開源的體系架構。Android軟件平臺從上到下主要由五個部分構成:應用程序、應用程序框架、程序庫、Android運行庫以及Linux內核。
應用程序(Appl ieation):
Android的應用程序通常涉及用戶界面和用戶交互。Android本身提供了桌面(Home)、聯系人(C0ntaet)、電話(Phone)和瀏覽器(Browsers)等眾多的核心應用。所有的核心應用都使用Jave語言編寫,同時開發者可以使用應用程序框架層的API實現自己的程序,這也是Androfd開源優勢的體現。
應用程序框架(ApplicationFramework):
Android應用程序的開發基于程序框架和組件,開發人員擁有同核心應用程序一樣的妙Is訪問權限。應用程序后面是—系列的服務和系統,其中包括:
視圖(Views)構造應用程序的視圖部分,包括列表(Li8ts)、文本框(Textboxes)、按鈕(Buttons)等。內容提供器(Content Providers)提供一種實現數據互訪和共享的機制。
資源管理器(Resources Manager)負責管理非代碼的訪問,如本地字符串、圖片資源及涉及布局的xML文件。
通知管理器(NotificationManager)用于將提示信息顯示在狀態欄上。例如,當有短信的時候,在狀態欄上顯示有新信息。
活動管理器(ActivityManager)用于管理應用程序的生命周期,并提供應用頁面退出的機制。
通過這套應用框架,各種服務和組件可以被用戶的應用重復利用。
程序庫(Libraries):
Android本身還包含了一整套核心庫,能被系統中不同的組件使用。它們通過Android應用程序框架為開發者提供服務。核心庫主要包括:
C庫-從BSD繼承來的標準C系統函數庫,是專門為基于嵌入式Linux設備制定的。
媒體庫-該庫支持多種常用的音頻、視頻格式的回放和錄制,同時支持靜態圖像文件。編碼格式包括MPEG4、H.264、MP3、AAC、ARM、JPG、PNG。
SurfaceManage-用于管理顯示子系統,并為多個應用程序提供zD和3D圖形層的無縫融合。
SGL一底層的zD圖形引擎。3D1ibraries-基于PenGLESI.OApls實現,該庫可以使用硬件加速,或者高度優化的3D軟加速。
FreeType:提供位位圖和矢量的字體顯示。
SQLite-輕量級的關系型數據庫。
Android運行庫(RunTime):
所有的Android應用程序都運行在它自己的進程里,該進程是一個Dalvik虛擬機的實例。Dalvik虛擬機是Google自主研發的,它被設計成一個設備,可以同時高效地運行多個虛擬系統。Dalvik在保證API方面兼容的同時,針對移動手機進行了優化,占用更小的資源,提高了運行效率。Dalvik虛擬機依賴于底層linux內核提供的功能,如線程機制和內存管理機制。
Linux內核:
Android基于Linux2.6內核來提供系統的核心服務,如安全性,內存管理,進程管理,網絡協議棧和驅動模型。Linux內核也同時作為硬件和軟件棧之間的抽象層。從總體架構中看,Android平臺顯示出了自身的特點,如集成了WebKit瀏覽器、Dalvik虛擬機等模塊。這些模塊的應用也成為了Android開發的焦點,開發者可以利用Andrnid提供的模塊接口,開發出具有特色的應用程序
3.2 Android應用程序構成
Android程序包括以下四部分:Activity、BroadcastIntent Receiver、Service、Content Provider
3.3 Android調用Web服務
利用Web服務可以將不同操作系統平臺、不同語言、不同技術開發的應用整合到一起,具有非常廣闊的應用前景。但是,在Android SDK中并沒有提供調用Web服務的庫。因此,為了實現在Android平臺上訪問Web服務的功能,我們需要借助第三方類庫來實現。Android平臺上常用的用來訪問Web服務的軟件包是kSoap2-android。k Soap2是JAVA環境下的一個輕量級Web服務客戶端庫,被設計用在Applets和J2ME中。kSoap2-android是其在Android平臺下的移植,它提供了一個高效的Soap庫,借助kSoap2我們就能夠輕松訪問Web服務。其實現過程簡單、直接,對在Android平臺上開發更多實用的應用程序提供很大的方便,也推動Web服務技術在Android平臺上的發展。
4、基于Android的Web服務自動測試實現方案
4.1 需求分析
本課題是在android平臺上實現Web服務自動化測試方案,需要了解以下一些知識:
Web服務概念,即什么是Web服務,Web服務有什么作用,參見第二章
Web服務的協議棧,重點是XML(參見2.2.1節)、SOAP(參見2.2.2節)、WSDL(參見第三章),對于WSDL需要徹底理解其結構以及如何解析
軟件測試與Web服務測試(參見第四章),什么是軟件測試,軟件測試有哪些方法,軟件測試的目的是什么,以及Web服務測試普通軟件測試的有什么區別與限制
自動化測試的方法與其實現
移動平臺Android應用開發框架的了解以及如何調用Web服務,在理解以上這些知識之后,然后來分析如何實現基于Android的Web服務自動化測試方案,作為一個Web服務請求者的角色對于一個給定的Web服務,只能夠看到其WSDL文檔,所有有關于該Web服務的相關信息,只能夠從此WSDL文檔的結構中得出來,而無法了解該Web服務的源碼和實現細節。因此只能夠采用黑盒測試,且僅實現功能測試部分。由于平臺的限制該課題在Web平臺上來實現本身就不具有實際的應用意義,因此僅限于在理論上研究并實現,不考慮其具體推廣。首先需要解決是與實現平臺無關的,如何獲得指定的Web服務相關數據類型和操作相關信息,所以我們需要解析WSDL文檔,解析出來的信息以一定的格式存放起來,例如:內存、文件或者數據庫;以便在需要的時候可以調用;然后是在Android如何調用Web服務實現;測試數據的生成算法的實現;根據解析出來的Web服務相關信息,選定需要測試操作,根據操作指定參數類型生成參數;最后測試結果以友好的形式反饋給測試者。
4.2 WSDL解析實現
WSDL是一種特殊的XMLl文檔,在Android(從APl8開始)平臺上有三種解析方式:dom、sax和pull。但是這種解析方法只是將WSDL文檔當成普通的XML文檔,WSDL文檔的結構關系需要自己去讀懂,這種關系需要代碼實現,反應到解析結構當中來,實現太復雜。所以沒有采用普通的Android平臺解析xML的三種方式。因為WSDL本身就是采用一定架構來實現的,針對這樣的情況,IBM有解析WSDL的開源庫。解析方案中采用的IBM的解析框架。解析過程當中引入了wssdl4j.jar、jdom.jar、xercesImpl.jar、castor-xml.jar等第三方庫。
數據結構設計:
(1)一個類用于存放整個Web服務的相關信息:publ ic class ServiceInfo{/**服務名*/privateString name;/**WSDL文件位置*/private Stringwsdllocation://private String endpoint:privateString targetnamespace;private Schema wsdlType;/**The list of operations that this service defines,*/List operations。new ArrayList( ):……//省略相關參數的置值和返回的函數}該類當中包含一個變量:Listoperations=new ArrayList( );該變量就是存放相關操作的信息的,也是我們需要重點解析出來的。
(2)操作的存儲結構類:
public class OperationInfo{
/**SOAP operation type*/
private String operationType=””;
/**The SOAP encoding style to use.*/
private String encodingStyle=””;
/**The URL where the target object is located。*/
private String targetURL=””;
/**The
namespace
URI
used
for
this
SOAPoperation.*/
private String namespaceURI=””;
/**The URI of the target object to invoke forthis SOAP operation.*/
private String targetObjectURl=””;
/**The name used to when making an invocation.*/
private String targetMethodName=””;
/**The input message.*/
private String inputMessageText=””;
/**The output message.*/
private String outputMessageText=””;
/**The name of input message.*/
private String inputMessageName=””;
/**The name of output message.*/
private String outputMessageName=””;
/**The action URI value to use when making ainvocation.*/
private String soapActionURI=””;
/**The encoding type“document”vs.“rpc”*/
private String style=“document”;
/**操作所對應的輸入參數,一個參數對應一個Parameterlnfo類*/
private List inparameters=new ArrayList( );
/**操作所對應的輸出參數,一個參數對應一個ParameterInfo類*/
private List outparameters=new ArrayList( ):
/**操作所對應的輸入消息*/
private Message inmessage;
/**操作所對應的輸出消息*/
private Message outmessage;
/**服務所對應的Schemas*/
private Vector wsdltypes;
private String serviceid;
……//省略相關參數的置值和返回的函數}
該數據結構中包含了輸入參數List和輸出參數List以及相應的參數的類型。
本課題是在Android平臺的基礎上,研究學習Web服務及其測試的相關知識。最終的成果是在Android平臺是實現Web服務自動化測試解決方案,其創新點就是在移動終端來研究Web服務的自動化測試。Web服務相關協議是重點是難點,尤其是理解WSDLl文檔結構。實現方案是PAWeb服務請求者的角色,注定無法了解其Web服務源碼和實現細節,只能夠采用黑盒功能測試。其次是因為在移動平臺上實現,消耗流量比較嚴重,本課題具有一定的研究意義,但是在目前的移動網絡情況下,不具有廣泛推廣意義。