Loadrunder脚本篇——关联数组(参数数组)
导言
前面说过可以用关联取出服务器相关的一些动态变化的信息,前面也提过web_reg_save_param中可以设置ord=all,代表从服务器中取出的是一个数组,它试用的场景是当我访问一个发帖网站,有很多帖子,我们通过关联数组的方式获得本页所有帖子的id的一个数组,然后通过一个lr_paramarr_random函数随机取出这个数组的一个值,就模拟用户随机点击一个帖子,然后再把这个随机获取的值传到点击某一个帖子跳转页面的那个url里面,这样就完成了模拟用户随机点击帖子然后跳转到具体的帖子详情页,本篇将详细讲解通过脚本实现这个问题!
1.从服务器获取的关联数组
只要在关联函数中加入“ord=all”代表着取满足条件下的所有数据组成的数组。举例如下:
Action()
{
web_reg_save_param("id",
"LB=\"_id\":\"",
"RB=\"",
"Ord=ALL",
LAST);
web_custom_request("web_custom_request",
"URL=http://192.168.1.126:3000/apixxxxxxx",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=",
LAST);
return 0;
}
运行结果:
从上面的结果看到,我们命名的为id不是一个数组了,是一个数组,他满足以下两个条件:
1.参数必须都是以相同的名字开头,后面接下划线加数字的方式顺序赋值。
2.参数数组必须有一个“参数名_count”的参数来记录数组的长度
相关函数:
lr_paramarr_idx() //获取参数数组中指定编号的参数的值
lr_paramarr_len() //获取参数数组的长度
lr_paramarr_random() //从参数列表中随机获取一个参数
2.将内容保存为参数数组
例子:要创建一个访问网站的参数数组,可以编写以下代码
说明:通过脚本创建了一个名为website的参数数组,并获取编号为2的参数的值,
运行结果:
此处:web_site = lr_paramarr_idx("website", 2),等同:lr_eval_string(“{website_2}”);
获取参数数组长度
例子:
Action2()
{
int array_size = 0;
char *arr_size_str = NULL;
lr_save_string("www.google.com", "website_1");
lr_save_string("www.google.com", "website_2");
lr_save_string("www.google.com", "website_3");
lr_save_string("www.google.com", "website_4");
lr_save_string("4", "website_count");
array_size = lr_paramarr_len("website");
//输出整数
//1.把结果array_size保存为参数
lr_save_int(array_size, "arr_size");
//2.获取参数的字符串表示
arr_size_str = lr_eval_string("{arr_size}");
//输出结果
lr_output_message(arr_size_str);
return 0;
}
运行结果:
从参数列表中随机获取一个参数
例子:
Action2()
{
char *web_site = NULL;
lr_save_string("www.google.com", "website_1");
lr_save_string("www.google.com", "website_2");
lr_save_string("www.google.com", "website_3");
lr_save_string("www.google.com", "website_4");
lr_save_string("4", "website_count");
web_site = lr_paramarr_random("website");
return 0;
}
运行结果:
例子:按顺序输出每个参数
Action2()
{
int i = 0;
lr_save_string("www.google.com", "website_1");
lr_save_string("www.google.com", "website_2");
lr_save_string("www.google.com", "website_3");
lr_save_string("www.google.com", "website_4");
lr_save_string("4", "website_count");
for (i=0; i<4;i++)
{
lr_output_message(lr_paramarr_idx("website", i));
}
return 0;
}
输出结果
用指针变量存放参数
Action2()
{
char *pt = NULL;
lr_save_string("hello world", "param");
pt = "{param}";
lr_output_message(pt);
lr_output_message(lr_eval_string(pt));
return 0;
}
运行结果:
3.实战中的运用
举例:
Action()
{
web_reg_save_param("id",
"LB=\"_id\":\"",
"RB=\"",
"Ord=ALL",
LAST);
web_custom_request("web_custom_request",
"URL=http://192.168.1.126:3000/apixxxxxxx",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=",
LAST);
lr_save_string(lr_paramarr_random("id"),"RamId");
web_custom_request("web_custom_request",
"URL=http://1xxxxxxx/detail?_id={RamId} ",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=",
LAST);
return 0;
}
运行结果: