使用Loadrunner 調用Webservice接口測試優化總結(通過URL方式)

本文主要介紹使用Loadrunner調用Webservice接口進行性能測試時的方法及優化總結。

1.Webservice協議腳本編寫流程

下面介紹使用Loadrunner調用Webservice接口通用的流程與方法。

1.1 新建腳本,選擇"Webservice"協議

wKiom1SRnPKSg8i8AAGIuOCVcC4288.jpg

1.2 選擇Manage Services->Import,輸入URL(注意需要在Webservice地址後面加上?wsdl),最後選擇Impoort

wKioL1SRnaaTlCExAAHaXoA9QYY176.jpg

1.3 點擊腳本中Action腳本中return 0前,後選擇Add Service Call

wKiom1SRnRPzf_yMAAGddU2I03A701.jpg

1.4 在打開的New Web Service Call窗口中,選擇輸入參數inputXML,勾選Include argument in,在Value中可以隨便填寫一些字符(接下來腳本中,我們會做一些參數化設置)

wKioL1SRncTBPcTnAAGy35Yt8P0236.jpg

1.5 同理,選擇輸出參數中SubmitNLSMSRequestResult,後選擇Save returned value in param,最後選擇OK

wKiom1SRnS-RKJ52AAGlvrT7PMQ272.jpg

這樣調用一次Webservice接口就保存在Action腳本中

wKioL1SRnd7SydKOAAEFs7Tlx6M577.jpg

1.6 參數化

  • 在腳本中用" <mobileno>13312345678</mobileno><smscontent>飛信</smscontent>"(此接口輸入參數示例)替換"xxx"

  • 選中"13312345678"並右鍵選擇Replace with a Parameter,輸入參數名稱及參數類型(Unique Number)

wKiom1SRnU6CmzHAAAFg64hLJfM078.jpg

1.7 參數設置

  • 選擇腳本右上角P圖標進入參數列表進行

  • 選擇Unique Number"唯一數",選擇格式爲%8d (下圖②)

  • 選擇"Block size per vuser"爲1000000(每個虛擬用戶分配到的參數個數,下圖③)

  • 同時Update value選擇"Each iteration",When Out of values選擇"Continue in a cyclic manner"(每次迭代後,參數纔會更新,且每個虛擬用戶用到的參數超過分配的參數個數1000000時,從頭開始取,如此循環。下圖④)

wKioL1SRnfvj7Nk4AAGUvy-1Vlw169.jpg

到此,我們已經完成了基本的Loadrunner腳本編寫,下面我們開始本文真正的重點:腳本優化及實戰演練,包括集合點添加,事務添加,返回結果判斷及"保存20000會話"腳本編寫。

2.Webservice腳本優化

2.1集合點添加

2.1.1什麼是集合點?

集合點用以同步虛擬用戶以便恰好在同一時刻執行任務。性能測試計劃中,可能會要求系統能夠承受1000 人同時提交數據,在LoadRunner 中通過在提交數據操作前面加入集合點,當虛擬用戶運行到提交數據的集合點時,LoadRunner 就會檢查同時有多少用戶運行到集合點,如果不到1000 人,LoadRunner 就會命令已經到集合點的用戶在此等待,當在集合點等待的用戶達到1000 人時,LoadRunner 命令1000 人同時去提交數據,從而達到測試計劃中的需求。

2.1.2如何添加集合點?

在需要添加集合點之處,如開始調用接口前,右鍵選擇Insert->Rendezvous,輸入集合點名稱即可。也可以直接在需要添加的腳本前添加"lr_rendezvous("Step1");",其中Step1爲集合點名稱,可自定義。

wKioL1SRng3g4cnzAAEzGr3ris4268.jpg

2.2事務添加

2.2.1添加開始事務

由於需要統計響應時間重要參數指標等,需要在腳本中手工添加事務。添加事務方法與集合點類似。在需要添加事務處,如集合點後,右鍵選擇Insert->Start Transaction,輸入事務名稱即可。也可在腳本中直接添加"lr_start_transaction("Step1");",其中Step1爲事務名稱,可自定義。

wKiom1SRnX6xgKWAAAFhVMuFWY0607.jpg

  • 在集合點前後添加事務區別?

如果在集合點前添加事務,在最後統計事務時間時就包括了在集合點等待的時間,導致統計的響應時間數據不準確(變大)。所以在此,我們選擇在集合點後添加事務。

2.2.2添加結束事務

同理,在需要添加結束事務處,一般在web_service_call後,右鍵選擇Insert->End Transaction,輸入需要結束的事務名稱即可。也可在腳本中直接添加"lr_end_transaction("Step1", LR_AUTO);",其中Step1爲需要結束的事務名稱。

wKioL1SRni6wB0MnAAEgtuGRaE0596.jpg

  • LR_AUTO是什麼?

lr_end_transaction中第二個參數爲"事務結束狀態",有LR_PASS(通過)、LR_FAIL(失敗)、LR_AUTO(自動)、LR_STOP(暫停)。如果在lr_end_transaction中沒有指定結束事物狀態是LR_AUTO,而是明確指定爲LR_PASS、LR_FAIL、LR_STOP其中的一種,則事物將以最後指定的狀態來結束。

2.3返回結果判斷

2.3.1單個返回結果判斷

例如,當我們調用Webservice接口輸入如下參數時"<mobileno>13312345678</mobileno> <smscontent>飛信</smscontent>",接口正確返回結果包括"飛信是中國移動的業務"。在此我們就需要對返回結果進行判斷。示例代碼如下:

wKiom1SRnZ2B5B2NAAGUwbbBVxI293.jpg

  • lr_eval_string函數說明

C的變量都不能被LR的函數直接調用。所以:LR函數調用C變量,得先經過lr_eval_string的解析,相當於橋樑的作用。

  • strstr函數說明

函數格式爲strstr(str1,str2),其中str1: 被查找目標string expression to search,str2:要查找對象The string expression to find.該函數返回str2第一次在str1中的位置,如果沒有找到,返回NULL.

  • lr_error_message和lr_output_message函數說明

lr_error_message函數將錯誤消息發送到輸出窗口和Vuser日誌文件。

lr_error_message在回放日誌中顯示的是紅色的字體,且顯示語句所在行號;同時,如果腳本在controllor中運行時,會生成一個error信息。

lr_output_message函數將帶有腳本部分的行號的消息發送到輸出窗口和日誌文件。

2.3.2多個返回結果判斷

與單個結果判斷類似,其實就是嵌套if語句,在此恕不贅述,示例代碼如下,:

wKioL1SRnk7h1ixHAAFyqBySCAI456.jpg

3.實戰演練 – 保存20000會話

3.1需求說明

實際項目中,需要測試組件是否可以保存最大20000個會話,同時在保存20000個會話後,用戶可以正常發送上行短信結束該20000會話。 壓力測試中,我們共添加了50個虛擬用戶,那麼一個虛擬用戶只需開始保存20000/50=400個會話,後結束這些會話即可。

3.3腳本編寫

我們可以使用一個For循環完成這部分的工作,示例代碼如下:

wKiom1SRnbvwZ0kVAAFW1aaiP_Y280.jpg

3.3.1lr_whoami函數說明

void lr_whoami (int *vuser_id, char **sgroup, int *scid);

返回值:返回當前運行的vuser ID、運行腳本的組名稱以及場景ID

參數說明:

int *vuser_id 需先註冊,保存正在運行的vuser的ID,在Virtual User Generator中回放返回-1

char **sgroup 需先註冊,保存正在運行的vuser的組名(腳本名),在Virtual User Generator中回放返回None

int *scid需先註冊,保存正在運行的Scenario的ID,在Virtual User Generator中回放返回0

3.3.2lr_save_int函數說明

lr_save_int函數意思是把一個整數保存爲參數

abs(id)意思是取id的絕對值(因爲在Virtual User Generator中,id返回爲-1)

 

本文轉自:http://www.360doc.com/content/14/0616/15/12385684_387175835.shtml

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