国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于單子技術(shù)的Web服務(wù)測試數(shù)據(jù)自動(dòng)生成方法

      文檔序號:7851231閱讀:206來源:國知局
      專利名稱:一種基于單子技術(shù)的Web服務(wù)測試數(shù)據(jù)自動(dòng)生成方法
      技術(shù)領(lǐng)域
      本發(fā)明給出了一種基于單子和QuickCheck技術(shù)的Web服務(wù)自動(dòng)測試框架,解決了用戶進(jìn)行Web服務(wù)功能測試時(shí),測試用例的自動(dòng)生成問題,屬于Web服務(wù)的測試領(lǐng)域。
      背景技術(shù)
      Web服務(wù)(Web Service,簡稱WS)是一種部署在Web上的對象,它們建立在以XML(可擴(kuò)展的標(biāo)記語言)為主的且開放的Web規(guī)范技術(shù)基礎(chǔ)上,因此具有比任何現(xiàn)有的對象技術(shù)更好的開放性,是建立可互操作的分布式應(yīng)用程序的新平臺。Web平臺是一套標(biāo)準(zhǔn),它定義了應(yīng)用程序如何在Web上實(shí)現(xiàn)互操作性,我們可以用任何語言,在任何平臺上編寫需要的Web服務(wù)。
      Web服務(wù)平臺主要采用四個(gè)技術(shù)
      1.XML (可擴(kuò)展的標(biāo)記語言)Web服務(wù)平臺中表示數(shù)據(jù)的基本格式,它解決了數(shù)據(jù)表示的問題,但它沒有定義怎么擴(kuò)展這套數(shù)據(jù)類型;
      2.SOAP (簡單對象訪問協(xié)議):提供了標(biāo)準(zhǔn)的RPC方法來調(diào)用Web服務(wù),SOAP規(guī)范中定義了 SOAP消息的格式,以及怎樣通過HTTP協(xié)議來使用SOAP ;
      3.WSDL (Web服務(wù)描述文檔)它是基于XML的,用于描述Web服務(wù)及其操作,參數(shù)和返回值類型的語言,一些最新的開發(fā)工具既能根據(jù)Web服務(wù)來生成WSDL文檔,又能導(dǎo)入WSDL文檔,生成調(diào)用相應(yīng)Web服務(wù)的代碼;
      4.UDDI (通用描述、描述和集成)它是由Ariba、IBM、微軟等公司倡導(dǎo)的,其目的是在網(wǎng)上自動(dòng)查找Web服務(wù)?;赪eb的系統(tǒng)測試與傳統(tǒng)的軟件測試不同,它不但需要檢查驗(yàn)證是否按照設(shè)計(jì)的要求運(yùn)行,而且還要測試系統(tǒng)在不同用戶的瀏覽器端的顯示是否合適。重要的是,還要從最終用戶的角度進(jìn)行安全性和可用性測試。然而,Internet和Web媒體的不可預(yù)見性使測試基于Web的系統(tǒng)變得困難。當(dāng)前Internet的快速發(fā)展和普及使得網(wǎng)絡(luò)越來越開放、動(dòng)態(tài)和多變,在這樣的環(huán)境下實(shí)現(xiàn)各類資源的共享和集成就成為了計(jì)算機(jī)軟件技術(shù)面臨的重要挑戰(zhàn)之一。為了解決在分布、動(dòng)態(tài)、異構(gòu)環(huán)境下,數(shù)據(jù)、應(yīng)用和系統(tǒng)集成的問題,面向服務(wù)計(jì)算在傳統(tǒng)的面向?qū)ο?、基于?gòu)件的開發(fā)、分布式對象以及Web技術(shù)的基礎(chǔ)上,提出了一種新的基于Internet的軟件開發(fā)、部署和集成的模式。由于服務(wù)的分布性、協(xié)同性、自主性和動(dòng)態(tài)性的特點(diǎn),使得基于服務(wù)的系統(tǒng)開發(fā)在根本上不同于傳統(tǒng)的軟件開發(fā)的模式,傳統(tǒng)的軟件開發(fā)依賴于特定的程序開發(fā)語言、程序開發(fā)環(huán)境和運(yùn)行環(huán)境,但即使分布式系統(tǒng)架構(gòu)如CORBA、DCOM、J2EE為實(shí)現(xiàn)基于標(biāo)準(zhǔn)的系統(tǒng)互連互通做出了一定的努力,但系統(tǒng)構(gòu)建之間還都必須遵循相同的接口約束。面向服務(wù)的系統(tǒng)開發(fā)以服務(wù)作為基本的組成要素,服務(wù)是一種部署在Internet上的提供特定計(jì)算能力的應(yīng)用軟件,只發(fā)布可以通過標(biāo)準(zhǔn)的Internet協(xié)議訪問并調(diào)用的接口定義,而隱藏了技術(shù)實(shí)現(xiàn)的細(xì)節(jié)。由于Internet開放性、服務(wù)及服務(wù)協(xié)同的動(dòng)態(tài)演化、運(yùn)行環(huán)境多變等特點(diǎn),存在多種不確定的因素,使得服務(wù)的安全性、可靠性、可用性、時(shí)效性等可信性質(zhì)難以得到保證,而測試能提高用戶對服務(wù)的可信度。隨著面向產(chǎn)品的體系結(jié)構(gòu)逐漸向面向服務(wù)的體系結(jié)構(gòu)轉(zhuǎn)變,服務(wù)軟件的測試技術(shù)日趨重要,但是傳統(tǒng)的軟件測試技術(shù)難以適應(yīng)面向服務(wù)的技術(shù)發(fā)展。面向服務(wù)作為一種新的計(jì)算模式,目前尚缺乏完善的理論基礎(chǔ)。面向服務(wù)的測試技術(shù)還處在起步階段,主要針對Web服務(wù)的實(shí)現(xiàn),從模型檢測和測試兩個(gè)方面探討相關(guān)協(xié)議和描述的正確性。當(dāng)前的Web服務(wù)面臨著動(dòng)態(tài)靈活性和可組合重用性等挑戰(zhàn),因此Web服務(wù)測試時(shí)用例形式化描述及其自動(dòng)生成將能很好地緩解這些壓力,然而以往的測試技術(shù)不能根據(jù)特定的數(shù)據(jù)類型進(jìn)行測試數(shù)據(jù)的自動(dòng)生成,或者只能自動(dòng)生成一小部分類型的測試數(shù)據(jù),本專利從另一角度出發(fā),使用了 Haskell語言的單子技術(shù)和QuickCheck模塊,能進(jìn)行簡單類型以及用戶自定義類型數(shù)據(jù)的自動(dòng)生成并進(jìn)行自動(dòng)化測試,其測試結(jié)果包括訪問是否成功和所獲取的反饋SOAP消息的相關(guān)內(nèi)容。 參考文獻(xiàn)。

      發(fā)明內(nèi)容
      技術(shù)問題本發(fā)明的目的是提供一種基于單子技術(shù)的Web服務(wù)測試數(shù)據(jù)自動(dòng)生成方法,并設(shè)計(jì)和實(shí)現(xiàn)了服務(wù)測試單子等,故可方便對Web服務(wù)的性質(zhì)進(jìn)行描述和測試,以期從一定程度上解決Web服務(wù)測試所面臨的動(dòng)態(tài)靈活性和可組合重用性等挑戰(zhàn)。技術(shù)方案本發(fā)明結(jié)合單子技術(shù)和QuickCheck,實(shí)現(xiàn)了 Web服務(wù)測試用例的自動(dòng)生成,其中單子概念最初是在1950年代作為范疇論里一種函子而被提出的,采用單子這種規(guī)則的表示法可避免定義語義結(jié)構(gòu)時(shí)對語義成分的引用,從而加強(qiáng)了語義描述的模塊性和擴(kuò)展性。本專利利用N. Broberg等所設(shè)計(jì)的支持Web網(wǎng)頁動(dòng)態(tài)載入的HSP(Haskell ServerPages)單子來統(tǒng)一描述Web服務(wù)的測試用例。而QuickCheck是輔助進(jìn)行自動(dòng)隨機(jī)測試的抽象函數(shù)庫,最初是被用來編寫Haskell程序的測試屬性(也稱為測試計(jì)劃或規(guī)格說明),并根據(jù)屬性輸入隨機(jī)選擇相應(yīng)數(shù)據(jù)進(jìn)行自動(dòng)測試,可及時(shí)報(bào)告測試中所發(fā)現(xiàn)的反例;還可利用其中Gen單子方法幫用戶自動(dòng)產(chǎn)生一個(gè)或多個(gè)測試用例數(shù)據(jù),并借助于shrink方法盡量返回反例所對應(yīng)的“最小”測試用例數(shù)據(jù)。Web服務(wù)的調(diào)用運(yùn)行是通過簡單對象訪問協(xié)議(SOAP)通信的。SOAP協(xié)議允許應(yīng)用程序通過HTTP進(jìn)行信息交換,它也是基于XML格式的。本發(fā)明主要從用戶角度進(jìn)行Web服務(wù)的功能測試,故這里的Web服務(wù)測試用例一般指一個(gè)SOAP消息。在本發(fā)明中,我們假設(shè)一個(gè)用戶調(diào)用某個(gè)已發(fā)布的服務(wù),用戶必須向服務(wù)器發(fā)送SOAP消息請求,其SOAP消息包含該服務(wù)的操作名和操作所需參數(shù)值等信息。SOAP消息可以通過分析對應(yīng)服務(wù)的WSDL文檔而自動(dòng)生成。接著,我們再將生成的SOAP消息(測試用例)加載相關(guān)HTTP包頭信息(如SOAPAction頭、包文長度、發(fā)送地址等),使之封裝成一個(gè)HTTP包,然后將之發(fā)送給服務(wù)端,服務(wù)端對HTTP包中的SOAP消息進(jìn)行解析并返回調(diào)用服務(wù)的結(jié)果O該方法能自動(dòng)生成基于互聯(lián)網(wǎng)Web服務(wù)所需要的某些特定輸入類型的測試用例,該方法包含的步驟如下
      I )ffeb服務(wù)描述文檔WSDL的解析解析WSDL,簡單對象訪問協(xié)議SOAP消息中兩個(gè)必要兀素〈envelope〉和〈body〉;其中〈envelope〉兀素的屬性值由WSDL中Schema兀素的命名空間屬性直接獲得,其中Schema負(fù)責(zé)定義和描述文檔的結(jié)構(gòu)和內(nèi)容模式,這里的文檔XML是一種元標(biāo)記語言,用來描述數(shù)據(jù)的;〈body>元素的子結(jié)構(gòu)主要由對應(yīng)的服務(wù)操作名及其相應(yīng)的類型結(jié)構(gòu)信息組成;
      2)服務(wù)類型信息的獲取解析WSDL文檔,從其中的Schema元素中收集服務(wù)的類型描述信息,并表示成測試數(shù)據(jù)TestData類型,再用哈希表XsdTable表示最終的Schema所有類型信息;其中除了包含基本簡單類型外,還允許用戶自定義簡單類型,以便生成符合特殊要求的測試用例數(shù)據(jù);
      3)構(gòu)造與服務(wù)輸入類型相應(yīng)的XML文檔根據(jù)上述的Schema信息表以及哈斯卡服務(wù)頁面單子HSP,給出函數(shù)testDataToXml,通過此函數(shù)能從一個(gè)服務(wù)的輸入類型生成相應(yīng)的XML結(jié)構(gòu)文檔;
      4)自動(dòng)生成相應(yīng)的測試用例根據(jù)類型信息,輸入類型的XML文檔和服務(wù)操作名以及從Schema中獲取的〈envelope〉元素的屬性值,給出函數(shù)makeTestCsae來為某個(gè)服務(wù)操作 自動(dòng)生成相應(yīng)的測試用例,并根據(jù)WSDL中服務(wù)輸入類型進(jìn)行預(yù)期返回結(jié)果,自動(dòng)生成XML框架;
      5)SOAP消息的封裝在Web服務(wù)測試用例之上加載相關(guān)的超文本傳輸協(xié)議HTTP的包頭信息,其中包括服務(wù)請求地址SOAPAction頭、包頭長度、發(fā)送地址,之后將其封裝成一個(gè)HTTP包,然后將之發(fā)送給服務(wù)端;
      6)S0AP消息的解析服務(wù)端對HTTP包中的SOAP消息進(jìn)行解析并返回調(diào)用服務(wù)器的反饋信息,包括訪問是否成功和解析Socket包,其中Socket包中包含服務(wù)請求地址信息和發(fā)送地址信息,并獲取反饋消息的相關(guān)內(nèi)容;
      7)生成服務(wù)自動(dòng)測試描述函數(shù)根據(jù)服務(wù)調(diào)用函數(shù)soapCall,加入能把所生成的測試用例以文件的形式保存的appendFile函數(shù)和能輸出服務(wù)調(diào)用后反饋的相關(guān)結(jié)構(gòu)的PutstrLn函數(shù),最終得到服務(wù)自動(dòng)測試描述函數(shù);
      8)Web服務(wù)自動(dòng)測試的運(yùn)行將服務(wù)自動(dòng)測試描述函數(shù)直接作為能隨機(jī)產(chǎn)生相應(yīng)類型值的Gen單子中接口函數(shù)QuickCheck的輸入,從而可進(jìn)行Web服務(wù)自動(dòng)測試;
      9)特殊服務(wù)類型數(shù)據(jù)的生成接口函數(shù)QuickCheck根據(jù)參數(shù)中所含的生成器,隨機(jī)生成若干數(shù)據(jù)進(jìn)行測試;此外,如果QuickCheck函數(shù)輸入?yún)?shù)是個(gè)函數(shù)f,則QuickCheck函數(shù)先利用Gen單子給出f參數(shù)類型的生成器,再進(jìn)行批量測試;客戶也可以根據(jù)需要重新設(shè)計(jì)這些數(shù)據(jù)生成器,并輔助使用Gen單子中所提供的生成器函數(shù);
      10)測試用例類型約束根據(jù)上述Gen單子所提供的類型生成器,通過相應(yīng)的調(diào)整,來使測試數(shù)據(jù)生成器滿足WSDL描述中字符串?dāng)?shù)據(jù)類型,如長度、最大長度、最小長度,以及數(shù)值型數(shù)據(jù)類型相關(guān)約束,即最大范圍、最小范圍;
      11)測試屬性函數(shù)的組合描述=QuickCheck函數(shù)最后還提供了一些能將測試屬性函數(shù)組合起來的描述方法,即條件約束函數(shù)、測試數(shù)據(jù)分類與統(tǒng)計(jì)函數(shù),這些函數(shù)能輔助更好地進(jìn)行Web服務(wù)測試用例的生成與分析。有益效果Web服務(wù)使用標(biāo)準(zhǔn)技術(shù)在Internet上運(yùn)行,以XML、SOAP,WSDL和UDDI為核心,致力于軟件在應(yīng)用層的互操作問題。具有以下的一些特點(diǎn)和有益效果
      單子技術(shù)本專利采用單子這種更加規(guī)則的表示法替代λ表示法,可避免定義語義結(jié)構(gòu)時(shí)對無關(guān)語義成分的引用,從而加強(qiáng)了語義描述的模塊性和擴(kuò)展性。單子具有高度的抽象性、反射性、重用性和模塊化,又具有易于自動(dòng)實(shí)現(xiàn)擴(kuò)充和修改的特點(diǎn),這些特性對軟件體系結(jié)構(gòu)和軟件構(gòu)件技術(shù)帶來了積極的影響?,F(xiàn)在,單子已是獨(dú)立的概念,掌握它不再需要范疇論的知識,而且大量的研究和實(shí)踐已證實(shí)單子系統(tǒng)具有很強(qiáng)的功能,結(jié)合單子表示法的簡潔性和易讀性,因此將為越來越多的人所接受和應(yīng)用。QuickCheck技術(shù)它是輔助進(jìn)行自動(dòng)隨機(jī)測試的抽象函數(shù)庫,最初是被用來編寫Haskell程序的測試屬性(也稱測試計(jì)劃或規(guī)格說明),并根據(jù)屬性輸入隨機(jī)選擇相應(yīng)數(shù)據(jù)進(jìn)行自動(dòng)測試,可及時(shí)報(bào)告測試中所發(fā)現(xiàn)的反例;還可利用其中Gen單子方法幫用戶自動(dòng)產(chǎn)生一個(gè)或多個(gè)測試用例數(shù)據(jù),并借助于shrink方法盡量返回反例所對應(yīng)的“最小”測試用例數(shù)據(jù)。模塊性好本專利運(yùn)用單子技術(shù),不僅屏蔽了異構(gòu)的操作系統(tǒng)、網(wǎng)絡(luò)和和編程語 言,還屏蔽了傳統(tǒng)中間件之間的異構(gòu)性,并支持開放、動(dòng)態(tài)的互操作模式。自動(dòng)化程度高本專利不同于以往的測試數(shù)據(jù)生成技術(shù),以往的技術(shù)需要用戶指定輸入類型或者只能對少量數(shù)據(jù)類型(如字符型和數(shù)值型)自動(dòng)生成測試數(shù)據(jù),本專利能自動(dòng)生成用戶指定的服務(wù)輸入類型,并且存在接口允許用戶調(diào)整數(shù)據(jù)生成的方式。測試時(shí)間短本專利使用的方法在網(wǎng)絡(luò)延遲中斷時(shí),就沒有再次發(fā)送測試,而以往的技術(shù)都會在中斷后,反復(fù)繼續(xù)發(fā)送,因此本專利在測試時(shí)間上存在優(yōu)勢。


      圖I是基于單子和QuickCheck技術(shù)的Web服務(wù)自動(dòng)測試框架。
      具體實(shí)施例方式關(guān)于Web服務(wù)測試用例的自動(dòng)生成基本步驟如下
      (I)WSDL文檔的解析解析WSDL,生成SOAP消息中兩個(gè)必要元素〈envelope〉和〈body〉。其中〈envelope〉元素的屬性值可由WSDL中Schema元素的命名空間屬性直接獲得;〈body>元素的子結(jié)構(gòu)主要由對應(yīng)的服務(wù)操作名及其相應(yīng)的類型結(jié)構(gòu)信息組成。(2)服務(wù)類型信息的獲取解析WSDL文檔,從其中的Schema元素中收集服務(wù)的類型描述信息,并表示成TestData類型,再用哈希表XsdTable表示最終的Schema所有類型信息。其中除了包含基本簡單類型外,還允許用戶自定義簡單類型,以便生成符合特殊要求的測試用例數(shù)據(jù)。(3)構(gòu)造與服務(wù)輸入類型相應(yīng)的XML文檔根據(jù)上述的Schema信息表以及前面所提及的HSP單子技術(shù),我們可很方便地給出函數(shù)testDataToXml,由此可從一個(gè)服務(wù)的輸入類型生成相應(yīng)的XML結(jié)構(gòu)文檔。(4)自動(dòng)生成相應(yīng)的測試用例根據(jù)類型信息,輸入類型的XML文檔和服務(wù)操作名以及從Schema中獲取的〈envelope〉元素的屬性值,我們可以給出函數(shù)makeTestCsae來為某個(gè)服務(wù)操作自動(dòng)生成相應(yīng)的測試用例,并根據(jù)WSDL中服務(wù)輸入類型,自動(dòng)生成預(yù)期返回結(jié)果的XML框架。(5) SOAP消息的封裝在將Web服務(wù)測試用例(S0AP消息)之上加載相關(guān)HTTP包頭信息(SOAPAction頭、包頭長度、發(fā)送地址等),之后將其封裝成一個(gè)HTTP包,然后將之發(fā)送給服務(wù)端。(6) SOAP消息的解析服務(wù)端對HTTP包中的SOAP消息進(jìn)行解析并返回調(diào)用服務(wù)器的反饋信息,包括訪問是否成功和解析Socket包獲取反饋消息的相關(guān)內(nèi)容等,其相關(guān)操作由函數(shù)soapCall完成。(7)生成服務(wù)自動(dòng)測試描述函數(shù)根據(jù)服務(wù)調(diào)用函數(shù)soapCall,我們加入appendFile和putStrLn函數(shù),其作用分別為以文件形式保存所有生成的測試用例和輸出服務(wù)調(diào)用后反饋的相關(guān)結(jié)果,最終得到服務(wù)自動(dòng)測試描述函數(shù)。(S)Web服務(wù)自動(dòng)測試的運(yùn)行我們將服務(wù)自動(dòng)測試描述函數(shù)直接作為Gen單子中接口函數(shù)QuickCheck的輸入,從而可進(jìn)行Web服務(wù)自動(dòng)測試。 (9)特殊服務(wù)類型數(shù)據(jù)的生成=QuickCheck函數(shù)根據(jù)參數(shù)中所含生成器(Gen單子描述的)隨機(jī)生成若干數(shù)據(jù)進(jìn)行測試。此外,如果QuickCheck輸入?yún)?shù)是個(gè)函數(shù)f,則QuickCheck先利用Gen單子給出f參數(shù)類型的生成器,再進(jìn)行批量測試。當(dāng)然客戶也可以根據(jù)需要重新設(shè)計(jì)這些數(shù)據(jù)生成器,并可輔助使用Gen單子中所提供的生成器函數(shù)(如oneof > elements 和 suchThat 等)。(10)測試用例類型約束我們根據(jù)上述Gen單子所提供的類型生成器,可以通過相應(yīng)的調(diào)整,來使測試數(shù)據(jù)生成器滿足WSDL描述中字符串?dāng)?shù)據(jù)類型(如enumeration、length、maxLength和minLength等),以及數(shù)值型數(shù)據(jù)類型相關(guān)約束(如enumeration、maxlnclusive、minlnclusive、maxExclusive 和 minExclusive 等)等。(11)測試屬性函數(shù)的組合描述=QuickCheck最后還提供了一些測試屬性函數(shù)的組合描述方法,如條件約束函數(shù)“==>”、測試數(shù)據(jù)分類“classify”與統(tǒng)計(jì)“collect”等函數(shù),這些可輔助我們Web服務(wù)測試用例生成與分析。在Web服務(wù)單子模型下的Web服務(wù)自動(dòng)測試框架見圖I,描述了各個(gè)模塊之間的相互關(guān)系,本專利主要分為測試用例的單子表示,測試用例的自動(dòng)生成,Web服務(wù)測試的運(yùn)行這三個(gè)部分,下面我們詳細(xì)來討論這三個(gè)部分。測試用例的單子表示
      因Web服務(wù)基本結(jié)構(gòu)是XML格式的,所以其測試用例也應(yīng)符合XML格式。為后面測試使用方便,本專利利用N. Broberg等所設(shè)計(jì)的支持Web網(wǎng)頁動(dòng)態(tài)載入的HSP(Haskell ServerPages)單子來統(tǒng)一描述Web服務(wù)的測試用例。例如,Web服務(wù)測試用例類型可統(tǒng)一為HSPXML,其中HSP單子定義如下type HSP = HSPT 10
      即HSP單子是由N. Broberg等所設(shè)計(jì)的單子轉(zhuǎn)換器HSPT和基本的輸入輸出單子10組合而成。HSP單子轉(zhuǎn)換器致力于以高抽象形式生成和處理XML文檔,屏蔽XML語言格式與其他語言間的異構(gòu)性,從而增加其互操作性,使其能方便嵌入到其他語言(如JavaScript、Haskell.HTML等)模塊中。為方便起見,這里直接采用HSP模塊中所定義的簡單有效的XML文檔表示類型,即
      data XML = Element Name Attributes Children | CDATA StringHSP工程項(xiàng)目中的HSX (Haskell Source with XML)模塊即通過單子轉(zhuǎn)換器HSPT將標(biāo)準(zhǔn)的XML語法格式嵌入到Haskell開發(fā)語言中,從而可自由地在Haskell開發(fā)源碼中直接使用XML語法。例如,借助于HSP單子和HSX語法,可寫出如下簡潔且可讀性很強(qiáng)的Web服務(wù)測試用例生成函數(shù)
      makeTC—getOffesetUTCTime :: Double — HSP XML makeTC—getOffesetUTCTime offeset =
      〈soap:Envelope xmlns:soap=soapURI xmlns:xsd=xsdURI>
      <soap:Body>
      〈getOffesetUTCTime xmlns=operURL>
      <hoursOffset> <% show offeset %> </hoursOffset>
      </getOffesetUTCTime〉
      </soap:Body>
      </soap: Envelope)where
      soapURI = "http://schemas.xmlsoap.org/soap/envelope/"xsdURI = "http://www.w3.org/2001/XMLSchema"operURL = 〃http://www. Nanonull· com/TimeService/〃
      該 makeTC—getOffesetUTCTime 函數(shù)可用來生成 Web 服務(wù) TimeService 中g(shù)etOffesetUTCTime子服務(wù)的測試用例,其輸入?yún)?shù)類型Double為getOffesetUTCTime服務(wù)的輸入?yún)?shù)housOffset的類型。HSP單子提供了一種抽象封裝機(jī)制,可讓XML表達(dá)式在其中進(jìn)行安全運(yùn)算,同時(shí)為其他操作(如上面的Haskell代碼嵌入)提供接口(用一對標(biāo)記符號“〈%”和“%>”分開)。所以上述函數(shù)代碼整體像一段普通的XML格式文檔,除了由“〈%”和“%>”分開的Haskell代碼片斷“show offeset”,其中show函數(shù)將Double類型轉(zhuǎn)換成可顯示的String類型。此外HSP單子中還允許String類型變量直接嵌入到XML語法片斷中,如上述的xsdURI和operURL變量。—般地,對于類型為Input — Output的服務(wù)操作sarK,可根據(jù)其Input類型生成相應(yīng)的測試用例,并借助于HSP單子進(jìn)行表示,即
      makeTC—serv :: Input 一 HSP XML
      2.測試用例的自動(dòng)生成
      Web服務(wù)的調(diào)用運(yùn)行是通過簡單對象訪問協(xié)議(SOAP)通信的。SOAP協(xié)議允許應(yīng)用程序通過HTTP進(jìn)行信息交換,它也是基于XML格式的。本專利主要從用戶角度進(jìn)行Web服務(wù)的功能測試,故這里的Web服務(wù)測試用例一般指一個(gè)SOAP消息。SOAP消息常包含<envelope>、〈header>、〈body> 和〈fault〉等主要兀素,其中〈envelope〉和〈body〉是必須的。若想調(diào)用某個(gè)已發(fā)布的服務(wù),用戶必須向服務(wù)器發(fā)送SOAP消息請求,其SOAP消息包含該服務(wù)的操作名和操作所需參數(shù)值等信息。SOAP消息可以通過分析對應(yīng)服務(wù)的WSDL文檔而自動(dòng)生成,通過從WSDL文檔生成SOAP消息中兩必須元素〈envelope〉和〈body〉的方法。其中〈envelope〉元素的屬性值可由WSDL中Schema元素的命名空間屬性直接獲得;〈body>元素的子結(jié)構(gòu)主要由對應(yīng)的服務(wù)操作名及其相應(yīng)的類型結(jié)構(gòu)信息組成。所以Web服務(wù)測試用例自動(dòng)生成函數(shù)的主體部分應(yīng)該是解決如何自動(dòng)生成與服務(wù)輸入類型所對應(yīng)結(jié)構(gòu)的XML片段。其主要有3個(gè)步驟
      步驟I我們首先通過解析WSDL文檔將Schema中類型表示成如下的TestData類型,并用如下的映射表(哈希表)XsdTable表示最終的Schema所有類型信息。
      type XsdTable = Map String TestData data TestData = SimpleData BaseType
      I EnumData [String]
      I ListData [TestData]
      I ArrayStruct (Int,Int) (String,TestData)
      I StructData [ (String, TestData)]
      I ChoiceData [TestData]
      data BaseType = String | Boolean | Decimal | Float | DoubleI Time I Date | Int | Byte | UserDefType其中BaseType類型除了包含XSD Schema基本簡單類型(如Double、Int、String等),還允許用戶自定義簡單類型UserDefType以便生成符合特殊要求的測試用例數(shù)據(jù)。步驟2根據(jù)上述的Schema信息表以及前面所提及的HSP單子技術(shù)(尤其是HSX方法),我們可很方便地給出如下函數(shù)testDataToXml,由此可將一個(gè)服務(wù)的輸入類型生成相應(yīng)的XML結(jié)構(gòu)文檔
      testDataToXml :: XsdTable — TestData — [HSP XML]
      其返回類型為HSP XML列表,這是為了匹配諸如列表和數(shù)組等類型所對應(yīng)生成的XML元素集。在算法中,generate和arbitrary為QuickCheck的Gen單子中隨機(jī)產(chǎn)生相應(yīng)類型值的函數(shù),arbitrary是由Gen單子統(tǒng)一描述的某個(gè)類型值隨機(jī)生成器,generate根據(jù)某個(gè)生成器產(chǎn)生一個(gè)具體值;cdata和“〈〈”為HSP的HSX模塊中XML構(gòu)造函數(shù),cdata將任意字符轉(zhuǎn)換成XML中字符,“〈〈”同時(shí)向一個(gè)XML元素中并列地添加多個(gè)子元素。例如,當(dāng)e 是 Schema 基本類型 e。,則令 v=generate (arbitrary: :Gen e0);testDataToXml(t,e) = {cdata(show v)}
      步驟3根據(jù)testDataToXml算法以及xsdTable類型信息表,可給出如下函數(shù)makeTestCase來為某個(gè)服務(wù)操作自動(dòng)生成相應(yīng)的測試用例makeTestCase :: String 一 TestData 一 HSP XMLmakeTestCase opName opInputType =
      <soapEnv:Enve lope xmlns:soapEnv = 〃http://schemas, xml soap, org/soap/envelope/^ />
      <:(<soapEnv:Body/> <: ( <opName/> <<:
      <% testDataToXml xsdTable opInputType
      %>
      )
      ) 其中xsdTable為從WSDL中解析獲取的Schema類型信息表,opInputType為服務(wù)操作名;函數(shù)“〈”是向XML元素中添加子元素。Web服務(wù)測試的運(yùn)行
      SOAP消息的一種簡單傳輸過程為先將SOAP消息封裝成一個(gè)HTTP包,然后將之發(fā)送給服務(wù)端,服務(wù)端對HTTP包中的SOAP消息進(jìn)行解析并返回調(diào)用服務(wù)的結(jié)果。本專利利用下面兩個(gè)函數(shù)分別進(jìn)行SOAP消息的Socket包封裝和將其發(fā)送到服務(wù)器并從返回結(jié)果中抽取相關(guān)信息
      soapRequest :: HSP XML — SoapAction — URL — HTTP XML getResult :: HTTP XML — IO (Bool, String)
      其中SoapAction和URL類型一般是字符型的,分別表示SOAP協(xié)議中的SOAPAction頭和所需服務(wù)服務(wù)器的地址。函 數(shù)soapRequest將在Web服務(wù)測試用例(SOAP消息)之上加載相關(guān)HTTP包頭信息(如SOAPAction頭、包文長度、發(fā)送地址等),可直接接受HSP XML,以便該函數(shù)可融入測試單子框架中;getReSult函數(shù)按照HTTP協(xié)議發(fā)送Socket包,并返回服務(wù)器反饋的信息,包括訪問是否成功和解析Socket包獲取反饋正文相關(guān)內(nèi)容等。組合上述兩個(gè)函數(shù)可得如下soapCall函數(shù),以便進(jìn)行Web服務(wù)的調(diào)用
      soapCall :: HSP XML — SoapAction — URL — IO (Bool, String)soapCall = getResult . soapRequest
      根據(jù)上述Web測試用例生成函數(shù)makeTC—getOffesetUTCTime和上述服務(wù)調(diào)用函數(shù)soapCall,可寫出如下的服務(wù)自動(dòng)測試描述函數(shù)
      prop—getOffesetUTCTime :: Double — IO Boolprop—getOffesetUTCTime offeset = do
      appendFile "getOffesetUTCTime. xml〃 (showXML soapXml)
      (isOK, result) 一 soapCall soapXml opAction serviceputStrLn $ show offeset ++ 〃 一> 〃 ++ resultreturn isOKwhere
      soapXml = makeTC—getOffesetUTCTime offsetopAction = ^http://www. Nanonull. com/TimeService/getOffesetUTCTime^
      service = ^http://www. Nanonull. com/TimeService/TimeService.
      asmx〃
      其中showXML函數(shù)將HSP單子下的XML文檔轉(zhuǎn)換成String型以便存儲到文件,appendFile和putStrLn函數(shù)分別為文件形式保存所有生成的測試用例和輸出服務(wù)調(diào)用后反饋的相關(guān)結(jié)果。上述prop_getOffesetUTCTime函數(shù)可直接作為Gen單子中接口函數(shù)QuickCheck的輸入,從而可進(jìn)行Web服務(wù)自動(dòng)測試。QuickCheck函數(shù)根據(jù)參數(shù)中所含生成器(Gen單子描述的)隨機(jī)產(chǎn)生若干(默認(rèn)100個(gè))數(shù)據(jù)進(jìn)行測試,其中若某次測試結(jié)果為False就停止并輸出導(dǎo)致測試失敗的數(shù)據(jù)。此外,如果QuickCheck輸入?yún)?shù)也是個(gè)函數(shù)f,則QuickCheck先利用Gen單子給出f參數(shù)類型的生成器,再進(jìn)行批量測試。為自動(dòng)產(chǎn)生數(shù)據(jù)生成器方便,Gen單子模塊中還給出如下的Arbitrary類
      class Arbitrary a where arbitrary :: Gen a
      Gen單子中默認(rèn)將常見的基本類型(如String,Double, Bool, Int等)以及元組、函數(shù)等復(fù)合類型聲明為Arbitrary類實(shí)例,即給出了這些類型的數(shù)據(jù)生成器。用戶也可以根據(jù)需要重新設(shè)計(jì)這些數(shù)據(jù)生成器,并且可輔助使用Gen單子中所提供的生成器產(chǎn)生函數(shù)(如oneof、elements 和 suchThat 等)。例如,對于上述 TimeService 服務(wù)中 getTimeZoneTime和getCityTime操作,QuickCheck雖然都通過了所有測試用例,但反饋結(jié)果分別幾乎都是“Unknown Time zone”和“Unknown City”。這是因?yàn)檫@兩個(gè)服務(wù)操作輸入?yún)?shù)類型都是String型,而Gen模塊中String型數(shù)據(jù)生成器默認(rèn)是由若干字母隨機(jī)組合產(chǎn)生,顯然幾乎不是有效的TimeZone和City名字。為此我們可以設(shè)計(jì)如下的用戶自定義類型及其數(shù)據(jù)生成器,這可保證所有測試用例的返回結(jié)果都有實(shí)際意義newtype CityName = CityName Stringinstance Arbitrary CityName wherearbitrary = elements $ map CityName[〃Boston〃,〃London〃,〃Vienna〃,〃Tokyo〃]newtype TimeZone = TimeZone Stringinstance Arbitrary TimeZone wherearbitrary = elements $ map TimeZone[〃EST〃,〃CST〃,〃MST〃,〃PST〃,〃UTC+2〃,〃GM
      T"]
      其中elements :: [a] Gen a是根據(jù)某個(gè)列表構(gòu)造一個(gè)生成器,其產(chǎn)生的數(shù)據(jù)都來源 于該列表中元素。類似上述的Arbitrary類實(shí)例聲明,可方便調(diào)整測試數(shù)據(jù)生成器以滿足WSDL描述中字符串?dāng)?shù)據(jù)類型的相關(guān)約束(如enumeration、length、maxLength和minLength等),以及數(shù)值型數(shù)據(jù)類型相關(guān)約束(如 enumeration、maxInclusive、minInclusive、maxExclusive和 minExclusive 等)等。例如,可在Gen默認(rèn)的String型生成器基礎(chǔ)上寫出如下的字符串生成器myStringGen :: Gen String
      myStringGen = suchThat arbitrary guard
      where guard a = isAlpha (head a) && (length a > 2) && (length a < 6))&& (notElem ‘Γ a ) | | elem a [ “A10”,”BIO”,”clO”]
      生成器myStringGen將只隨機(jī)產(chǎn)生列表[“A10”,” BIO”,” clO” ]中一個(gè),或者首字符為字母、長度在2和6之間、不含“/”的字符串。其中suchThat為生成器輔助構(gòu)造函數(shù);arbitrary為多態(tài)函數(shù),在這里其類型為Gen String。除了 Gen單子外,QuickCheck還提供了一些測試屬性函數(shù)的組合描述方法,如條件約束函數(shù)“==>”、測試數(shù)據(jù)分類“classify”與統(tǒng)計(jì)“collect”等函數(shù),這些可輔助我們Web服務(wù)測試用例生成與分析。
      權(quán)利要求
      1.一種基于單子技術(shù)的Web服務(wù)測試數(shù)據(jù)自動(dòng)生成方法,其特征在于該方法能自動(dòng)生成基于互聯(lián)網(wǎng)Web服務(wù)所需要的某些特定輸入類型的測試用例,該方法包含的步驟如下 I )ffeb服務(wù)描述文檔WSDL的解析解析WSDL,簡單對象訪問協(xié)議SOAP消息中兩個(gè)必要兀素〈envelope〉和〈body〉;其中〈envelope〉兀素的屬性值由WSDL中Schema兀素的命名空間屬性直接獲得,其中Schema負(fù)責(zé)定義和描述文檔的結(jié)構(gòu)和內(nèi)容模式,這里的文檔XML是一種元標(biāo)記語言,用來描述數(shù)據(jù)的;〈body>元素的子結(jié)構(gòu)主要由對應(yīng)的服務(wù)操作名及其相應(yīng)的類型結(jié)構(gòu)信息組成; 2)服務(wù)類型信息的獲取解析WSDL文檔,從其中的Schema元素中收集服務(wù)的類型描述信息,并表示成測試數(shù)據(jù)TestData類型,再用哈希表XsdTable表示最終的Schema所有類型信息;其中除了包含基本簡單類型外,還允許用戶自定義簡單類型,以便生成符合特殊要求的測試用例數(shù)據(jù); 3)構(gòu)造與服務(wù)輸入類型相應(yīng)的XML文檔根據(jù)上述的Schema信息表以及哈斯卡服務(wù)頁面單子HSP,給出函數(shù)testDataToXml,通過此函數(shù)能從一個(gè)服務(wù)的輸入類型生成相應(yīng)的XML結(jié)構(gòu)文檔; 4)自動(dòng)生成相應(yīng)的測試用例根據(jù)類型信息,輸入類型的XML文檔和服務(wù)操作名以及從Schema中獲取的〈envelope〉元素的屬性值,給出函數(shù)makeTestCsae來為某個(gè)服務(wù)操作自動(dòng)生成相應(yīng)的測試用例,并根據(jù)WSDL中服務(wù)輸入類型進(jìn)行預(yù)期返回結(jié)果,自動(dòng)生成XML框架; 5)SOAP消息的封裝在Web服務(wù)測試用例之上加載相關(guān)的超文本傳輸協(xié)議HTTP的包頭信息,其中包括服務(wù)請求地址SOAPAction頭、包頭長度、發(fā)送地址,之后將其封裝成一個(gè)HTTP包,然后將之發(fā)送給服務(wù)端; 6)S0AP消息的解析服務(wù)端對HTTP包中的SOAP消息進(jìn)行解析并返回調(diào)用服務(wù)器的反饋信息,包括訪問是否成功和解析Socket包,其中Socket包中包含服務(wù)請求地址信息和發(fā)送地址信息,并獲取反饋消息的相關(guān)內(nèi)容; 7)生成服務(wù)自動(dòng)測試描述函數(shù)根據(jù)服務(wù)調(diào)用函數(shù)soapCall,加入能把所生成的測試用例以文件的形式保存的appendFile函數(shù)和能輸出服務(wù)調(diào)用后反饋的相關(guān)結(jié)構(gòu)的PutstrLn函數(shù),最終得到服務(wù)自動(dòng)測試描述函數(shù); 8)Web服務(wù)自動(dòng)測試的運(yùn)行將服務(wù)自動(dòng)測試描述函數(shù)直接作為能隨機(jī)產(chǎn)生相應(yīng)類型值的Gen單子中接口函數(shù)QuickCheck的輸入,從而可進(jìn)行Web服務(wù)自動(dòng)測試; 9)特殊服務(wù)類型數(shù)據(jù)的生成接口函數(shù)QuickCheck根據(jù)參數(shù)中所含的生成器,隨機(jī)生成若干數(shù)據(jù)進(jìn)行測試;此外,如果QuickCheck函數(shù)輸入?yún)?shù)是個(gè)函數(shù)f,則QuickCheck函數(shù)先利用Gen單子給出f參數(shù)類型的生成器,再進(jìn)行批量測試;客戶也可以根據(jù)需要重新設(shè)計(jì)這些數(shù)據(jù)生成器,并輔助使用Gen單子中所提供的生成器函數(shù); 10)測試用例類型約束根據(jù)上述Gen單子所提供的類型生成器,通過相應(yīng)的調(diào)整,來使測試數(shù)據(jù)生成器滿足WSDL描述中字符串?dāng)?shù)據(jù)類型,如長度、最大長度、最小長度,以及數(shù)值型數(shù)據(jù)類型相關(guān)約束,即最大范圍、最小范圍; 11)測試屬性函數(shù)的組合描述=QuickCheck函數(shù)最后還提供了一些能將測試屬性函數(shù)組合起來的描述方法,即條件約束函數(shù)、測試數(shù)據(jù)分類與統(tǒng)計(jì)函數(shù),這些函數(shù)能輔助更好地進(jìn)行Web服務(wù)測試用例的生成與分析。
      全文摘要
      一種基于單子技術(shù)的Web服務(wù)測試數(shù)據(jù)自動(dòng)生成方法主要解決Web服務(wù)測試所面臨的動(dòng)態(tài)靈活性和可組合重用性的挑戰(zhàn)。最主要的是測試用例的單子表示、測試用例的自動(dòng)生成和Web服務(wù)測試的運(yùn)行這三個(gè)部分。具體表現(xiàn)為解析WSDL文檔,從其Schema中獲得相關(guān)輸入類型信息,再通過函數(shù)makeTestCase自動(dòng)獲得某個(gè)服務(wù)操作的測試用例,最后將其打包成HTTP包發(fā)送給服務(wù)端,服務(wù)端對HTTP包中的SOAP消息進(jìn)行解析并返回調(diào)用服務(wù)的結(jié)果。經(jīng)大量實(shí)驗(yàn)數(shù)據(jù)檢驗(yàn)證明本專利的技術(shù)1.能根據(jù)WSDL正確發(fā)送SOAP測試消息并獲取返回信息,同時(shí)能自動(dòng)生成其中的測試數(shù)據(jù);2.測試時(shí)間和測試功率方面比以往的技術(shù)更具有優(yōu)勢。
      文檔編號H04L12/26GK102710460SQ20121014799
      公開日2012年10月3日 申請日期2012年5月14日 優(yōu)先權(quán)日2012年5月14日
      發(fā)明者周國強(qiáng), 張衛(wèi)豐, 張迎周, 王參參, 符煒, 鄒德國, 陳麗潔, 顧帥帥 申請人:南京郵電大學(xué)
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1