目錄:
-
- 總結學到的函數:
- 一、事務
- 二、檢查點函數的使用
- 三、思考時間
- 四、集合點
總結學到的函數:
web_url();發送get請求函數
web_submit_data();發送get和post函數
web_link();連結函數
web_submit_form();表單送出函數
web_custom_request();任何請求方法函數
web_reg_save_param()關聯函數
lr_eval_string();擷取參數傳回值
lr_save_string();字元串儲存到參數中
lr_output_message()把想要資訊輸出
lr_paramarr_idx();參數數組指定位置參數
lr_paramarr_random();參數數組随機擷取lr_start_transaction();開始事務函數
lr_paramarr_len()統計數組個數函數
web_reg_find()檢查點函數
web_find()普通檢查點函數
atoi();将字元串轉換整型函數
itoa();将整型轉換為字元串函數
lr_think_time()思考時間函數
lr_start_transaction();開始事務函數
lr_end_transaction();結束事務函數
lr_rendezvous()集合點函數
web_get_int_property()擷取狀态碼函數
一、事務
1.事務的作用
測試人員可以将一個或多個操作步驟定義為一個事務,
可以通俗的了解事務為"人為定義的一系列請求(請求可以是一個或者多個)"。
在程式上,事務表現為被開始标記和結束标記圈定的一段代碼區塊。
Loadrunner根據事務的開頭和結尾标記,計算事務響應時間、成功/失敗的事務數。
判斷事務結果
自動判斷:此處判斷的是狀态碼
手工判斷:
通過狀态碼判斷:
//擷取伺服器http協定傳回碼函數
HttpRetCode = web_get_int_property(HTTP_INFO_RETURN_CODE);
//判斷傳回碼是否
if (HttpRetCode == 200)
//lr_output_message("The script successfully accessed the discuz home page--- -----
-------------- -----------------");
lr_end_transaction("open", LR_PASS);
else
//輸出資訊到日志的函數
//lr_output_message("The script failed to access the discuz home page-------- -----
-------------- ----------------- ");
lr_end_transaction("open", LR_FAIL);
通過檢查點判斷:
if(atoi(lr_eval_string("{num}"))>0)
lr_end_transaction("login", LR_PASS);
else
lr_end_transaction("login", LR_FAIL);
插入開始事務和結束事務的入口:
注意開始事務和結束事務的名字要一樣,因為是成對出現的
事務:
lr_start_transaction(“login”);#事務開始時間
lr_end_transaction(“login”, LR_AUTO); #事務結束時間
//在這裡LR_AUTO判斷的是伺服器的傳回狀态碼,而并沒有判斷該業務是否成功,加個檢查點函數去判斷
代碼如下:
Action()
{
int a;
web_reg_save_param("session", #檢查點函數
"LB=name=userSession value=",
"RB=>",
"Ord=1",
LAST);
//打開網站
web_url("打開網站","URL=http://192.168.103.103:1080/webtours/",LAST);
web_reg_find("Search=All",
"SaveCount=number",
"Text=Welcome, <b>{username}</b>",
LAST);
lr_start_transaction("login");#事務開始時間
web_submit_data("登入",
"Action=http://192.168.103.103:1080/webtours/login.pl",
"Method=POST",
"TargetFrame=",
"Referer=",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={session}", ENDITEM,
"Name=username", "Value={username}", ENDITEM,
"Name=password", "Value={pwd}", ENDITEM,
"Name=login.x", "Value=36", ENDITEM,
"Name=login.y", "Value=8", ENDITEM,
"Name=login", "Value=Login", ENDITEM,
"Name=JSFormSubmit", "Value=off", ENDITEM,
LAST);
//lr_end_transaction("login", LR_AUTO); #事務結束時間
//在這裡LR_AUTO判斷的是伺服器的傳回狀态碼,而并沒有判斷該業務是否成功
//LR_AUTO的實作方式(源碼):
/*
a=web_get_int_property(HTTP_INFO_RETURN_CODE);//傳回狀态碼
if(a == 200){
lr_end_transaction("login",LR_PASS);
}else{
lr_end_transaction("login",LR_FAIL);
}
*/
//這個時候可以通過添加檢查點的方式來驗證業務是否成功,如果存在要檢查的内容那麼就給一狀态LR_PASS,否則給LR_FAIL
//這個時候就用到一個檢查點函數:web_reg_find()---->帶有reg的為注冊型函數--->特點:如果某一請求的響應資料中有想要的資料,那麼就将該函數放在請求前面
if(atoi(lr_eval_string("{number}"))>0){
lr_end_transaction("login",LR_PASS);
}else{
lr_end_transaction("login",LR_FAIL);
}
return 0;
}
插入檢查點函數入口:
檢查點函數配置
生成的檢查點函數:
web_reg_save_param("session",
"LB=name=userSession value=",
"RB=>",
"Ord=1",
LAST);
二、檢查點函數的使用
web_reg_find 檢查點的使用見上面代碼
web_find檢查點使用:
web_find檢查點的入口:
配置:檢查的文本内容是頁面上的文本顯示去作比較
配置完成後顯示出的代碼:
web_find("web_find",
"LeftOf=,",
"What=Welcome, jojo",
LAST);
但運作的時候需要開啟,要不然這個web_find該檢查點函數不會被執行
圖檔檢查
web_image_check()
入口:
配置:
生成的代碼:
web_image_check("web_image_check",
"Src=/WebTours/images/flights.gif",
"Alt=Search Flights Button",
LAST);
代碼如下:
Action()
{
int a;
web_reg_save_param("session",
"LB=name=userSession value=",
"RB=>",
"Ord=1",
LAST);
//打開網站
web_url("打開網站","URL=http://192.168.103.103:1080/webtours/",LAST);
lr_think_time(10);
lr_start_transaction("login");
web_submit_data("登入",
"Action=http://192.168.103.103:1080/webtours/login.pl",
"Method=POST",
"TargetFrame=",
"Referer=",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={session}", ENDITEM,
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=login.x", "Value=36", ENDITEM,
"Name=login.y", "Value=8", ENDITEM,
"Name=login", "Value=Login", ENDITEM,
"Name=JSFormSubmit", "Value=off", ENDITEM,
LAST);
lr_end_transaction("login",LR_AUTO);
//通過web_find函數檢查内容是否存在
//web_find函數使用時必須啟用image and text checks圖檔和文本檢查項
/*
web_find("web_find",
"LeftOf=,",
"What=Welcome, jojo",
LAST);
*/
//web_image_check函數--->圖檔檢查點
web_image_check("web_image_check",
"Src=/WebTours/images/flights.gif",
"Alt=Search Flights Button",
LAST);
return 0;
}
三、思考時間
作用:更加真實模拟使用者送出請求之間的延遲,也就是使用者暫停發請求的時間
思考時間設定的政策:
函數:lr_think_time(秒數)
注意點:
1.實際情況下,擷取真實場景的系統的性能名額時一般加入思考時間(1-2S)
如果是做壓力測試擷取系統的峰值名額時,一般忽略思考時間
2.一般情況下,思考時間函數不要放入事務内,以免後期影響計算事務響應時間
四、集合點
作用:
設集合點是為了更好模拟并發操作。設了集合點後,
運作過程中多個使用者可以在集合點等待到一定條件後再一起發後續的請求。
設定政策:
Controller—scenario–Rendezvous–policy
1.當%x的全部使用者到達集合點時,開始釋放
2.當%x的正在運作的使用者到達集合點時,開始釋放
3.當x個的使用者到達集合點時,開始釋放
限制虛拟使用者之間的逾時時間為xxS
插入集合點入口:
代碼:
Action()
{
int a;
web_reg_save_param("session",
"LB=name=userSession value=",
"RB=>",
"Ord=1",
LAST);
//打開網站
web_url("打開網站","URL=http://192.168.103.103:1080/webtours/",LAST);
lr_rendezvous("集合點");
lr_start_transaction("login");
web_submit_data("登入",
"Action=http://192.168.103.103:1080/webtours/login.pl",
"Method=POST",
"TargetFrame=",
"Referer=",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={session}", ENDITEM,
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=login.x", "Value=36", ENDITEM,
"Name=login.y", "Value=8", ENDITEM,
"Name=login", "Value=Login", ENDITEM,
"Name=JSFormSubmit", "Value=off", ENDITEM,
LAST);
lr_end_transaction("login",LR_AUTO);
//通過web_find函數檢查内容是否存在
web_find("web_find",
"LeftOf=,",
"What=Welcome, jojo",
LAST);
return 0;
}
再來一個比較全的腳本吧
iwebshop的登入
Action()
{
//open
web_url("open","URL=http://192.168.103.103:8888/iwebshop/",LAST);
//click denglu
web_url("click","URL=http://192.168.103.103:8888/iwebshop/index.php?controller=simple&action=login",LAST);
web_reg_find("Search=All",
"SaveCount=num",
"Text={username}",
LAST);
//LOGIN
lr_start_transaction("開始事務點");
web_submit_data("web_submit_data",
"Action=http://192.168.103.103:8888/iwebshop/index.php?controller=simple&action=login_act",
"Method=POST",
"TargetFrame=",
"Referer=",
"Mode=HTML",
ITEMDATA,
"Name=callback", "Value=", ENDITEM,
"Name=login_info", "Value={username}", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
LAST);
// lr_output_message(lr_eval_string("{username}"));
// lr_output_message("output de neirong shi:%s",lr_eval_string("{username}"));
if(atoi(lr_eval_string("{num}"))>0){
lr_end_transaction("開始事務點",LR_PASS);
}else{
lr_end_transaction("開始事務點",LR_FAIL);
}
return 0;
}