关联(correlation)的概念:
1、关联就是把脚本中某些写死的代码(hard_coded)数据,转变成撷取自服务器所送的、动态的、每次都不一样的数据。可以把关联看成是一种特殊的参数化。
2、当客户端的请求是随着服务器端的相应而动态变化的时候,就需要用到关联。
3、关联有两种机制,自动关联和手动关联。
自动关联一:录制脚本前,启用VuGen内建自动关联引擎:【Tool】>【Recording Options】>【HTTP Properties】>【Correlation】
自动关联二:录制脚本后,回放一次,然后按Ctrl+F8自动扫描脚本中的关联。
手动关联一:
1、将脚本录制两遍
2、通过WinDiff工具对比脚本的不同,复制需要关联的差异脚本;
3、在Recording Log(单一协议)或是Generation Log(多重协议)中搜索差异在什么地方,并记录差异所在的数据标头(蓝色粗体字)
4、使用web_reg_save_param函数手动建立关联
5、将脚本中有用到关联的数据,用参数代替;
手动关联二:
1、选择Tree视图模式
2、点击HTTP View下查看Response Body中
3、找到需要关联的内容,右键在下拉列表中选择“Create Coorelation”
验证关联函数是否正确:
1、设置输出日志:Vuser >【Run-time Settings】> log >勾选Enable logging > Always send messages > Extended log >勾选Parameter substitution
2、回放脚本时
3、在Replay Log日志中查看关联参数的相应值(此值是动态变化的)。
关联会用到的函数:web_reg_save_param;
语法:int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);
参数说明:
ParamName:存放得到的动态内容的参数名称;
list of Attributes:其它属性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。属性值不分大小写;
1、Notfound:指定当找不到要找的动态数据时该怎么处理。
error默认值,表示找不到动态数据时,发出一个错误消息。
warning表示找不到动态数据时,发出警告,脚本也会继续执行下去不会中断。在对脚本出错时,可以如此设置。
2、LB:动态数据的左边界字符串。必写,区分大小写。
3、RB:动态数据的右边界字符串。必写,区分大小写。
4、RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性可以是All或是数字,可选。
5、Search:搜寻的范围,可选,其值可以是
Headers(只搜寻headers)、
Body(只搜寻body部分,不搜寻header)、
Noresource(只搜寻body部分,不搜寻header与resource)
All(搜寻全部范围,默认值)。
6、ORD:指明从第几次出现的左边界开始才是要撷取的数据,可选,默认值是1。假如该属性值为All,则所有找到符合的数据会存储在数组中。
7、SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始存储到参数中。此属性值不可为负数,其默认值为0。
8、Convert:转换数据格式。当指定该属性值为HTML_TO_URL时,意味着将HTML-encoded数据转成URL-encoded数据格式。如果是HTML_TO_TEXT,表示将HTML-encoded数据转成纯文字数据格式。
9、SaveLen:当找到匹配项后,偏移量之后的几个字元存储到参数中。可选,默认值是-1,表示一直到结尾的整个字符串都存入参数中。
代码: web_reg_save_param_ex( "ParamName=CTtaskId", "LB=\"taskID\":\"", "RB=\",", "ORD=ALL",//获取所有符合条件的值。 "Savelen=50",//限制获取字符的长度。有可能会因为长度写少导致数据丢失 SEARCH_FILTERS, "Scope=Body", "RequestUrl=*/JSONRPC*" LAST ); lr_output_message("CTtaskId第1个值= %s", lr_eval_string("{CTtaskId_1}")); lr_output_message("CTtaskId第2个值= %s", lr_eval_string("{CTtaskId_2}")); |
在做手动关联时,取边界值的时候,会经常用到的转义字符:
\b退格
\f换页
\n换行
\r回车
\t水平制表
\v垂直制表
\\反斜杠
\?问号字符
\'单引号字符
\"双引号字符
\0空字符