LoadRunner学习知多少
1个回答
2016-03-20
展开全部
一.关联操作的条件
客户端需要从服务端返回的数据中获取部分数据,并将这部分数据处理后作为自己下一次请求的一部分发出。
那么什么地方需要关联呢?
凡是脚本每次执行时都必须获得唯一标识的地方都需要关联。假如脚本需要关联,如果不做关联是不会执行通过的,也就是说会有错误消息发生。不过很遗憾,并没有任何特定的错误消息和关联是有关系的。会出现什么错误消息,与系统实际的错误处理机制有关。错误消息有可能会提醒用户要重新登录,但是也可能直接就显示HTTP 404的错误消息。
二.如何找出要关联的数据呢
简单地说,每一次执行时都会变动的值,就有可能需要做关联。
如:序列号和随机数一般需要关联。
常见的需要关联的情景:
1.登录操作
2.先查后修改,先查后删除
3.并发控制:防止两个用户同时修改或同时删除一条记录
三.一般关联操作的步骤
从服务端返回的数据中选取需要进行关联的操作。
将该数据存入脚本的一个参数中。
将脚本中需要使用该数据的地方用参数来替代。
注:对于WEB应用来说,一般会用一个hidden的Field存放。
四.关联分为自动关联和手动关联
自动关联操作只对Web协议、DB协议和其他少数几种协议有效,对socket等协议录制的脚本不起作用。
五.关联函数web_reg_save_param_ex详解
在LR11中除了对web_reg_save_param加强为web_reg_save_param_ex,还提供了另外两个非常好用的函数web_reg_save_param_regexp和web_reg_save_param_xpath。
选项:
Parameter Name
此处设置存放参数的名称,关联出来的内容将会存放在该参数中。这里受到Ordinal选项的影响。
设置Parameter Name为temp,当对应的Ordinal选项是任意一个数字的时候,只会关联一个匹配的记录,关联值将会存放在temp这个参数中。当Ordinal是All的时候,关联成功后的值将会依次存放在“temp_数字”这样的参数数组中,并且还会添加一个temp_count的参数存放关联出来的记录条数。
Left Boundary
此处设置左边界,这里是用来填写关联对于数据处理的左匹配内容规则。
注意:如果输入的内容里面有双引号,那么需要通过转义符\来进行处理,例如:
web_reg_save_param_ex(
"ParamName=test",
"LB=\"左边界",
"RB=",
SEARCH_FILTERS,
LAST);
Match case
默认情况下边界是Match case的,也就是检查大小写的,可以取消下面的选项来忽略大小写检查,会看到函数变为以下形式:
web_reg_save_param_ex(
"ParamName=test",
"LB/IC=左边界",
"RB=",
SEARCH_FILTERS,
LAST);
Binary data
如果需要关联的内容是非ASCII字符的,那么需要使用该选项。选中该选项后可以看到函数变为以下形式:
web_reg_save_param_ex(
"ParamName=test",
"LB/BIN=\\x3F\\xDD",
"RB=",
SEARCH_FILTERS,
LAST);
Regular expression
该功能由函数web_reg_save_param_regexp实现。
Right Boundary
此处设置右边界,这里是用来填写关联时对于数据处理的右匹配内容规则,选项同左边界。
DFEs
在录制选项和回放选项中我们提到过了DFE的功能,在关联这里也支持DFE的数据处理,我们先回到录制选项中的那个例子中,为其写一个普通关联看看返回(为了让返回结果看得更清楚,这里提前使用了Scope=BODY规则,该规则作用参考后面的Scope属性介绍)。
接着我们使用关联的DFE功能,在这里设置关联的DFEs格式为JsonXml(这里的格式是指系统自带的DFE模块的Tag名,参考图3.35),然后还要确保Run-time settings中的DFE功能启用,代码变为:
web_reg_save_param_ex(
"ParamName=jsonresponse",
"LB=",
"RB=",
"DFEs=JsonXml",
"Ordinal=1",
SEARCH_FILTERS,
LAST);
web_url("json.php",
"URL=http://localhost:8000/phpwind85/json.php",
LAST);
Ordinal
这个关键字在很多函数里面都有应用,在这里可以填写任意一个整数,也可以填All。如果填写数字,那么说明从返回的记录中取出对应顺序的值,而填写All的话将会返回所有的内容。
当使用Ordinal =All时,关联函数会把所有匹配过滤策略的记录都抓出来,由于参数只能存放一条记录,所以关联函数会生成一个参数数组。被关联的记录会以{关联参数名_关联id}的形式生成参数列表,并且在最后会有一个{关联参数名_count}的参数来存放被关联到的记录条数。
例如,上面写过的一个关联热搜关键字的例子,代码如下所示:
web_reg_save_param_ex(
"ParamName=hotsearch",
"LB=
"RB=&type=thread\">",
SEARCH_FILTERS,
LAST);
当Instance设置为All时,代码变为:
web_reg_save_param_ex(
"ParamName=hotsearch",
"LB=
"RB=&type=thread\">",
"Ordinal=ALL",
SEARCH_FILTERS,
LAST);
运行代码后,关联将会返回所有匹配左右边界的内容,结果如下:
Action.c(20): Notify: Saving Parameter "hotsearch_1 = 结婚".
Action.c(20): Notify: Saving Parameter "hotsearch_2 = 母婴".
Action.c(20): Notify: Saving Parameter "hotsearch_3 = phpwind".
Action.c(20) Notify: Saving Parameter "hotsearch_4 = testing001".
Action.c(20): Notify: Saving Parameter "hotsearch_5 = 结婚".
Action.c(20): Notify: Saving Parameter "hotsearch_count = 5".
Save Offset
设置关联的内容偏移量,从第几位开始进行关联操作。回到最开始的例子,我们抓取的是You have successfully installed XAMPP on this system!,如果需要获得successfully installed XAMPP on this system!这个字符串,则不用改变左边界,只需要设置Save Offset为9即可,代码为:
web_reg_save_param_ex(
"ParamName=temp",
"LB=Congratulations:
",
"RB= ",
"Ordinal=1",
"SaveOffset=9",
SEARCH_FILTERS,
"ContentType=text/html",
LAST);
Save Length
关联出来的内容所需要保存的长度。在Save Offset的例子中我们写到如何获得successfully installed XAMPP on this system!这个字符串,如果我们还希望获得这个字符串中的successfully installed XAMPP,那么可以再添加Save Length为22,代码变为:
web_reg_save_param_ex(
"ParamName=temp",
"LB=Congratulations:
",
"RB=
",
"Ordinal=1",
"SaveOffset=9",
"SaveLen=22",
SEARCH_FILTERS,
"ContentType=text/html",
LAST);
通过Save Length和Save Offset的设置,我们就可以方便地抓取服务器返回的定长数据的任意一个部分了。
关联可以调整偏移量和长度,那么参数能做到吗?当然可以,如果需要对一个参数值进行偏移和长度设置,则需要使用lr_save_var函数,例如,下面的代码:
lr_save_string("I come from shanghai","city");
lr_save_var(lr_eval_string("{city}"),6,0,"result");
//从city这个参数中取6位长度的内容保存到result参数中
lr_save_var(lreval_string("{city}")+7,4,0,"result");
//从city这个参数的第7位开始取4个长度的内容保存到result参数中
可以看到运行的结果是:
Action.c(3): Notify: Saving Parameter "city = I come from shanghai"
Action.c(4): Notify: Saving Parameter "result = I come"
Action.c(5): Notify: Saving Parameter "result = from"
Warm if text was not found (Default is Error)
如果关联的对象不存在,又该如何进行处理呢?默认值为Error,默认情况下如果没有关联到任何内容则提示错误。
Filters
下面的选项都是帮助关联返回限定的,通过这些设置可以进一步减少返回的范围。
Scope
该项设置关联查询的范围,在LR11中和以前的范围做了一些调整,应该算是更加强大了,这里Scope提供了4个选项:Body、Headers、Cookies、All。
1)ALL
比较容易理解,就是让服务器的返回所有内容作为需要关联的目标来处理。
2)Headers/Body/Cookies
这3个选项都是从请求返回的所有内容进行关联处理,包括图片、JavaScript脚本等。区别在于对返回信息的分隔方式。在前面介绍HTTP的时候介绍过HTTP返回的内容其实是由Header(HTTP信息头)和Body(HTTP内容)组成的,而Cookie又是Header中的一部分,在Tree模式下的HTTP View视图中可以清晰地看到LR如何定义各块内容。当我们对Phpwind登录返回做关联时,不同的Scope带来的效果如下。
3)Header
指所关联的内容是所有服务器返回请求的HTTP头部分内容。可以通过查看服务器返回内容来了解,Body之前的内容都属于Header:
4)Body
就是服务器返回在Body以后的内容:
5)Cookie
指Header部分关于Cookie定义的部分内容。
Request URL
这里提供了针对URL地址的过滤方式来减少关联范围,例如,我们可以填写*.php来说明只对PHP页面进行过滤。
Content Type
回顾我们在讲录制下载操作的时候,提到了Content Type这个概念,这样在录制的时候可以通过这个特性来过滤录制对象。而在关联这里,这个属性的效果是相同的,在网站应用中,我们要关联的内容一般都存放在HTML页面中,所以这里我们通常都是用text/html来作为Content Type过滤规则的。
Frame ID
这个选项是专门针对框架结构的网站设计的,有些时候需要关联的内容是在某个框架中的,这个时候就需要说明所关联的页面是框架中的哪一个了。
Ignore Redirection
在某些情况下系统会使用HTTP 3xx的重定向操作来完成页面跳转,该选项是用来忽略跳转页面信息的。如果选中该选项,通过这种重定向技术的页面将不会被关联。
有时需要配合使用web_set_max_html_param_len函数可以自定义关联返回值存放的参数的最大长度。
客户端需要从服务端返回的数据中获取部分数据,并将这部分数据处理后作为自己下一次请求的一部分发出。
那么什么地方需要关联呢?
凡是脚本每次执行时都必须获得唯一标识的地方都需要关联。假如脚本需要关联,如果不做关联是不会执行通过的,也就是说会有错误消息发生。不过很遗憾,并没有任何特定的错误消息和关联是有关系的。会出现什么错误消息,与系统实际的错误处理机制有关。错误消息有可能会提醒用户要重新登录,但是也可能直接就显示HTTP 404的错误消息。
二.如何找出要关联的数据呢
简单地说,每一次执行时都会变动的值,就有可能需要做关联。
如:序列号和随机数一般需要关联。
常见的需要关联的情景:
1.登录操作
2.先查后修改,先查后删除
3.并发控制:防止两个用户同时修改或同时删除一条记录
三.一般关联操作的步骤
从服务端返回的数据中选取需要进行关联的操作。
将该数据存入脚本的一个参数中。
将脚本中需要使用该数据的地方用参数来替代。
注:对于WEB应用来说,一般会用一个hidden的Field存放。
四.关联分为自动关联和手动关联
自动关联操作只对Web协议、DB协议和其他少数几种协议有效,对socket等协议录制的脚本不起作用。
五.关联函数web_reg_save_param_ex详解
在LR11中除了对web_reg_save_param加强为web_reg_save_param_ex,还提供了另外两个非常好用的函数web_reg_save_param_regexp和web_reg_save_param_xpath。
选项:
Parameter Name
此处设置存放参数的名称,关联出来的内容将会存放在该参数中。这里受到Ordinal选项的影响。
设置Parameter Name为temp,当对应的Ordinal选项是任意一个数字的时候,只会关联一个匹配的记录,关联值将会存放在temp这个参数中。当Ordinal是All的时候,关联成功后的值将会依次存放在“temp_数字”这样的参数数组中,并且还会添加一个temp_count的参数存放关联出来的记录条数。
Left Boundary
此处设置左边界,这里是用来填写关联对于数据处理的左匹配内容规则。
注意:如果输入的内容里面有双引号,那么需要通过转义符\来进行处理,例如:
web_reg_save_param_ex(
"ParamName=test",
"LB=\"左边界",
"RB=",
SEARCH_FILTERS,
LAST);
Match case
默认情况下边界是Match case的,也就是检查大小写的,可以取消下面的选项来忽略大小写检查,会看到函数变为以下形式:
web_reg_save_param_ex(
"ParamName=test",
"LB/IC=左边界",
"RB=",
SEARCH_FILTERS,
LAST);
Binary data
如果需要关联的内容是非ASCII字符的,那么需要使用该选项。选中该选项后可以看到函数变为以下形式:
web_reg_save_param_ex(
"ParamName=test",
"LB/BIN=\\x3F\\xDD",
"RB=",
SEARCH_FILTERS,
LAST);
Regular expression
该功能由函数web_reg_save_param_regexp实现。
Right Boundary
此处设置右边界,这里是用来填写关联时对于数据处理的右匹配内容规则,选项同左边界。
DFEs
在录制选项和回放选项中我们提到过了DFE的功能,在关联这里也支持DFE的数据处理,我们先回到录制选项中的那个例子中,为其写一个普通关联看看返回(为了让返回结果看得更清楚,这里提前使用了Scope=BODY规则,该规则作用参考后面的Scope属性介绍)。
接着我们使用关联的DFE功能,在这里设置关联的DFEs格式为JsonXml(这里的格式是指系统自带的DFE模块的Tag名,参考图3.35),然后还要确保Run-time settings中的DFE功能启用,代码变为:
web_reg_save_param_ex(
"ParamName=jsonresponse",
"LB=",
"RB=",
"DFEs=JsonXml",
"Ordinal=1",
SEARCH_FILTERS,
LAST);
web_url("json.php",
"URL=http://localhost:8000/phpwind85/json.php",
LAST);
Ordinal
这个关键字在很多函数里面都有应用,在这里可以填写任意一个整数,也可以填All。如果填写数字,那么说明从返回的记录中取出对应顺序的值,而填写All的话将会返回所有的内容。
当使用Ordinal =All时,关联函数会把所有匹配过滤策略的记录都抓出来,由于参数只能存放一条记录,所以关联函数会生成一个参数数组。被关联的记录会以{关联参数名_关联id}的形式生成参数列表,并且在最后会有一个{关联参数名_count}的参数来存放被关联到的记录条数。
例如,上面写过的一个关联热搜关键字的例子,代码如下所示:
web_reg_save_param_ex(
"ParamName=hotsearch",
"LB=
"RB=&type=thread\">",
SEARCH_FILTERS,
LAST);
当Instance设置为All时,代码变为:
web_reg_save_param_ex(
"ParamName=hotsearch",
"LB=
"RB=&type=thread\">",
"Ordinal=ALL",
SEARCH_FILTERS,
LAST);
运行代码后,关联将会返回所有匹配左右边界的内容,结果如下:
Action.c(20): Notify: Saving Parameter "hotsearch_1 = 结婚".
Action.c(20): Notify: Saving Parameter "hotsearch_2 = 母婴".
Action.c(20): Notify: Saving Parameter "hotsearch_3 = phpwind".
Action.c(20) Notify: Saving Parameter "hotsearch_4 = testing001".
Action.c(20): Notify: Saving Parameter "hotsearch_5 = 结婚".
Action.c(20): Notify: Saving Parameter "hotsearch_count = 5".
Save Offset
设置关联的内容偏移量,从第几位开始进行关联操作。回到最开始的例子,我们抓取的是You have successfully installed XAMPP on this system!,如果需要获得successfully installed XAMPP on this system!这个字符串,则不用改变左边界,只需要设置Save Offset为9即可,代码为:
web_reg_save_param_ex(
"ParamName=temp",
"LB=Congratulations:
",
"RB= ",
"Ordinal=1",
"SaveOffset=9",
SEARCH_FILTERS,
"ContentType=text/html",
LAST);
Save Length
关联出来的内容所需要保存的长度。在Save Offset的例子中我们写到如何获得successfully installed XAMPP on this system!这个字符串,如果我们还希望获得这个字符串中的successfully installed XAMPP,那么可以再添加Save Length为22,代码变为:
web_reg_save_param_ex(
"ParamName=temp",
"LB=Congratulations:
",
"RB=
",
"Ordinal=1",
"SaveOffset=9",
"SaveLen=22",
SEARCH_FILTERS,
"ContentType=text/html",
LAST);
通过Save Length和Save Offset的设置,我们就可以方便地抓取服务器返回的定长数据的任意一个部分了。
关联可以调整偏移量和长度,那么参数能做到吗?当然可以,如果需要对一个参数值进行偏移和长度设置,则需要使用lr_save_var函数,例如,下面的代码:
lr_save_string("I come from shanghai","city");
lr_save_var(lr_eval_string("{city}"),6,0,"result");
//从city这个参数中取6位长度的内容保存到result参数中
lr_save_var(lreval_string("{city}")+7,4,0,"result");
//从city这个参数的第7位开始取4个长度的内容保存到result参数中
可以看到运行的结果是:
Action.c(3): Notify: Saving Parameter "city = I come from shanghai"
Action.c(4): Notify: Saving Parameter "result = I come"
Action.c(5): Notify: Saving Parameter "result = from"
Warm if text was not found (Default is Error)
如果关联的对象不存在,又该如何进行处理呢?默认值为Error,默认情况下如果没有关联到任何内容则提示错误。
Filters
下面的选项都是帮助关联返回限定的,通过这些设置可以进一步减少返回的范围。
Scope
该项设置关联查询的范围,在LR11中和以前的范围做了一些调整,应该算是更加强大了,这里Scope提供了4个选项:Body、Headers、Cookies、All。
1)ALL
比较容易理解,就是让服务器的返回所有内容作为需要关联的目标来处理。
2)Headers/Body/Cookies
这3个选项都是从请求返回的所有内容进行关联处理,包括图片、JavaScript脚本等。区别在于对返回信息的分隔方式。在前面介绍HTTP的时候介绍过HTTP返回的内容其实是由Header(HTTP信息头)和Body(HTTP内容)组成的,而Cookie又是Header中的一部分,在Tree模式下的HTTP View视图中可以清晰地看到LR如何定义各块内容。当我们对Phpwind登录返回做关联时,不同的Scope带来的效果如下。
3)Header
指所关联的内容是所有服务器返回请求的HTTP头部分内容。可以通过查看服务器返回内容来了解,Body之前的内容都属于Header:
4)Body
就是服务器返回在Body以后的内容:
5)Cookie
指Header部分关于Cookie定义的部分内容。
Request URL
这里提供了针对URL地址的过滤方式来减少关联范围,例如,我们可以填写*.php来说明只对PHP页面进行过滤。
Content Type
回顾我们在讲录制下载操作的时候,提到了Content Type这个概念,这样在录制的时候可以通过这个特性来过滤录制对象。而在关联这里,这个属性的效果是相同的,在网站应用中,我们要关联的内容一般都存放在HTML页面中,所以这里我们通常都是用text/html来作为Content Type过滤规则的。
Frame ID
这个选项是专门针对框架结构的网站设计的,有些时候需要关联的内容是在某个框架中的,这个时候就需要说明所关联的页面是框架中的哪一个了。
Ignore Redirection
在某些情况下系统会使用HTTP 3xx的重定向操作来完成页面跳转,该选项是用来忽略跳转页面信息的。如果选中该选项,通过这种重定向技术的页面将不会被关联。
有时需要配合使用web_set_max_html_param_len函数可以自定义关联返回值存放的参数的最大长度。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询