Loadrunder脚本篇——关联数组(参数数组)

时间:2023-03-10 05:59:19
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;
}

运行结果:

Loadrunder脚本篇——关联数组(参数数组)

从上面的结果看到,我们命名的为id不是一个数组了,是一个数组,他满足以下两个条件:

1.参数必须都是以相同的名字开头,后面接下划线加数字的方式顺序赋值。

2.参数数组必须有一个“参数名_count”的参数来记录数组的长度

相关函数:

lr_paramarr_idx()     //获取参数数组中指定编号的参数的值

lr_paramarr_len()     //获取参数数组的长度

lr_paramarr_random()  //从参数列表中随机获取一个参数

2.将内容保存为参数数组

例子:要创建一个访问网站的参数数组,可以编写以下代码

Loadrunder脚本篇——关联数组(参数数组)

说明:通过脚本创建了一个名为website的参数数组,并获取编号为2的参数的值,

运行结果:

Loadrunder脚本篇——关联数组(参数数组)

此处: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;

}

运行结果:

Loadrunder脚本篇——关联数组(参数数组)

从参数列表中随机获取一个参数

例子:

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;

}

运行结果:

Loadrunder脚本篇——关联数组(参数数组)

例子:按顺序输出每个参数

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;

}

输出结果

Loadrunder脚本篇——关联数组(参数数组)

 

用指针变量存放参数

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;

}

运行结果:

Loadrunder脚本篇——关联数组(参数数组)

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;
}

运行结果:

Loadrunder脚本篇——关联数组(参数数组)