使用 Groovy 實現自動化的 SoapUI

jopen 11年前發布 | 88K 次閱讀 自動化 測試工具

介紹

我曾需要捕獲來自至少100次對web服務調用的響應. 這是為了能讓非IT職務成員對響應進行人工檢查,它們需要Excel文件格式的響應記錄.

使用一些groovy腳本,我得以利用 SoapUI 4.6.4 的免費版本完成了這項任務. 你可能也會想要下載 Fiddler2 來檢查工作成果是否能夠運作的.

腳本大部分剪貼了由 M. McDonald http://forum.loadui.org/viewtopic.php?f=5&t=16354#p38935 提供的代碼.

如果你對 SoapUI Groovy 和 Java 熟悉,可能會感到疑惑,但請不要絕望!

SoapUI 的設置

下載并安裝 SoapUI 的免費版本.

當你第一次運行時,看起來像下面這樣:

使用 Groovy 實現自動化的 SoapUI

我創建了一個工作空間存儲我的項目,叫做 Automation. 為此,我們要去選擇 ‘File’-> ‘New Soap Project’ ,填入項目名稱和web服務的.wsdl 文件位置.

使用 Groovy 實現自動化的 SoapUI

請確保你勾選了創建請求 'Create Requests' 和創建測試套件 'Create TestSuite', 然后點擊 'OK'.

SoapUI 將會檢查web服務,返回你可以在服務上調用的操作/方法. 在我的任務中,只有一個叫做SubmitRequestResponse的操作, 但我還是選擇了 'Single TestCase with One Request for Each Operation'.

使用 Groovy 實現自動化的 SoapUI

點擊 'OK' 而你將會收到提醒,告知要為Test SuiteMultiple命名.

使用 Groovy 實現自動化的 SoapUI

使用 Groovy 實現自動化的 SoapUI

現在當SoapUI已經設置好了項目, 展開整個項目結構如下:

使用 Groovy 實現自動化的 SoapUI

如果你在 Request 1 上單擊, 你可以看到一個基礎的請求格式.

使用 Groovy 實現自動化的 SoapUI

我們需要在繼續進行之前確保調用從web服務上獲得了一個響應,所以我們添加一個soap請求。在我的情況里,web服務需要一個客戶號跟著一個地點位置標簽跟著一個或多個SalesOrders。所以我在 body 中用我的soap請求替換<part>?</part>標簽。

使用 Groovy 實現自動化的 SoapUI

點擊綠色箭頭(左上方)然后你將獲得一個XML響應。

使用 Groovy 實現自動化的 SoapUI

如果你有響應,那么你就在你需要在的地方。

設置 Test 文件,Test 步驟和 Test 腳本

在這一點,我們知道 SoapUI 可以發送請求到我們的web服務并返回一個響應。

現在我們需要設置我們的Test步驟和Test腳本。

Test 文件

在你的文件系統中創建一個目錄并添加兩個子目錄。

使用 Groovy 實現自動化的 SoapUI

在請求里,我們需要添加請求文件。

該文件必須和你在Request 1中添加的格式相同,如:

<ns0:CheckGuaranteeRequest xmlns:ns0="http://www.####.com/namespaces/portal/checkguarantee/in/2014.03">
<CustomerNumber>102277</CustomerNumber>
<SiteLocation>COAST</SiteLocation>
<SalesOrders>
<Id>1000495222</Id>
<Id>1000498217</Id>
</SalesOrders>
</ns0:CheckGuaranteeRequest>

它們也必須有一個  .xml 的文件擴展。

Test 步驟

檢測項目的結構并確保添加了Test Steps (1)。雙擊 SubmitRequestResponse 顯示一個基礎的soap頭。我們可以忽略這個。

使用 Groovy 實現自動化的 SoapUI

右擊 Test Steps 標題然后選擇 'Add Step' 然后選擇 'Groovy Script'。

使用 Groovy 實現自動化的 SoapUI

重命名為Step1。

使用 Groovy 實現自動化的 SoapUI

點擊 'OK' 然后將出現Groovy 編輯器。

使用 Groovy 實現自動化的 SoapUI在這里我們添加我們的第一個腳本。

Test 腳本

測試腳本由M. McDonald提供(見上文)。

腳本 1

第一個腳本是:

def fileList = []
new File("C:\\requests").eachFile { f ->
if (f.isFile() && f.name.endsWith(&apos;.xml&apos;)) {
   def filename = f.name[0..-5]
     fileList.add(filename)
}
}
if (fileList.size() < 1) {
   testRunner.fail("No request files")
}
context.put(&apos;fileList&apos;, fileList)

第一步定義了一個數組。

然后從我們的測試文件目錄創建一個文件并將其添加到 fileList 數組中。同時也截斷一些字符,檢查數組的大小以確保一些文件存在,然后添加數組到 'context object' ,這樣我們將要創建的其他測試步驟也可以使用這個數組。

我們需要更改第二行使其映射我們的文件的路徑,并添加一個快速檢查。

在我的情況中,腳本變成:

def fileList = []

new File("C:\GroovyTest\requests").eachFile { f -> if (f.isFile()&& f.name.endsWith(&apos;.xml&apos;)) {  def filename = f.name[0..-1]  fileList.add(filename)  log.info filename } }

if (fileList.size() <1) { testRunner.fail("No request files found") } context.put(&apos;fileList&apos;,fileList)</pre>

 'log.info filename ' 行使在請求目錄中的文件名打印到腳本日志中。

在Step1 窗口底部點擊腳本日志按鈕,然后點擊左上角的綠色箭頭運行該腳本。你應該能看到文件打印輸出列表。

使用 Groovy 實現自動化的 SoapUI

好了。我們已經成功的在我們的需求目錄中讀取了文件名并展示了它們。最好在此時注釋掉從數組中打印輸出文件名的行。

使用 Groovy 實現自動化的 SoapUI

腳本 2

我們已經有了第2步,它叫 SubmitRequestResponse。將它重命名為 'Step2'。

在Soap請求模塊中刪除 ' <part>?</part>'節點并添加下列:

${=new File("C:\\GroovyTest\\requests\\" + (context.get(&apos;fileList&apos;)).last()).text}

請注意我已經更改目錄為請求的目錄!!!

使用 Groovy 實現自動化的 SoapUI

現在我們需要在項目結構中將 Step2 拖拽到 Step1 的下面,所以看起來是這樣:

使用 Groovy 實現自動化的 SoapUI

現在我們可以測試兩個腳本看看它們是否工作。

是時候來設置 Fiddler 了

就是要安裝一下 Fiddler Web 調試器.

Fiddler 能讓你模擬需要從web服務發送和接收的東西.

當你打開 Fiddler, 需要一點點設置,以便你查看到你的web服務的網絡通路. 在任務條上,點擊 'Tools' -> Fiddler 選項,打開連接選項卡. Fiddler 一般會在端口8888上監聽,如下可以改成8080:

使用 Groovy 實現自動化的 SoapUI

這就是在Fiddler上要做的事情.

回到 SoapUI ,選擇 'File'-> 'Preferences'-> 'Proxy Settings'. 我的設置成了 自動'Automatic'. 一開始我使用SSL時,遇到了一些問題.

我的HTTP設置 'HTTP Settings' 被設置成了默認選項. 這里有一個告訴你用SoapUI設置Fiddler的一個不錯的網站:

By Dinesh K Mandal, 8 Sep 2011.

為了測試所有的東西是否都正常,回到SoapUI并雙擊你的測試項。我的測試項被叫做 'BasicHttpBinding_ITwoWayAsync TestSuite'.

會顯示出一個測試項窗口:

使用 Groovy 實現自動化的 SoapUI

幸運的話你可能會看到一個會話出現在了Fiddler中:

使用 Groovy 實現自動化的 SoapUI

真很棒. 如果你沒有看到會話的顯示,那就把SoapUI里面所有的東西都保存一下,然后重啟,再重新嘗試一下.

回到 SoapUI.

在測試項窗口,單擊綠色的箭頭,來運行測試的步驟:

使用 Groovy 實現自動化的 SoapUI

看看Fiddler,你將會看到一個會話已經被捕獲.

如果你在會話上點擊,并以XML形式查看結果,你將會看到向web服務發送的請求顯示在頂部的面板,而來自服務的回應顯示在底部的面板.

使用 Groovy 實現自動化的 SoapUI

我們已經成功的調用了我們的web服務,并收到了它的響應. 我們現在需要一個將響應保存到文件的步驟.

腳本 3

回到SoapUI并在 'Test Steps (2)‘上右擊,選擇 Groovy Script. 將其重命名為 'Step3'.

在Groovy窗口中添加如下的腳本 , 修改路徑,以匹配你的路徑結構.

def fileList = context.get(&apos;fileList&apos;)

def fileName = fileList.pop() def newname = fileName[0..-5]

def response = context.expand( &apos;${Step2#Response}&apos; ) def f = new File("C:\GroovyTest\responses\${fileName}_Response.xml") f.write(response, "UTF-8")

if(fileList.size() >0) { testRunner.gotoStepByName("Step2") }</pre>

這塊代碼從上下文(見第一步)處獲取數組, 從數組獲取到一個文件,獲得它的名字,并從名字中移除.xml。然后它會獲得從步驟二返回的響應,并將其作為響應”response“存儲.

然后他會在響應路徑中創建一個新的文件,并將其命名為老的文件名,后面加上  '_Response.xml'’ 。

然后它會將來自web服務的響應寫到該文件中。

最有有一節會檢查數組的大小,而如果它比0大,那就仍然會有一個測試要運行,如此 gotoStepByName 函數會表示要跳到步驟二 'Step2'。

雙擊 'Test Steps (3)’ 測試項運行測試套件.

使用 Groovy 實現自動化的 SoapUI

檢查 Fiddler,并看看響應文件夾.

使用 Groovy 實現自動化的 SoapUI

這挽救了我悲慘的未來,而這里面真正有用的信息都來 M. McDonald 和 Dinesh K. Mandal.

希望它能對其他人有用.

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!