亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種Web服務(wù)測試用例自動生成方法

文檔序號:6623328閱讀:262來源:國知局
一種Web服務(wù)測試用例自動生成方法
【專利摘要】一種Web服務(wù)測試用例自動生成方法,基于文檔解析及約束求解自動生成測試用例,包括Web服務(wù)文檔解析、Web服務(wù)約束條件提取和Web服務(wù)測試用例自動化生成三部分,自動化生成SOAP消息表示的測試用例,即為Web服務(wù)的測試用例。本發(fā)明在Web服務(wù)測試用例的自動生成過程中,通過提取WSDL、BPEL文檔中的約束條件,并運用約束求解方法,根據(jù)這些約束條件自動化生成測試用例,從而減少測試用例的冗余度,提高覆蓋率,提高Web服務(wù)測試的效率。
【專利說明】一種Web服務(wù)測試用例自動生成方法

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于軟件工程分析測試【技術(shù)領(lǐng)域】,使用文檔解析及約束求解方法,用于自 動化生成Web服務(wù)測試用例,為一種新的Web服務(wù)測試用例自動生成方法。

【背景技術(shù)】
[0002] 網(wǎng)絡(luò)技術(shù)的高速發(fā)展使得面向服務(wù)的體系結(jié)構(gòu)(S0A)得到了學術(shù)界以及工業(yè)界 的廣泛認可。S0A是構(gòu)造分布式計算應(yīng)用程序的方法,它將應(yīng)用程序功能作為服務(wù)發(fā)送給 最終用戶或者其他服務(wù),從而實現(xiàn)分布式應(yīng)用的低成本快速開發(fā)。Web服務(wù)通過使用開放 的XML標準描述、發(fā)布、發(fā)現(xiàn)、協(xié)調(diào)和配置應(yīng)用程序,建立一個可互操作的分布式應(yīng)用程序 平臺,使得不同開發(fā)語言、部署平臺等系統(tǒng)之間能夠進行交互、組合,形成一個功能豐富的 服務(wù)流程,以滿足用戶的需求。
[0003] 為了保證Web服務(wù)的正確性和可靠性,需要測試人員設(shè)計測試用例對Web服務(wù)進 行測試,從而保障軟件質(zhì)量。Web服務(wù)提供商通常對外只提供了服務(wù)接口的描述性文檔,如 Web服務(wù)器描述語言(WSDL)文檔、業(yè)務(wù)流程執(zhí)行語言(BPEL)文檔等,測試人員無法獲取各 個Web服務(wù)的源代碼,因此只能結(jié)合描述文檔對Web服務(wù)進行黑盒測試。當前對Web服務(wù) 進行測試的方法主要有:擴展WSDL文檔,通過增加 WSDL中變量的屬性信息以增加運行時約 束信息,但由于此種方法只對變量屬性信息以及接口操作進行分析,并基于此產(chǎn)生相應(yīng)的 測試用例,在對Web服務(wù)組合進行測試時,未能結(jié)合程序執(zhí)行流程中的種種約束條件,造成 測試用例的冗余度較高,且覆蓋率低;利用語義網(wǎng)挖掘Web服務(wù)中的語義信息,從而指導生 成測試用例,但由于語義網(wǎng)尚未普及,在實際應(yīng)用中收效甚微。
[0004] 當前存在的Web服務(wù)測試工具有SoapUI、Selenium等。SoapUI基于對WSDL解 析,并結(jié)合用戶輸入,生成測試用例,需要人工干預;Selenium使用用戶操作行為的錄制回 放生成測試用例,缺乏靈活性。另外,這些測試工具無法保證測試的充分性,且生成的測試 用例冗余度較高、測試效率低。
[0005] WSDL、BPEL等文檔中通常包含大量Web服務(wù)中的約束條件,而這些約束條件當前 主要用于服務(wù)匹配等方面,沒有被充分應(yīng)用于Web服務(wù)測試中。


【發(fā)明內(nèi)容】

[0006] 本發(fā)明要解決的問題是:1)如何對Web服務(wù)提供的文檔進行解析;2)如何處理 BPEL中定義的多種活動類型,并自動生成包含變量及業(yè)務(wù)執(zhí)行流程等信息的約束條件;
[0007] 3)如何利用Z3_str求解器自動生成測試用例。
[0008] 本發(fā)明的技術(shù)方案為:一種Web服務(wù)測試用例自動生成方法,基于文檔解析及約 束求解自動生成測試用例,包括Web服務(wù)文檔解析、Web服務(wù)約束條件提取和Web服務(wù)測試 用例自動化生成三部分:
[0009] 1) Web服務(wù)文檔解析過程,包括對WSDL文檔和BPEL文檔的解析,在對WSDL文檔 進行解析時,得到D0M樹,遍歷D0M樹,得到WSDL文檔中定義的所有變量的屬性信息;在對 BPEL文檔進行解析時,得到DOM樹,遍歷DOM樹的節(jié)點,分別得到BPEL文檔中的變量的取值 和屬性信息以及活動節(jié)點的取值和屬性信息;
[0010] 2)根據(jù)BPEL文檔中定義的命名空間對應(yīng)關(guān)系,取得BPEL文檔中的變量在對應(yīng)的 WSDL文檔中的變量的屬性信息,由WSDL文檔的變量屬性信息解析得到變量約束條件,所述 變量約束條件包括變量的類型和取值范圍;
[0011] 3)根據(jù)解析BPEL文檔得到業(yè)務(wù)執(zhí)行流程信息,提取出業(yè)務(wù)執(zhí)行流程中服務(wù)調(diào)用、 變量賦值的關(guān)系,對業(yè)務(wù)執(zhí)行流程進行化簡,得到只包含活動類型、服務(wù)調(diào)用和變量賦值關(guān) 系的業(yè)務(wù)執(zhí)行流程中間文件,同時,根據(jù)業(yè)務(wù)執(zhí)行流程開始和結(jié)束活動以及業(yè)務(wù)執(zhí)行流程 中調(diào)用其他服務(wù)時調(diào)用的變量名,即可得到該Web服務(wù)的輸入、輸出變量名;
[0012] 4)利用靜態(tài)單賦值形式對BPEL文檔中的變量進行重命名,使得對每個變量的賦 值操作最多進行一次;
[0013] 5)利用模型檢查方法,根據(jù)BPEL文檔中不同的活動類型,將業(yè)務(wù)執(zhí)行流程改寫為 使用語句if、assignment、assertions以及邏輯運算符表示,并使用規(guī)范化算法將改寫后 的業(yè)務(wù)執(zhí)行流程中間文件規(guī)范化表示為條件范式;所述規(guī)范化算法如下:
[0014] P、P1、P2均為輸入到算法中進行處理的程序片段
[0015] G、c均為if語句中條件判斷語句,這里G = true
[0016] procedure NORMALISE(P, G)
[0017] if P是一個賦值語句或判斷語句then
[0018] return if (G) P ;
[0019] else if P = (if (c) PI ;) then
[0020] return NORMALISE(PI, c&&G);
[0021] else if P = (if(c)Pl ;else P2) then
[0022] return NORMALISE (PI, c&&G) NORMALISE (P2, ( ! c)&&G);
[0023] else if P = (PI ;P2) then
[0024] return NORMALISE (PI, G) NORMALISE (P2, G);
[0025] end if
[0026] end procedure
[0027] 6)根據(jù)步驟2)-5)中提取的變量約束條件、條件范式以及Z3_str求解器對所輸入 文檔的語法要求,生成符合Z3-str求解器輸入文檔格式要求的約束條件;
[0028] 7)將步驟6)中生成的約束條件代入Z3_str求解器,得到可行解空間及變量取值, Z3-str求解器的輸入文件是步驟6)得到的約束條件,輸出內(nèi)容為滿足約束條件的可行解 空間;如果對變量的所有取值,都不能滿足約束條件,則輸入"UNSAT",表示約束條件無解; 對于可行解空間,結(jié)合Web服務(wù)文檔解析得到的Web服務(wù)輸入、輸出變量名,即可獲得Web 服務(wù)輸入、輸出變量的取值,即為測試用例中輸入、輸出變量的取值;根據(jù)輸入和輸出變量 名及其取值,結(jié)合SOAP協(xié)議的定義,自動化生成SOAP消息表示的測試用例,即為Web服務(wù) 的測試用例。
[0029] 其中,Web服務(wù)文檔解析對應(yīng)步驟1),Web服務(wù)約束條件提取對應(yīng)步驟2) -6),Web 服務(wù)測試用例自動化生對應(yīng)步驟7)。
[0030] 本發(fā)明通過采用以上技術(shù)方案,具有以下優(yōu)點:
[0031] 1.客觀:測試用例的自動生成主要依賴于從Web服務(wù)提供的文檔中所提取的約束 條件,而不是測試人員根據(jù)經(jīng)驗主觀得出的測試用例,使得生成的測試用例內(nèi)容更加豐富、 客觀;
[0032] 2.覆蓋率高:通過解析BPEL文檔,可以得到Web服務(wù)所有執(zhí)行流程,據(jù)此生成的 測試用例能夠完全覆蓋執(zhí)行流程,具有覆蓋率高的特點;
[0033] 3.冗余度低:從Web服務(wù)提供的文檔中提取約束條件后,將約束條件代入約束求 解器,得到相應(yīng)的解空間。根據(jù)輸入?yún)?shù)及其解空間自動生成的測試用例有較強的針對性, 冗余度較低;
[0034] 4.高效:通過快速分析Web服務(wù)中提供的文檔,自動化生成高覆蓋率、低冗余度的 測試用例,可以讓測試人員快速對Web服務(wù)進行測試,提高測試效率。

【專利附圖】

【附圖說明】
[0035] 圖1為本發(fā)明的結(jié)構(gòu)流程圖。
[0036] 圖2為本發(fā)明方法中BPEL文檔中if語句規(guī)范化轉(zhuǎn)換示例。
[0037] 圖3為本發(fā)明的規(guī)范化算法。
[0038] 圖4為本發(fā)明的文檔格式轉(zhuǎn)換關(guān)系圖。
[0039] 圖5為本發(fā)明Web服務(wù)測試用例示例。

【具體實施方式】
[0040] 本發(fā)明提供一種基于文檔解析及約束求解的Web服務(wù)測試用例自動生成方法,用 于將Web服務(wù)提供的文檔中包含的約束條件用于測試用例的自動化生成中,從而降低測試 用例的冗余度,提高覆蓋率。
[0041] 本發(fā)明的整體框架圖如圖1所示,包括Web服務(wù)文檔解析、Web服務(wù)約束條件提取 和Web服務(wù)測試用例自動化生成三部分:Web服務(wù)相關(guān)文檔解析用于將Web服務(wù)提供的文 檔轉(zhuǎn)變?yōu)镈0M樹,從而獲取變量的屬性信息及Web服務(wù)業(yè)務(wù)執(zhí)行流程;Web服務(wù)約束條件提 取將業(yè)務(wù)執(zhí)行流程轉(zhuǎn)化為條件范式,并根據(jù)Z3-str的語法要求生成包含有變量及業(yè)務(wù)執(zhí) 行流程等信息的Web服務(wù)約束表達文件;Web服務(wù)測試用例自動化生成部分,根據(jù)輸入的約 束條件得到可行的執(zhí)行路徑及變量取值,再根據(jù)輸入變量的取值范圍及取值對應(yīng)的求解結(jié) 果,結(jié)合SOAP協(xié)議的定義,自動化生成SOAP消息,即為Web服務(wù)中的測試用例。
[0042] (1) Web服務(wù)文檔解析
[0043] 如圖1中文檔解析部分所示,首先需要分別對Web服務(wù)提供商提供的WSDL文檔和 BPEL文檔進行解析。
[0044] 在WSDL解析階段,使用開源工具WSDL4J將WSDL解析為D0M樹,然后分別提取<t ypes>,〈message〉,〈portType〉,〈binding〉,〈service〉等標簽信息。為 了提取 WSDL 中的 變量約束信息,需要提取〈message〉標簽信息以獲取〈message〉中包含的〈part〉子標簽 信息,用于在BPEL中查找對應(yīng)變量約束。在獲取〈types〉標簽信息時,根據(jù)〈types〉中 〈element〉的子標簽是否為〈complexType〉,自動將變量劃分為簡單變量類型和復雜變量 類型。對于簡單變量類型,可以直接獲取變量的名字(name),類型(type)等屬性值;對于復 雜變量類型,由于工具WSDL4J中沒有對復雜類型進行處理的函數(shù),需要自己定義函數(shù)對復 雜變量類型進行解析:〈element>標簽是〈types〉中定義的變量,如果〈element〉的子標簽 為〈complexType〉,說明該〈element〉標簽為復雜變量類型,需要繼續(xù)獲取〈complexType〉 的子標簽,并遞歸解析該子標簽中的變量,最終得到復雜變量類型中包含變量的詳細定義。 這里由于子標簽可能還是復雜變量類型,因此需要迭代獲取其子標簽,最終得到該復雜變 量類型中包含的所有簡單變量的name, type等屬性取值。
[0045] 在BPEL的解析階段,需要解析得到BPEL中定義的變量、活動等節(jié)點信息,為下一 階段提取變量取值及屬性、活動順序等約束條件做準備。例如對于〈variable〉節(jié)點,需要 解析得到屬性messageType的取值,才能找到該〈variable〉節(jié)點定義的變量名,查找過程 在后面描述所述;對于提取的活動節(jié)點的屬性信息,主要用于得到該活動節(jié)點中涉及的變 量信息,以及獲取活動順序。
[0046] 先將BPEL解析為D0M樹,由BPEL Version2. 0的定義可知,BPEL的根節(jié)點為 〈process〉,〈process〉的子節(jié)點包括〈extensions〉,〈import〉,<partnerLinks>,〈variabl es>, <messageExchanges>, <correlationSets>, <faultHandlers>, <eventHandlers> 以及 業(yè)務(wù)執(zhí)行活動等標簽。
[0047] BPEL中的〈variables〉標簽僅用于變量的聲明,需要根據(jù)〈variable〉命名空間 找到對應(yīng)的WSDL文檔并獲取該變量的詳細信息。該步驟的具體過程為:從〈variable〉標 簽的消息類型(messageType)屬性信息中獲取該變量對應(yīng)的命名空間,通過命名空間查 找到WSDL中的〈message〉類型定義,然后根據(jù)〈message〉中的〈part〉子標簽,可得到該 〈message〉傳遞的變量名,然后根據(jù)WSDL文檔解析即可獲得該變量的詳細信息。由此,可以 得到BPEL中使用的變量的類型等約束條件。
[0048] 另外,在BPEL的解析階段,還需要提取業(yè)務(wù)執(zhí)行流程,具體的過程為:找到根節(jié)點 〈process〉的所有子節(jié)點,然后根據(jù)〈process〉的所有子節(jié)點名,即可查找到該BPEL中定義 的業(yè)務(wù)執(zhí)行流程子節(jié)點。
[0049] (2)約束條件提取
[0050] 本階段需要對業(yè)務(wù)執(zhí)行流程進行簡化,得到需要的流程信息。由BPEL Version〗.0 的定義可知活動類型包括〈receive〉,〈reply〉,〈invoke〉,〈assign〉,〈sequence〉,<if>, <w hile>,<repeatUntil>, <forEach>,<pick>, <flow>, <scope>, <throw>, <exit>, <wait>, <e mpty>,〈compensate〉,<compensateScope>,〈rethrow〉,〈validate〉,<extensionActivity> 等,其中 <throw>, <exit>, <wait>, <empty>,〈compensate〉,<compensateScope>,〈rethrow〉 ,〈validate〉,〈extensionActivity〉等活動主要用于拋出異常、結(jié)束業(yè)務(wù)執(zhí)行流程、等待、 數(shù)據(jù)驗證等特殊情況,本發(fā)明不予考慮。
[0051] 在對業(yè)務(wù)執(zhí)行流程進行處理時,主要目標是提取業(yè)務(wù)執(zhí)行流程以及活動中變量的 賦值關(guān)系。根據(jù)業(yè)務(wù)執(zhí)行流程、活動類型、變量的賦值關(guān)系以及從WSDL中提取的變量約束 條件,自動化生成XML文檔用以保存簡化的BPEL。其中在處理賦值語句時,需要轉(zhuǎn)化為靜 態(tài)單賦值形式(static single assignment form, SSA),使得每個變量名在SSA中僅被賦 值1次。重命名的過程如下所述:設(shè)v為BPEL文檔中的變量,i為變量在BPEL文檔中的位 置,設(shè)a (v,i)為BPEL文檔中i位置的v之前被賦值的次數(shù)。設(shè)e為BPEL文檔,P (e)表 示e中所有變量v被va (v;i)替換后對應(yīng)的BPEL文檔形式,則對于一個賦值表達式:x = e, 轉(zhuǎn)變成SSA形式為:xa(x,i)+1 = p (e)。對于數(shù)組操作,若表達式為:a[ej = e2,轉(zhuǎn)變成SSA 形式為 (ej] = p (e2)。
[0052] 然后利用限界模型檢查(Bounded Model Checking)中的方法,根據(jù)不同的活動類 型對業(yè)務(wù)執(zhí)行流程進行改寫,使得業(yè)務(wù)執(zhí)行流程可以使用if, assignment, assertions等 語句以及邏輯運算符表示。對改寫后的結(jié)果需要使用算法將其規(guī)范化,圖3為規(guī)范化算法 的實現(xiàn)。根據(jù)業(yè)務(wù)執(zhí)行流程中的活動分類情況,結(jié)合限界模型檢查理論,設(shè)定改寫規(guī)則如 下,用于描述如何對活動進行改寫:
[0053] 〈receive〉活動用于接收匹配的〈message〉信息,從而獲取輸入?yún)?shù),該活動為基 本活動,可直接使用賦值表達式將輸入?yún)?shù)賦值給相應(yīng)的變量;
[0054] 〈reply〉活動用于發(fā)送〈message〉信息,從而輸出活動參數(shù),該活動為基本活動, 可直接使用賦值表達式將輸出變量的值賦值給輸出參數(shù);
[0055] 〈invoke〉活動用于調(diào)用〈partnerLink〉中定義的其它Web服務(wù)。由于測試人員只 能根據(jù)portType獲取對應(yīng)的接口說明,無法獲取將要調(diào)用的Web服務(wù)的源代碼,因此無法 獲取被調(diào)用的Web服務(wù)中的約束條件,只能使用BPEL內(nèi)置函數(shù)getVariableData ()來獲取 調(diào)用Web服務(wù)后的參數(shù)值,并將得到的值賦值給相應(yīng)的參數(shù);
[0056] 〈assign〉活動用于對BPEL活動調(diào)用的變量賦值。該活動通常包括多于1個的 〈copy〉子標簽,用于指明賦值操作的對象,在獲取賦值對象后,即可得到〈assign〉活動的 賦值表達式;
[0057] 〈sequence〉活動定義了 BPEL中一個順序執(zhí)行的活動集合。對于一個 〈sequence>〈Al/XA2/XA3/X/sequence>活動,各個子活動之間是順序執(zhí)行的關(guān)系,因此 其條件范式為:A1 ;A2 ;A3 ;
[0058] <if>活動定義了 BPEL中一個選擇執(zhí)行的活動類型,本身即使用if語句。對于 <if>活動示例,使用圖3所示規(guī)范化算法將其規(guī)范化,圖2展示了將<if>活動進行改寫的 過程:圖2中左側(cè)方框中的代碼為BPEL文檔中<if>活動的表達形式,該示例活動定義了三 種活動情況(A1,A2,A3);由BPEL文檔的定義要求可知,活動A2,A3為活動A1的兄弟節(jié)點的 子節(jié)點,將<if>活動改寫為中間方框中的代碼,改寫規(guī)則為:通過遞歸的方式將多個活動 最終表示為兩個活動之間的選擇,例如,為將Al,A2兩個活動的<if>活動改寫為中間表達 形式使之能夠代入圖3所示規(guī)范化算法,需要將其改寫為〈if>〈 C>〈Al>〈/if>〈else>〈A2>〈/ else〉的形式,其中c為if活動的條件判斷語句,Al、A2均為輸入到算法中進行處理的程 序片段,如果<if>活動中包含多于兩個的活動主體,需要將后兩個活動(A2, A3)先表示為 〈if>〈cXA2X/if>〈elseXA3X/ else>的形式,并將其作為新的活動A2'與前一個活動A1 表示為〈if>〈cXAlX/ifXelseXA2' X/else>的形式,對于多個活動依此類推,有后向前 遞歸直到第一個活動為止;對于中間方框中的代碼,結(jié)合圖3所示規(guī)范化算法,即可將其轉(zhuǎn) 化為右側(cè)方框中的代碼,即<if>活動的條件范式;
[0059] 〈while〉活動定義了 BPEL中一個循環(huán)操作。對于一個 <while>〈condition/>〈activity/>〈/while> 活動,由于 while (e) {1} - if(e) {I while (e) {1}}成立,因此將〈while〉活動轉(zhuǎn)變?yōu)椋?br> [0060] <if> 〈condition/'〉 <aclivity/> <whilc> 〈condition/〉 <aclivity/> </whilc> </if>
[0061] 需要判斷循環(huán)執(zhí)行的次數(shù),假設(shè)其循環(huán)執(zhí)行N次,則上述轉(zhuǎn)變過程執(zhí)行N次,并且 最后一次循環(huán)被替換為assert (! condition),用以確定循環(huán)條件結(jié)束。如果該assert語 句不成立,說明循環(huán)次數(shù)N較小,使得對循環(huán)的轉(zhuǎn)變失效,此時,需要增大N以確保循環(huán)執(zhí)行 轉(zhuǎn)變的正確性。通過上述轉(zhuǎn)變過程,可以將〈while〉活動轉(zhuǎn)變?yōu)榈葍r的<if>語句進行表示, 然后使用規(guī)范化算法將其規(guī)范化;
[0062] 〈repeatUntil〉活動也用于定義BPEL中一個循環(huán)操作,需要先執(zhí)行活動體,再根 據(jù)條件是否成立來決定是否執(zhí)行下次活動。參照〈while〉活動中的情況,對于一個〈repe atUntil>〈activity/Xcondition/X/repeatUntil> 活動,先將其等價轉(zhuǎn)換為〈while〉活 動:〈activity/>〈while>〈condition/Xactivity/X/while>,然后按照上述對〈while〉活 動的處理方式進行規(guī)范化;
[0063] 〈pick〉活動用于定義BPEL中一個選擇操作,對于活動〈pick>〈Al/XA2/XA3/>〈/ Pick〉,執(zhí)行時只能選取其中一個活動,因此其對應(yīng)的邏輯表達式為: (名Λ Λ ι43) V λ J2 Λ ^3) v (ι41 λ λ沿),對于其中的各個活動,使用規(guī)范化 算法將其規(guī)范化;
[0064] <f low〉活動用于定義BPEL中一個并發(fā)操作,對于活動<f lowXAl/XA2/>〈/ flow〉,可能的活動執(zhí)行次序有:{A1 ;A2},{A2 ;A1},在程序執(zhí)行時,每次只 能有一種活動執(zhí)行次序為真,因此前述〈flow〉活動對應(yīng)的邏輯表達式為: ((Α1 ;Α2)/\(,(Α2;Α1)))ν((Α2;Α1)Λ(,(Α1 ;Α2))),其中活動次序情況即為〈fl〇w> 活動中 包含活動的全排列情況,對于邏輯表達式中的各個活動,使用規(guī)范化算法將其規(guī)范化; [0065] 〈scope〉活動用于在BPEL中定義一個嵌套的業(yè)務(wù)執(zhí)行流程,該活動包含自己的<p artnerLinks〉,〈variables〉,〈activity〉等信息,因此可以將其作為一個獨立的BPEL進行 解析,并使用上述方法獲取其中的約束條件及活動的規(guī)范化表示;
[0066] 〈forEach〉活動用于在BPEL中定義一個循環(huán)活動,該循環(huán)活動的執(zhí)行次數(shù)可以 根據(jù)其子標簽〈startCounterValue〉,〈finalCounterValue〉計算得出,假設(shè)兩者差為N-1, 則循環(huán)執(zhí)行N次;子標簽還可能是〈completionCondition〉,對應(yīng)循環(huán)終止條件。對于 一個〈forEach〉活動,每次循環(huán)執(zhí)行活動為{〈NOT completionCondition>AND〈scope>}, 循環(huán)之間順序連接,執(zhí)行N次,因此其對應(yīng)的規(guī)范化表示為:{〈NOT completionCondition>AND〈scope>} {〈NOT completionCondition>AND〈scope>}…共循環(huán) N 次。
[0067] 通過上述過程處理后,得到的結(jié)果即為BPEL活動信息經(jīng)過模型檢查方法以及規(guī) 范化算法處理后的條件范式,只包含邏輯運算符及if, assignment, assertions等語句。
[0068] 根據(jù)變量取值及屬性對應(yīng)的約束條件以及BPEL活動信息對應(yīng)的條件范式等約束 條件信息,結(jié)合Z3_str求解器的語法要求,即可得到最終的約束條件表達文件。
[0069] (3)利用Z3-str求解器自動化生成測試用例
[0070] Z3 是由微軟研究院開發(fā)的一款 SMT(Satisfiability Modulo Theories)求解 器,可以用來對數(shù)值型、布爾型表達式進行約束求解,在Z34. 1的基礎(chǔ)上,美國普渡大學 YunhuiZheng等人添加了對String型約束條件的處理能力,發(fā)布了 Z3-str求解器。在Web 服務(wù)中,需要同時對String型和非String型數(shù)據(jù)進行推理,因此選取Z3-str作為求解工 具。
[0071] 由WSDL中提取的變量約束條件以及上述經(jīng)過規(guī)范化算法得到的條件范式,需要 結(jié)合Z3-str的語法要求進行轉(zhuǎn)換得到最終的表達形式,才能使用Z3-str對其進行約束求 解。將第(2)步得到的最終的約束條件表達文件代入Z3-str求解器,得到執(zhí)行路徑是否可 行以及對應(yīng)的變量取值;在可行的執(zhí)行路徑中,根據(jù)輸入變量取值、利用求解器得到解空間 中包含預期的程序執(zhí)行結(jié)果。
[0072] Z3_str的輸入文件是對各個變量取值范圍以及邏輯關(guān)系等約束條件的規(guī)范化表 達語句,輸出內(nèi)容為滿足約束條件的變量取值;如果對變量的所有取值,都不能滿足約束條 件,則輸入"UNSAT",表示約束條件無解。
[0073] Web服務(wù)使用簡單對象訪問協(xié)議(SOAP)進行傳遞XML格式消息,SOAP使用因特 網(wǎng)應(yīng)用層協(xié)議作為其傳輸協(xié)議,因此可以將測試用例的輸入封裝為SOAP消息。SOAP消息 通常包括〈Envelope〉,〈Header〉,〈Body〉,〈Fault〉等標簽,其中〈Envelope〉,〈Body〉等標簽 是必須的標簽,分別用于將XML文檔標識為一條SOAP消息和包含所有的調(diào)用和響應(yīng)信息; 〈Header〉,〈Fault〉為可選標簽,分別用于包含頭部信息和提供有關(guān)在處理此消息所發(fā)生錯 誤的信息。
[0074] 通過分析BPEL文檔中輸入變量對應(yīng)的WSDL文檔,獲得其Schema的命名空間,即 為SOAP消息中〈Envelope〉標簽的屬性值;而〈Body〉標簽的結(jié)構(gòu)由業(yè)務(wù)執(zhí)行流程中獲取輸 入變量的活動名及其對應(yīng)的變量名和取值組成。活動名和對應(yīng)輸入變量名可由BPEL文檔 解析獲得,取值可從Z3-str求解器的解空間中獲取。
[0075] Web服務(wù)測試用例的預期輸出也是一個SOAP消息,其〈Body〉標簽的結(jié)構(gòu)包括業(yè)務(wù) 執(zhí)行流程中獲取輸出變量的活動名及其對應(yīng)的變量名和取值?;顒用蛯?yīng)輸出變量名可 由BPEL文檔解析獲得,取值即為Z3-str求解器的解空間中輸出變量的值。
[0076] 整個過程中文件轉(zhuǎn)換圖如圖4所示,經(jīng)過上述步驟,即可得到Web服務(wù)測試用例, 一個測試用例示例如圖5所示。
[0077] 本發(fā)明在Web服務(wù)測試用例的自動生成過程中,通過提取WSDL、BPEL文檔中的約 束條件,并運用約束求解方法,根據(jù)這些約束條件自動化生成測試用例,從而減少測試用例 的冗余度,提高覆蓋率,提高Web服務(wù)測試的效率。
【權(quán)利要求】
1. 一種Web服務(wù)測試用例自動生成方法,其特征是基于文檔解析及約束求解自動生成 測試用例,包括Web服務(wù)文檔解析、Web服務(wù)約束條件提取和Web服務(wù)測試用例自動化生成 三部分: 1. Web服務(wù)文檔解析過程,包括對WSDL文檔和BPEL文檔的解析,在對WSDL文檔進行 解析時,得到DOM樹,遍歷DOM樹,得到WSDL文檔中定義的所有變量的屬性信息;在對BPEL 文檔進行解析時,得到DOM樹,遍歷DOM樹的節(jié)點,分別得到BPEL文檔中的變量的取值和屬 性信息以及活動節(jié)點的取值和屬性信息; 2) 根據(jù)BPEL文檔中定義的命名空間對應(yīng)關(guān)系,取得BPEL文檔中的變量在對應(yīng)的WSDL 文檔中的變量的屬性信息,由WSDL文檔的變量屬性信息解析得到變量約束條件,所述變量 約束條件包括變量的類型和取值范圍; 3) 根據(jù)解析BPEL文檔得到業(yè)務(wù)執(zhí)行流程信息,提取出業(yè)務(wù)執(zhí)行流程中服務(wù)調(diào)用、變量 賦值的關(guān)系,對業(yè)務(wù)執(zhí)行流程進行化簡,得到只包含活動類型、服務(wù)調(diào)用和變量賦值關(guān)系的 業(yè)務(wù)執(zhí)行流程中間文件,同時,根據(jù)業(yè)務(wù)執(zhí)行流程開始和結(jié)束活動以及業(yè)務(wù)執(zhí)行流程中調(diào) 用其他服務(wù)時調(diào)用的變量名,即可得到該Web服務(wù)的輸入、輸出變量名; 4) 利用靜態(tài)單賦值形式對BPEL文檔中的變量進行重命名,使得對每個變量的賦值操 作最多進行一次; 5) 利用模型檢查方法,根據(jù)BPEL文檔中不同的活動類型,將業(yè)務(wù)執(zhí)行流程改寫為使用 語句if、assignment、assertions以及邏輯運算符表示,并使用規(guī)范化算法將改寫后的業(yè) 務(wù)執(zhí)行流程中間文件規(guī)范化表示為條件范式;所述規(guī)范化算法如下 : P、PI、P2均為輸入到算法中進行處理的程序片段 G、c均為if語句中條件判斷語句,這里G = true procedure NORMALISE(P, G) if P是一個賦值語句或判斷語句then return if (G)P ; else if P = (if (c) PI ;) then return NORMALISE(PI, c&&G) else if P = (if(c)Pl ;else P2) then return NORMALISE (PI, c&&G) NORMALISE (P2, ( ! c)&&G); else if P = (PI ;P2)then return NORMALISE (PI, G) NORMALISE (P2, G); end if end procedure 6) 根據(jù)步驟2)-5)中提取的變量約束條件、條件范式以及Z3-str求解器對所輸入文檔 的語法要求,生成符合Z3-str求解器輸入文檔格式要求的約束條件; 7) 將步驟6)中生成的約束條件代入Z3-str求解器,得到可行解空間及變量取值, Z3-str求解器的輸入文件是步驟6)得到的約束條件,輸出內(nèi)容為滿足約束條件的可行解 空間;如果對變量的所有取值,都不能滿足約束條件,則輸入"UNSAT",表示約束條件無解; 對于可行解空間,結(jié)合Web服務(wù)文檔解析得到的Web服務(wù)輸入、輸出變量名,即可獲得Web 服務(wù)輸入、輸出變量的取值,即為測試用例中輸入、輸出變量的取值;根據(jù)輸入和輸出變量 名及其取值,結(jié)合SOAP協(xié)議的定義,自動化生成SOAP消息表示的測試用例,即為Web服務(wù) 的測試用例。
2. 根據(jù)權(quán)利要求1所述的一種Web服務(wù)測試用例自動生成方法,其特征是步驟4) 中,重命名的過程如下所述:設(shè)v為BPEL文檔中變量,i為變量在BPEL文檔中的位置,設(shè) α (V,i)為BPEL文檔中i位置的v之前被賦值的次數(shù),設(shè)e為BPEL文檔,P (e)表示e中 所有變量v被va (v;i)替換后對應(yīng)的BPEL文檔形式,則對于一個賦值表達式:X = e,轉(zhuǎn)變成 SSA形式為:xa(x,i)+1 = p (e),對于數(shù)組操作,若表達式為:a[ej = e2,轉(zhuǎn)變成SSA形式為:
3. 根據(jù)權(quán)利要求1所述的一種Web服務(wù)測試用例自動生成方法,其特征是步驟5)中, 根據(jù)BPEL文檔中不同的活動類型,對業(yè)務(wù)執(zhí)行流程的改寫規(guī)則為: 〈receive〉活動:直接使用賦值表達式將輸入?yún)?shù)賦值給相應(yīng)的變量; 〈reply〉活動:直接使用賦值表達式將輸出變量的值賦值給輸出參數(shù); 〈invoke〉活動用于調(diào)用BPEL子節(jié)點〈partnerLinks〉中定義的其它Web服務(wù),使用 BPEL內(nèi)置函數(shù)getVariableDataO來獲取調(diào)用Web服務(wù)后的參數(shù)值,并將得到的值賦值給 相應(yīng)的參數(shù); 〈assign〉活動用于對BPEL活動調(diào)用的變量賦值,在獲取賦值對象后,即可得到 〈assign〉活動的賦值表達式; 〈sequence〉活動定義了 BPEL中一個順序執(zhí)行的活動集合,活動集合的各個子活動之 間是順序執(zhí)行的關(guān)系,直接使用規(guī)范化算法得到條件范式; <if>活動:改寫為兩個活動之間的選擇,然后使用規(guī)范化算法得到條件范式; 〈while〉活動:對于〈while〉活動,while (e) {1} - if (e) {I while (e) {1}}成立,將 〈while〉活動轉(zhuǎn)變?yōu)榈葍r的<if>語句進行表示,再行進規(guī)范化; 〈repeatUntil〉活動:對于一個〈repeatUntil〉活動,先將其等價轉(zhuǎn)換為〈while〉活 動,然后按照上述對〈while〉活動的處理方式進行規(guī)范化; 〈pick〉活動:〈pick〉活動通過邏輯表達式實現(xiàn),對于〈pick〉活動中待選擇的各個活 動,使用規(guī)范化算法進行規(guī)范化; 〈flow〉活動:〈flow〉活動通過邏輯表達式實現(xiàn),對于邏輯表達式中的各個活動,使用 規(guī)范化算法將其規(guī)范化; 〈scope〉活動:將〈scope〉活動作為一個獨立的BPEL進行解析,再根據(jù)解析后的活動 進行規(guī)范化; 〈forEach〉活動:對于一個〈forEach〉活動,每次循環(huán)執(zhí)行活動為{〈NOT completionCondition>AND〈scope>},循環(huán)之間順序連接,執(zhí)行 N 次,〈forEach〉 活動對應(yīng)的規(guī)范化表示為:{〈NOT completionCondition>AND〈scope>} {〈NOT completionCondition>AND〈scope>}…共循環(huán) N 次; 通過上述改寫處理后,得到的結(jié)果即為BPEL活動信息經(jīng)過模型檢查方法以及規(guī)范化 算法處理后的條件范式,只包含邏輯運算符及if、assignment和assertions語句。
【文檔編號】G06F11/36GK104156313SQ201410396502
【公開日】2014年11月19日 申請日期:2014年8月12日 優(yōu)先權(quán)日:2014年8月12日
【發(fā)明者】許蕾, 周立波, 陳林, 李言輝, 徐寶文 申請人:南京大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1