LoadRunner性能压测示例

简单做个loadrunner做接口压测的示例

网上找个天气的查询接口,就以这个作为练手示例

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


HP Virtual User Generator调整脚本

LoadRunner性能压测示例_第1张图片

脚本如下:



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 跑

LoadRunner性能压测示例_第2张图片

结果出来了

LoadRunner性能压测示例_第3张图片

一般如果是自己的服务,还要监控服务所在机器以及依赖服务所在服务器、使用数据库、网络转发中间件等的性能指标,如:cpu、内存、磁盘读写、网络流量等来找出来瓶颈


windows机器可以用perfmon

linux机器可以用nmon


还可以借助工具分析代码瓶颈

Net可以借助Dottrace等

java可以借助 JMC JvisualVM等


你可能感兴趣的:(性能)