背景:本文总结作者在使用LR时,常用的函数。会持续更新~~~
****** web_reg_save_param获取array的处理
1)不要忘记F1,查看LoadRunner的帮助
2)上代码。这里是要通过找到匹配的userName获取其ID
Action()
{
int i, result;
char userIdParam[50]; // 保存正则表达式提取出来的字符串的格式,即变量名
char userIdParamVal[50]; // 保存上面变量名对应的值
char userNameParam[50];
char userNameParamVal[50];
char userId; // 最终要获取的ID的值
...... // 中间代码省略
web_reg_save_param("userIds",
"LB=\"id\":\"",
"RB=\"",
"ORD=ALL", // 默认取值1,即匹配到的第一个值。这里ALL则是取所有值
"SaveLen=20", // 单个匹配字符的长度
LAST);
web_reg_save_param("userNames",
"LB=\"name":\"",
"RB=\"",
"ORD=ALL",
"SaveLen=10",
LAST);
web_url(......); // 发送请求
for(i=1; i<=atoi(lr_eval_string("{userIds_count}")); i++) // {userIds_count} 这是lr中给出的所匹配字符的长度的变量名
{ // 这里,因为LR取两个变量时都是顺序取值的,所以可以这样的匹配。即id1对应的是name1。
sprintf(userNameParam, "{userNames_%d}", i); // 所取值的变量均以userNames_开头,并从1开始计数
sprintf(userNameParamVal, "%s", lr_eval_string(userNameParam)); // 把变量对应的值取出,赋值给变量
result = strcmp(lr_eval_string(userNameParamVal), lr_eval_string("John")); // 与期望的名字作对比
if (result == 0)
{
sprintf(userIdParam, "{userIds_%d}", i);
sprintf(userIdParamVal, "%s", lr_eval_string(userIdParam));
lr_save_string(userIdParamVal, "userId"); // 将期望的值保存到变量中
break;
};
}
return 0;
}
****** LR中获取当前系统时间的方法
参考: https://www.cnblogs.com/yezhaohui/p/3448618.html
PS:感谢这位作者的分享,这里就不再占用篇幅再写一遍啦~~~
****** LR中添加Header信息
web_add_header("X-Requested-With", "XMLHttpRequest"); // 这样添加头部信息只对最近的一个请求有效。
web_add_auto_header("X-Requested-With", "XMLHttpRequest"); // 这样添加头部信息会对其后面的所有请求有效。
****** LR中获取到的字符串长度较长时
web_set_max_html_param_len("1024"); // 使用场景有:web_reg_save_param()获取到长度较长字符串时。则在其前面添加此函数
项目中有遇到一些字符串长度超长,所以这里“1024”可以替换成更大的值,例如,50000
****** LR中请求和响应中的乱码处理
1) 用于request中的乱码
char name[20];
lr_convert_string_encoding(lr_eval_string("测试"), LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8, "name");
lr_output_message("output string is %s", lr_eval_string("{name}"));
2) 用于response中的乱码
char result[20];
web_reg_save_param("str",
"LB=",
"RB=",
LAST); // 提取字符串
web_submit_data(...); // 请求省略
lr_convert_string_encoding(lr_eval_string("{str}"), "UTF-8","gb2312","result");
lr_output_message(lr_eval_string("{result}"));
****** web_reg_save_param_regexp()
该函数之前一直没有找到,原来是因为用的LR11没有打patch包,在LR11+Patch4中,就有该函数了。其使用可以参考:
https://blog.csdn.net/testingstar/article/details/78023526
http://tech.it168.com/a2015/0909/1760/000001760623_all.shtml
web_reg_save_param_regexp("ParamName=param",
"RegExp=\"key\":[\\s\\S]*\"value(.*)\"",
"Ordinal=1",
SEARCH_FILTERS,
LAST);
其中,[\\s\\S]*是正则表达式中的任意替换,(.*)则是对需要取的值的替换。