1. 程式人生 > >LoadRunner效能壓測示例

LoadRunner效能壓測示例

簡單做個loadrunner做介面壓測的示例

網上找個天氣的查詢介面,就以這個作為練手示例

http://www.weather.com.cn/data/sk/101010100.html

HP Virtual User Generator調整指令碼


指令碼如下:



Action()
{
//執行本指令碼前,要先找開發把所有的日記都稽核通過,然後執行收藏日記指令碼。最後再查詢收藏。
//userid和note的值要繫結再一起,來源:select iUserId,iSourceId from App_UserFavorite where dAddTime>'增第一個加日記的時間'


web_reg_save_param("ResponseBody", "LB=", "RB=", "Search=Body", LAST);
lr_start_transaction("Ts_GetUserCollectionNoteList");


web_reg_find("Search=Body",//這裡說明在Body的範圍內查詢 
"SaveCount=ret_Count",//這裡表示把返回值的個數放在變數ret_Count裡 
"Text=weatherinfo",//這裡表示查詢的內容是“NoteId” ,即從返回的body中找到唯一的值作為檢查點。
LAST);
web_url("Ts_GetUserCollectionNoteList", 
"URL=http://www.weather.com.cn/data/sk/101010100.html",
"Resource=1", 
"RecContentType=application/json", 
"Referer=", 
LAST);


if (atoi(lr_eval_string("{ret_Count}")) >=1){//這裡判斷檢查到的個數
lr_end_transaction("Ts_GetUserCollectionNoteList", LR_PASS); 
lr_convert_string_encoding(lr_eval_string("{ResponseBody}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"ResponseBody");
lr_output_message("# 響應內容體:\n %s", lr_eval_string("{ResponseBody}"));
}
else{ 


lr_end_transaction("Ts_GetUserCollectionNoteList", LR_FAIL); 
lr_convert_string_encoding(lr_eval_string("{ResponseBody}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"ResponseBody");
lr_output_message("# 響應內容體:\n %s", lr_eval_string("{ResponseBody}"));
}


return 0; 
}

指令碼模板:

一.get 方法

Action()
{
//執行本指令碼前,要先找開發把所有的日記都稽核通過,然後執行收藏日記指令碼。最後再查詢收藏。
//userid和note的值要繫結再一起,來源:select iUserId,iSourceId from App_UserFavorite where dAddTime>'增第一個加日記的時間'

web_reg_save_param("ResponseBody", "LB=", "RB=", "Search=Body", LAST);
lr_start_transaction("Ts_GetUserCollectionNoteList");


web_reg_find("Search=Body",//這裡說明在Body的範圍內查詢 
"SaveCount=ret_Count",//這裡表示把返回值的個數放在變數ret_Count裡 
"Text=NoteId",//這裡表示查詢的內容是“NoteId” ,即從返回的body中找到唯一的值作為檢查點。
LAST);

web_url("Ts_GetUserCollectionNoteList", 
"URL=http://api.social.ymatou.com/api/socialinner/GetUserCollectionNoteList?noteId={noteid}&userId={userid

}",
"Resource=1", 
"RecContentType=application/json", 
"Referer=", 
LAST);

if (atoi(lr_eval_string("{ret_Count}")) >=1){//這裡判斷檢查到的個數

lr_end_transaction("Ts_GetUserCollectionNoteList", LR_PASS); 
lr_convert_string_encoding(lr_eval_string("{ResponseBody}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"ResponseBody");
lr_output_message("# 響應內容體:\n %s", lr_eval_string("{ResponseBody}"));
lr_output_message("# 響應內容體:\n %s", lr_eval_string("{userid}"));

}

else{ 

lr_end_transaction("Ts_GetUserCollectionNoteList", LR_FAIL); 
lr_convert_string_encoding(lr_eval_string("{ResponseBody}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"ResponseBody");
lr_output_message("# 響應內容體:\n %s", lr_eval_string("{ResponseBody}"));
lr_output_message("# 響應內容體:\n %s", lr_eval_string("{userid}"));
}


return 0; 
}

二.post 方法

Action()

//先要獲取的accesstoken的值,通過資料庫查詢登陸密碼=123456的userid,在需要用到周憶提供的工具,使用userid訪問買手和買家的登陸介面獲取到accesstoken。並手動增加user型別,1代表買手,0代表買家,最後將userid和accesstoken和user型別繫結.作為引數。
//activityid=1或2,其中這個值可由運營端建立。
//直行通過後,需要到mongo中查詢新增加的日誌資料量是否正確。


web_reg_save_param("ResponseBody", "LB=", "RB=", "Search=Body", LAST);
web_reg_find("Search=Body",//這裡說明在Body的範圍內查詢 
"SaveCount=ret_Count",//這裡表示把返回值的個數放在變數ret_Count裡 
"Text=nodeid",//這裡表示查詢的內容是“nodeid” ,即從返回的body中找到唯一的值作為檢查點。
LAST);

lr_start_transaction("Ts_AddNote");
web_custom_request("Ts_AddNote",
"URL=http://api.social.ymatou.com/api/Feed/AddNote/?AccessToken={accesstoken}", 
"Method=POST",
"RecContentType=application/json; charset=UTF-8",
"Mode=HTTP",
"EncType=application/json; charset=UTF-8",
"Body={\"SellerNewsId\":4545,\"Content\" : \"{content1}{num}1\",\"NoteSource\" :0,\"Position\" : \"hangzhou \",\"NoteId\" : ,\"OsVer\" : \"9.0\",\"UserId\" :{user},\"UserName\" : \"lunchzhao\",\"Idfa\" : \"C163DA2D-75DE-4F20-BF87-6683E2282A16\",\"NoteVersion\" : null,\"Os\" : \"iOS\",\"OrderId\" : 105302433,\"IsCollect\" : false,\"CkId\" : \"1ce0eb3713a9af3725884d640bf68b05\",\"TagImage\" : [{\"TagInfo\" : [{\"XPoint\" : 0.4600000083446503,\"YPoint\" : 0.75,\"ImageTagStyle\" : 9,\"Tags\" : [{\"TagValId\" : 56655,\"TagVal\" : \"56655.00\",\"ImageTagType\" : 0}]}],\"Pic\" : \"http:\/\/p6.img.ymatou.com\/G01\/\/M00\/04\/2A\/rBBlD1X_xD2ACR8kAAGS6IvITjo785.jpg\"}]}", LAST);

if (atoi(lr_eval_string("{ret_Count}"))==1){//這裡判斷檢查到的個數

lr_end_transaction("Ts_AddNote", LR_PASS); 
lr_convert_string_encoding(lr_eval_string("{ResponseBody}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"ResponseBody");
lr_log_message("# 響應內容體:\n %s", lr_eval_string("{ResponseBody}"));
lr_log_message("# 響應內容體user:\n %s", lr_eval_string("{user}"));//這裡輸出日誌用lr_log_message形式輸出,代表可以打印出日誌,並輸出到日誌中。
lr_log_message("# 響應內容體num:\n %s", lr_eval_string("{num}"));
}

else{

lr_end_transaction("Ts_AddNote", LR_FAIL); 
lr_convert_string_encoding(lr_eval_string("{ResponseBody}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"ResponseBody");
lr_log_message("# 響應內容體:\n %s", lr_eval_string("{ResponseBody}"));
lr_log_message("# 響應內容體:\n %s", lr_eval_string("{user}"));
}


}


儲存,開啟HP LoadRunner Controller 跑


結果出來了


一般如果是自己的服務,還要監控服務所在機器以及依賴服務所在伺服器、使用資料庫、網路轉發中介軟體等的效能指標,如:cpu、記憶體、磁碟讀寫、網路流量等來找出來瓶頸

windows機器可以用perfmon

linux機器可以用nmon

還可以藉助工具分析程式碼瓶頸

Net可以藉助Dottrace等

java可以藉助 JMC JvisualVM等