圖解LoadRunner實現SOAP接口性能測試

一. 前期準備

SOAP的性能測試使用web services腳本協議。因此,我們要有LoadRunner相應的License。

如果需要添加License,其添加步驟如下:

1. 打開LoadRunner,點擊上方“配置”-->“LoadRunner 許可證”:

圖1.1

2. 點擊“新許可證”,輸入相應的License:

圖1.2

二. 創建測試腳本

有了web services 的許可,我們就可以開始創建測試腳本了。

1. 打開LoadRunner,點擊“創建/編輯腳本”:

圖2.1

2. 點擊“新建 Vuser 腳本”:

圖2.2

3. 選擇“新建單腳本”-->“web services”,確定:

圖2.3

4. 選擇Action。在此處編輯虛擬用戶的一些動作腳本:

圖2.4

5. 在Action方法裏輸入動作腳本,其格式如下。Web_add_header添加SOAP消息頭信息,soap_reques爲發送報文主體:

圖2.5

6. LR內,某SOAP請求消息腳本格式如下:

  1. Action()  
  2. {  
  3. int count;  
  4.   
  5. lr_start_transaction("oneSoapOrder");  
  6.   
  7. web_add_header("SOAPAction","");  
  8.   
  9. soap_request("StepName=createSoapOrder",  
  10. "URL=http://192.168.101.1:8080/MySoapProj/services/SoapService",  
  11. "SOAPEnvelope=<?xml version=\"1.0\" encoding=\"GB2312\"?>"  
  12. "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"  
  13.   "<soapenv:Header>"  
  14.      "<Security>"  
  15.        "<UsernameToken>"  
  16.            "<Username>username</Username>"  
  17.            "<Password>password</Password>"  
  18.        "</UsernameToken>"  
  19.      "</Security>"  
  20.   "</soapenv:Header>"  
  21.   "<soapenv:Body>"  
  22.   "<msg:createSoapOrder>"  
  23.      "<msg:SoapOrder>"  
  24.         "<id>987600001</id>"  
  25.      "</msg:businessGroup>"  
  26.   "</msg:createSoapOrder>"  
  27. "</soapenv:Body></soapenv:Envelope>",  
  28. "ResponseParam=response",  
  29. LAST);  
  30.   
  31. count = lr_xml_find("XML={response}",  
  32. "Query=/Envelope/Body/createSoapOrderResponse/resultcode/value",  
  33. "Value=0",  
  34. "NotFound=continue",  
  35. LAST);  
  36.   
  37. if(count > 0){  
  38. lr_end_transaction("oneSoapOrder",LR_PASS);  
  39. }  
  40. else{  
  41. lr_end_transaction("oneSoapOrder",LR_FAIL);  
  42. }  
  43. return 0;  
  44. }  
Action()
{
int count;

lr_start_transaction("oneSoapOrder");

web_add_header("SOAPAction","");

soap_request("StepName=createSoapOrder",
"URL=http://192.168.101.1:8080/MySoapProj/services/SoapService",
"SOAPEnvelope=<?xml version=\"1.0\" encoding=\"GB2312\"?>"
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"
  "<soapenv:Header>"
     "<Security>"
       "<UsernameToken>"
           "<Username>username</Username>"
           "<Password>password</Password>"
       "</UsernameToken>"
     "</Security>"
  "</soapenv:Header>"
  "<soapenv:Body>"
  "<msg:createSoapOrder>"
     "<msg:SoapOrder>"
        "<id>987600001</id>"
     "</msg:businessGroup>"
  "</msg:createSoapOrder>"
"</soapenv:Body></soapenv:Envelope>",
"ResponseParam=response",
LAST);

count = lr_xml_find("XML={response}",
"Query=/Envelope/Body/createSoapOrderResponse/resultcode/value",
"Value=0",
"NotFound=continue",
LAST);

if(count > 0){
lr_end_transaction("oneSoapOrder",LR_PASS);
}
else{
lr_end_transaction("oneSoapOrder",LR_FAIL);
}
return 0;
}

這裏需要注意:

1) 報文中節點的域名,最好不要變動;

2) SOAP的URL需要根據實際情況修改;

3) 在一個方法中的某個參數,如果太長,需要換行,則每行單獨用雙引號括起來;

4) lr_start_transaction("oneSoapOrder");方法,是創建一個名爲oneSoapOrder的事務。該事務的結束,由lr_end_sub_transaction方法實現;

5) soap_request方法中的"ResponseParam=response"參數,是將SOAP返回報文存放到response中;

6) lr_xml_find方法是查找xml文件中某個指定節點的值。此例中,XML文件存放在response的SOAP響應報文,查找的節點是/Envelope/Body/createSoapOrderResponse/resultcode/value節點(具體的響應返回路徑請根據實際項目替換),即返回碼。預期結果"Value=0"。該方法如果找到預期值,則返回找到的預期值個數;找不到的話,則返回0;

7) 根據count的值,判斷返回碼是否是0(操作成功),從而決定事務是否成功。(LR_PASS表示事務成功;LR_FAIL表示事務失敗);

8) 這個報文是靜態的,再多的虛擬用戶執行,也只是執行同一條指令。若想使參數能“動”起來(如編號等取值不衝突的參數),請繼續往下看;

7. 讓參數可以動態變化的方法:

7.1 雙擊id標籤下的數字987600001,然後右鍵選擇“替換爲新參數”:

圖2.7.1

7.2 此時可以對此處進行變量替換,類型選爲“Unique Number”,即可保證該參數不會出現重複值。原先的數字參數,也會相應變化成粉紅色括號括起來的變量:

圖2.7.2(1)

圖2.7.2(2)

7.3 右鍵此參數,選擇參數屬性:

圖2.7.3

7.4 設置此參數的取值信息:

圖2.7.4

針對上圖,做如下說明:
1) 號碼範圍 啓動(S):第一個號碼的起始值,接下來的號碼會在此基礎上遞增。
2) 每個 Vuser 的:設置每個虛擬用戶可用的號碼數。此圖中,每個虛擬用戶會使用100個號碼。
3) 號碼顯示格式(N):此爲正則表達式。%04d 表示6位數字串,位數不足的,前面補0。9876%04d的有效取值範圍爲98760000—98769999,共1萬個id號。
4) 此例中,每個虛擬用戶只分配100個號碼計算,則9876%04d可滿足100個虛擬用戶的數據量使用。
5) 虛擬用戶使用號碼的規則,以此圖爲例:第一個虛擬用戶創建的id號爲98760000—98760099;第二個虛擬用戶id號爲98760100—98760199。以此類推。
6) 可以根據具體的性能測試需求,進行數據調整。(因爲可能除了id以外,還有其它參數不能重複,所以可以參照num參數,新設Unique變量,實現唯一性約束)

8. 點擊執行按鈕(或F5執行),測試腳本是否正確(下方爲執行結果):

圖2.8

9. 調試好腳本,保存腳本。

三. 運行負載測試
運行腳本創建好後,可以創建虛擬用戶,執行性能測試了。
1. 打開LoadRunner,選擇“運行負載測試”:


圖3.1

2. 選擇剛纔創建的腳本,加載到場景中:

圖3.2

3. 選擇需要的虛擬用戶數量。可設置的虛擬用戶數量的上限,由License決定:

圖3.3

4. 選擇編輯計劃,根據具體需求,設置“加壓”、“持續時間”、“減壓”等數據。一般情況,“持續時間”比較常用:

圖3.4

5. 點擊主界面右下方的“運行時設置”,設置每個虛擬用戶執行腳本的次數。這裏,可以理解爲“每個用戶,預期創建的集團數量”(此設置,是在需要設置每個虛擬用戶執行次數時,才設定的。如果在步驟4中,設定了“持續時間”,則可以不設置迭代次數(默認1次),虛擬用戶會一直執行腳本(變量也會遞增),直到指定的時間結束):

圖3.5

6. 執行性能測試:

圖3.6

7. 等待運行結束,分析結果。

四.結果分析
運行結束後,點擊性能測試主菜單欄“結果”-->“分析結果”。

圖4.1

具體的數據分析方法,請參照其它LoadRunner性能分析文檔。

五. 後記,一些注意事項

1. 腳本中,要刪除一個自定義參數,需進入“參數列表”中,再刪除,在腳本Action中的刪除,是沒法徹底刪除該參數的。
2. 腳本中,一個參數如果被多處引用,則該參數要注意選擇“參數屬性”,“更新值的時間”選項。該選項有三類:occurrence、iteration、once。選擇occurrence時,則該參數每次出現都會遞增一次;選擇iteration,則該參數在一次循環內多次出現,也不改變;選擇once,該參數只變動一次。這些選擇,會配合參數屬性“當超出值時”的動作,來選擇接下來的動作。
3. LR腳本創建後,會默認每個Action爲一個事務,這樣會出現自己定義了一個事務,但是執行後會多出很多事務。這個設置需要根據具體腳本需求,來決定是否使用該項(本例子中,就不需要)。“Vuser”-->“運行時設置”-->“其它”中,“每個Action定義爲一個事務(D)”該複選框控制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章