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;
}
运行结果:
Loadrunder脚本篇——关联数组(参数数组)的更多相关文章
- Loadrunder之脚本篇——关联
关联的原理 关联也属于一钟特殊的参数化.一般参数化的参数来源于一个文件.一个定义的table.通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的.动态的值. 例子:常 ...
- Loadrunder脚本篇——Running Time setting之Additional attributes
作用说明 为Vuser脚本提供额外自定义参数.额外参数设置可应用于所有Vuser脚本类型. 说明: Add:添加一个参数 Remove:移除一个参数 可以在这里先输入一些常用的参数名及对应的值,类似常 ...
- Loadrunder脚本篇——文件下载
下载简介 对 HTTP协议来说,无论是下载文件或者请求页面,对客户端来说,都只是发出一个GET请求,并不会记录点击后的“保存”.“另存为操作”. 如下,点击页面中tar.gz压缩包,用工具可以清楚的看 ...
- Loadrunder脚本篇——Run-time Settings之Browser Enmulation
浏览器模拟 所有Internet Vuser Header包含一个标识将被模拟的浏览器类型(或无线工具包)的User Agent header.例如User-Agent: Mozilla/3.01Go ...
- Loadrunder脚本篇——Run-time Settings之Preferences
打开Preferences设置对话框,这里提供了对运行时的参数选择设置 Enable Image and Text Check 开启图片和文本检查.允许用户在回放期间通过web_find(文本检测)或 ...
- Loadrunder脚本篇——webservice接口测试(二)
1.选择协议--Web Service,如下图 2.导入服务 入口1:点击Manage Services ->弹出窗中选择“Import” ->弹出窗中选择“URL”,填写wsdl地址,导 ...
- Loadrunder脚本篇——webservice接口测试(一)
函数介绍 soap_request 函数执行一个SOAP请求 函数原型 int soap_request( const char *StepName, ExpectedResponse, URL, , ...
- Loadrunder脚本篇——web_submit_data实现提交post请求
概述 web_link()和web_url()函数都是页面访问型函数,实现HTTP请求中的GET方法,如果需要实现POST方法,可使用web_submit_form或web_submit_data() ...
- Loadrunder脚本篇——web_custom_request函数介绍
c语言版本: int web_custom_request(const char *RequestName, , [EXTRARES, ,] LAST ); 参数说明: RequestName ...
随机推荐
- Unity学习笔记 - UI System(一)
转载请注明出处: EnigmaJJ http://www.cnblogs.com/twjcnblog/p/5850648.html 术语 Canvas是Unity的原生组件,Unity的渲染系统使用C ...
- Linux HugePage特性
Linux HugePage特性 HugePage,就是指的大页内存管理方式.与传统的4kb的普通页管理方式相比,HugePage为管理大内存(8GB以上)更为高效.本文描述了什么是HugePage, ...
- AtCoder Regular Contest 070 D - No Need 想法:利用单调性二分+bitset优化
/** 题目:D - No Need 链接:http://arc070.contest.atcoder.jp/tasks/arc070_b 题意:给出N个数,从中选出一个子集,若子集和大于等于K,则这 ...
- hdu3208 Power of Integer
/** 题目:H - Power of Integer 链接:https://vjudge.net/contest/152887#problem/H 题意:给出区间[a, b],问你区间[a, b]所 ...
- mysql命令 SHOW TABLE STATUS LIKE '%city%'; 查看表的状态可以查看表的创建时间
show status like '%handler_read_key%'; #走索引的命令的数量. #查看存储引擎 mysql> show variables like '%engine%'; ...
- makefile编写---单个子目录编译模板
经过这次地库项目之后,虽然时间不久,跟团队在一起,虽然队员不一定在技术上有过人之处,但是来自大公司的员工,在工具使用和代码规范方面还是有点可鉴之处,在搭建主控模块是,就得面临makefile编写,因为 ...
- Problem 500!!! (Project Euler 500)
题目大意:求出最小的正整数,它的约数有$2^{500500}$个. 思路:考虑将一个数质因数分解,如果它的约数有$2^{500500}$个, 那么每个质因子的指数一定是$2^k-1$这样的形式. 如果 ...
- git undo last commit
$ git commit -m "Something terribly misguided" (1) $ git reset --soft HEAD~ (2) << e ...
- java 签名类 Signature
java.security类 Signature java.lang.Object java.security.SignatureSpi java.security.Signature public ...
- 在Xcode中使用Git进行源码版本控制(转)
http://www.cocoachina.com/ios/20140524/8536.html