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等