在使用Loadrunner進行性能測試中,有時需要對性能測試中的功能是否全部正確進行判斷。這里就需要用到“檢查點”,本文總結了常用三種協議下檢查點的使用方法,希望閱讀本文后的同事能夠掌握其使用方法,並靈活應用在實際項目中。
1. HTTP協議
HTTP協議中檢查點有兩種:圖片和文字。這兩種檢查點可用以下三個函數實現:web_find()、web_reg_find()和web_image_check(),下面介紹三種函數的使用方法。
1.1 web_find()函數
函數的作用是“在頁面中查找相應的內容”,常用參數及含義如下:
web_find("web_find", //定義該查找函數的名稱
"RightOf=a", //定義查找字符的右邊界
"LeftOf=b", //定義查找字符的左邊界
"What=name", //定義查找內容
LAST);
使用該函數注意以下事項:
- 位置
該函數在頁面內容顯示出來以后,在頁面中進行查找,所以只能寫在要查找內容之后
- 錄制模式
該函數只能在基於HTML模式錄制的腳本中進行查找
- 必須啟用內容檢查選項
在Runtime setting->Preferences里面,把Enable image and text check選中,否則不執行該查找函數

啟用內容檢查選項
- 在VB和JAVA語法中不支持該函數
該函數還有以下缺點:
- 執行效率較低
- 不返回查找結果情況,如果想在執行該函數后根據查找結果做進一步操作時,沒有返回值可以依據。
- 例如:在頁面中查找“登錄成功”的字符串,如果找到該字符串在日志中輸出“登錄成功”,如果找不到該字符串,則在日志中輸出“登錄失敗”,此時使用該函數沒有依據來做此判斷,但使用web_reg_find()函數,使用它其中的SaveCount可以進行判斷,具體方法我們下面介紹。
1.2 web_reg_find()函數
函數的作用是“在緩存中查找相應的內容”,常用參數及含義如下:
web_reg_find("Search=Body", //定義查找范圍
"SaveCount=count", //定義查找計數變量名稱
"Text=test", //定義查找內容
LAST);
使用該函數注意以下事項:
- 位置
該函數寫在要查找內容的請求之前,通常情況下寫在如下六個函數之前:Web_castom_request();web_image();web_link();web_submit_data();web_submit_form();web_url()
- 使用技巧
該函數中的“SaveCount”參數可以記錄在緩存中查找內容出現的次數,我們可以使用該值,來判斷要查找的內容是否被找到,下面舉個例子來說明:(引用LR的幫助中的例子)
// Run the Web Tours sampleweb_url("MercuryWebTours",
"URL=http://localhost/MercuryWebTours/", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t1.inf", "Mode=HTML", LAST); // Set up check for successful login by looking for "Welcome" web_reg_find("Text=Welcome", "SaveCount=Welcome_Count", LAST); // Now log in web_submit_form("login.pl", "Snapshot=t2.inf", ITEMDATA, "Name=username", "Value=jojo", ENDITEM, "Name=password", "Value=bean", ENDITEM, "Name=login.x", "Value=35", ENDITEM, "Name=login.y", "Value=14", ENDITEM, LAST); // Check result if (atoi(lr_eval_string("{Welcome_Count}")) > 0) //判斷如果Welcome字符串出現次數大於0 { lr_output_message("Log on successful."); } //在日志中輸出Log on successful else //如果出現次數小於等於 {lr_error_message("Log on failed");} //在日志中輸出Log on failed return(0); } |
1.3 web_image_check()函數
函數作用:在頁面中查找一個具體的圖片,常用參數及含義如下:
web_image_check("web_image_check", //函數標題
"Alt=", //圖標說明
"Src=", //圖片鏈接地址
LAST);
使用該函數注意以下事項:
- “Alt”和“Src”的值直接取該圖片在網頁源代碼中相應參數的值
- 該函數是在緩存中查找相應的內容,所以要放在查找內容之前
- 使用該函數時,同樣需要在Vuser->Run-Tme Settings中勾選Enable Image and text check
下面是應用實例:
#include "web_api.h"Action(){web_url("www.google.cn","URL=http://www.google.cn/","Resource=0","RecContentType=text/html",
"Referer=", "Snapshot=t1.inf", "Mode=HTML", EXTRARES, LAST); web_image_check("web_image_check", "Src=/intl/zh-CN/images/logo_cn.gif", "Alt=Google", LAST); return 0;} |
LoadRunner執行后日志記錄如下:
Action.c(20): "web_image_check" succeeded (1 occurrence(s) found. Alt="Google", Src="/intl/zh-CN/images/logo_cn.gif") [MsgId: MMSG-27192]Action.c(20): web_image_check was successful [MsgId: MMSG-26392] |
1.4 插入函數的方法
- 手工寫入,在需要插入函數的位置手工寫入該函數
- 光標停留在要插入函數的位置,在INSERT菜單中,選擇New step,在列表中選擇或查找要插入的函數,根據提示填寫必要的參數
- 在Tree view模式下,在樹狀菜單中選中要插入函數的位置,右鍵,選擇Insert after或Insert before,根據提示填寫必要的參數
1.5小結
- WEB_FIND與WEB_REG_FIND函數類型不同,WEB_FIND是普通函數,WEB_REG_FIND是注冊函數
- WEB_FIND使用時必須開啟內容檢查選項,而WEB_REG_FIND則不沒有此限制
- WEB_FIND只能只用在基於HTML模式錄制的腳本中,而WEB_REG_FIND沒有此限制
- WEB_FIND是在返回的頁面中進行內容查找,WEB_REG_FIND是在緩存中進行查找
- WEB_FIND在執行效率上不如WEB_REG_FIND
- 2. Socket與Webservice協議
由於Socket協議與Webservice協議中檢查點設置方法基本一致,本文主要以實例來逐一說明。
實例1:Socket協議
Socket協議測試腳本如下:
#include "lrs.h"Action()
{intsc=0; lr_start_transaction("BIG1"); //建立socket鏈接 sc = lrs_create_socket("socket1","TCP","RemoteHost=192.168.85.247:26001",LrsLastArg); if (sc == 0) lr_output_message("Socket was successfully created "); else lr_output_message("An error occurred while creating the socket, Error Code: %d", sc); //發送socket請求,接收socket返回結果 lrs_send("socket1", "buf0", LrsLastArg); lrs_receive("socket1", "buf1", LrsLastArg); //保存socket返回結果至參數Res_BIG1中 lrs_save_param_ex("socket1", "received", "buf1", 0, lrs_get_last_received_buffer_size("socket1"),NULL, "Res_BIG1"); //關閉socket鏈接 lrs_disable_socket("socket1", DISABLE_SEND); lrs_close_socket("socket1"); //判斷Res_BIG1參數中是否有"content-length: 10"字段 if((strstr(lr_eval_string("<Res_BIG1>"),"content-length: 10"))==NULL) { lr_error_message("-------%s",lr_eval_string("<Res_BIG1>")); lr_end_transaction("BIG1",LR_FAIL); } else { lr_output_message("-------%s",lr_eval_string("<Res_BIG1>")); lr_end_transaction("BIG1",LR_PASS); } return 0; } |
實例2:Webservie協議
Webservice性能測試腳本如下:
Action(){lr_start_transaction("SaveSession");
web_service_call( "StepName=SubmitNLSMS", BEGIN_ARGUMENTS, "inputXML=<mobileno>{UserNO}</mobileno><smscontent>hi </smscontent>", END_ARGUMENTS, BEGIN_RESULT, "SubmitNLSMSRequestResult=SubmitSMSResult1", //保存返回結果至參數中 END_RESULT, LAST); //判斷返回結果 if((strstr(lr_eval_string("{SubmitSMSResult1}"),"Hello World"))==NULL) { lr_error_message("-------%s",lr_eval_string("{UserNO}")); lr_error_message("-------%s",lr_eval_string("{SubmitSMSResult1}")); lr_end_transaction("SaveSession",LR_FAIL); } else { lr_output_message("-------%s",lr_eval_string("{UserNO}")); lr_output_message("-------%s",lr_eval_string("{SubmitSMSResult1}")); lr_end_transaction("SaveSession",LR_PASS); } return 0; } |
2.1 小結
使用“檢查點”,首先需要得到“返回結果”,將該返回結果保存至參數中
對返回結果進行判斷,這里可能需要用到lr_eval_string(), atoi(), strstr()等函數
相關函數說明:
- lr_eval_string()函數作用是取得參數值,將字符串變量中的參數值替換為當前的參數值並將這個字符串返回
- atoi()函數的作用是將一個ASCII字符串轉換為整型
- strstr()函數格式為strstr(str1,str2),其中str1: 被查找目標string expression to search,str2:要查找對象The string expression to find.該函數返回str2第一次在str1中的位置,如果沒有找到,返回NULL