一. 前期準備
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請求消息腳本格式如下:
- 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;
- }
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)”該複選框控制。