loadrunner 脚本优化-关联函数web_reg_save_param()函数详解
脚本优化-关联函数web_reg_save_param()函数详解
by:授客 QQ:1033553122
Insert->New Step,打开Add Step对话框


选择函数web_reg_save_param,点击OK,打开关联函数设置窗口


说明:
Parameter
Name
此处设置存放参数的名称,关联出来的内容将会存放在该参数中,受到Instance选项的影响。
例如,设置Parameter
Name为temp,当对应的Instance选项是任意一个数字的时候,只会关联一个匹配的记录,关联值将会存放在temp这个参数中。当Instance是ALL的时候,关联成功的值将会依次存放在“temp_数字”这样的参数数组中,并且会添加一个temp_count的参数存放关联出来的记录条数。
Left
Boundary
此处设置左边界,用来填写关联对于数据处理的左匹配内容规则。在左边界中存放的是一个字符串,例如填写的内容为“左边界”会被转换为以下形式
web_reg_save_param("Param","LB=左边界","RB=",Ord=1,
LAST);
注:如果输入的内容里面有双引号,那么需要通过转义字符来进行处理,如
web_reg_save_param("Param","LB=\"左边界","RB=",
Ord=1,LAST);
Match
case
默认情况下,边界是Match
case,也就是大小写匹配
Binary
data
如果要关联的内容是非ASCII字符,那么需要使用该选项。
Use #
for any digit
有时候需要关联的边界中有些变动的数字,并且由于这个数字导致关联非常难设置边界,可以用该选项
Use^as
a wildcard for [all/lowercase/uppercase] alphanumerical
characters
对比上面的功能,这里可以使用^符号来代替任何常用的字符,改功能有3个选项:All、LowerCase、UpperCase,即所有字母/大写字母/小写字母。
注意:一个^仅代表一个字符。
Right
Boundary
此处设置右边界,这里是用来填写关联时对于数据处理的右匹配内容规则,选项同左边界
Instance
这个关键字在很多函数里面都有应用,这里可以填写任意一个整数,也可以填写ALL。如果填写数字,那么说明从返回的记录中取出对应顺序的值,而填写ALL的话将会返回所填写的所有内容。
当使用Ord=All时,关联函数会把所有匹配过滤策略的记录都抓出来,由于参数只能存放一条记录,所以关联函数会生成一个参数数组。被关联的记录会以{关联参数名_关联id}的形式生成参数列表,并且在最后会有一个{关联参数名_count}的参数来存放被关联到的记录条数。
Relative
Frame
这个选项是专门针对框架结构的网站设计的,有些时候需要关联的内容是在某个框架中的,这个时候就需要说明所关联的页面是框架中的哪一个了。
Not
Found
如果关联的对象不存在,又该如何进行处理呢?默认值是ERROR,提示错误。
这种错误99%都是由于关联的边界设置不合理导致没有关联到需要的内容。字节会导致存放数据溢出,就会产生参数值为空,关联失败的情况(做附件下载的脚本就可能会遇到这个问题),但通常不会关联到如此巨大的内容。
web_set_max_html_param_len()函数可以自定义关联返回值存放的参数的最大长度。打开Inert->New
Step->Add Step窗口,找到对应的web_set_max_html_param_len函数,添加
而如果选择WARNING,则只会简单提示没抓到内容,不会产生错误,仅产生告警信息。
Search
in
设置关联查询的范围,这里VuGen提供了4个选项:Header、Body、Noresource、ALL。我们将这4个选项划分为两个大类。
Noresource
Noresource是从服务器返回的内容类别来考虑的,Noresource就是指不从资源文件中关联内容,也就是只从HTML文件格式抓内容。
Header/Body/All
这3个选项都是从请求返回的所有内容进行关联处理,包括图片,JavaScript脚本等。区别在于对返回信息的分割方式。在前面介绍HTTP的时候介绍过HTTP返回的内容其实是由Header(HTTP信息头)和Body(HTTP内容)组成的。
Header:指所关联的内容是所有服务器返回请求的HTTP头部分请求内容。Body之前的内容都属于Header
Body:就是服务器返回在Body以后的内容。
ALL:指服务器返回的所有内容
关于Search
in这个选项,一般使用得比较多的是Noresource,因为需要关联的内容一般都放在HTML页面中,并且使用Noresource被关联到的内容又比较少(只返回一个HTML页面)比较适合常用处理,如果某些信息是放在HTTP头内,那么只能用Header了。
Save
Length
关联出来的内容所需要保存的长度。
例如:
通过左右边界关联出来的内容是”sessionid=123456&action=work”,那么如何获得需要的sessionid信息呢?
可以使用Save
Length来实现,注意这里必须确保被保关联内容的长度恒定。将Save
Length设置为16,关联出来的结果就变为“sessionid=123456”了,如果想得到后面的sessionid值,就要靠Save
Offset选项了。
Save
Offset
设置关联的内容偏移量,从第几位开始进行关联操作。如果需要获得123456这个字符,则需要设置Save
Offset为10,同时设置Save
Length为6即可。
通过Save
Length和Save
Offset的设置,我们就可以方便地抓取服务器返回内容的任意一个部分了。
也可以利用参数调整偏移量和长度,那么参数能做到么?当然可以,如果需要对一个参数值进行偏移和长度设置,需要使用lr_save_var()函数,如下
Action2()
{
lr_save_string("I come from shanghai","city");
//从city这个参数中取6位长度的内容保存到result参数中,结果I
come
lr_save_var(lr_eval_string("{city}"),6,0,"result");
//从city这个参数的第7位开始取4个长度的内容保存到result参数中。结果from
lr_save_var(lr_eval_string("{city}")+7,4,0,"result");
return 0;
}
注意:这个函数是以系统开销为代价的。
问题:
前面关联的左右边界都是静态的,如果左右边界是动态的,并且系统返回的id是不定长度的,那么如何使用关联函数将该id取出呢?要再用一个函数strtok()函数来进行字符内容切割。
char
* strtok(char * string, const char * delimiters);
strtok()函数的作用是通过某个分割符delimiters来切分内容string
注意:首次调用时,string指向要分解的字符串,之后再次调用要把string设成NULL,
当查找不到delimiters指定的字符时,返回NULL
例:
Action2()
{
char
city[1000];
char
* token = NULL;
strcpy(city,"this is shanghai!"); //把this
is shanghai
保存到city
token=(char *)strtok(city, " ");
lr_output_message(token); //输出:this
while
(token != NULL)
{
token =
(char *) strtok(NULL," ");
lr_output_message(token); //先后输出is,shanghai!
}
return 0;
}
如果关联出来的内容sessionid是变动长度的,如”sessionid=54321123&action=work”,则如何获得这个变动长度的sessionid呢?
Action2()
{
char
temp[100];
char
* token = NULL;
lr_save_string("sessionid=54321123&action=work",
"param");
strcpy(temp,lr_eval_string("{param}")); //取出参数值,并且赋值给变量temp
token
= (char *)strtok(temp,"&"); //使用&符号作为分隔符
lr_output_message(token); //输出:sessionid=54321123
return 0;
}
loadrunner 脚本优化-关联函数web_reg_save_param()函数详解的更多相关文章
- loadrunner 脚本开发- web_url函数详解
脚本开发- web_url函数详解 by:授客 QQ:1033553122 加载指定url的web页面(GET请求) C语言函数 int web_url( const char *StepName ...
- loadrunner 运行脚本-Run-time Settings-Browser Enmulation设置详解
运行脚本-Run-time Settings-Browser Enmulation设置详解 by:授客 QQ:1033553122 浏览器模拟 所有Internet Vuser Header包含一个标 ...
- CreateFile函数详解
CreateFile函数详解 CreateFile The CreateFile function creates or opens the following objects and returns ...
- [转]javascript console 函数详解 js开发调试的利器
javascript console 函数详解 js开发调试的利器 分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...
- 【转】angularjs指令中的compile与link函数详解
这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下 通常大家在 ...
- loadrunner 脚本优化-事务时间简介
脚本优化-事务时间简介 by:授客 QQ:1033553122 事务概念 事务是指用户在客户端做一种或多种业务所需要的操作集(actions),通过事务开始和结束函数可以标记完成该业务所需要的操作内容 ...
- PHP输出缓存ob系列函数详解
PHP输出缓存ob系列函数详解 ob,输出缓冲区,是output buffering的简称,而不是output cache.ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额 ...
- ***PHP $_FILES函数详解 + PHP文件上传 move_uploaded_file() 参数的正确写法
PHP $_FILES函数详解 在PHP中上传一个文件建一个表单要比ASP中灵活得多.具体的看代码. 如: 复制代码代码如下: <form enctype="multipart/fo ...
- AdapterView的使用与getView函数详解
作者:徐冉.文章首发在他的个人博客. ) AdapterView&Adapter家族 adapterview就是和数据有关的控件,如listview,gridview,spinnerview等 ...
随机推荐
- AndroidStudio项目制作倒计时模块
前言 大家好,给大家带来AndroidStudio项目制作倒计时模块的概述,希望你们喜欢 项目难度 AndroidStudio项目制作倒计时模块的难度,不是很大,就是主要用了Timer和TimerTa ...
- Swift5 语言指南(八) 控制流
Swift提供了各种控制流程语句.这些包括while多次执行任务的循环; if,guard和switch基于特定条件执行不同代码分支的语句; 和语句,如break和continue对执行流在你的代码转 ...
- 机器学习(Machine Learning)算法总结-决策树
一.机器学习基本概念总结 分类(classification):目标标记为类别型的数据(离散型数据)回归(regression):目标标记为连续型数据 有监督学习(supervised learnin ...
- Java内部类持有外部类的引用详细分析与解决方案
在Java中内部类的定义与使用一般为成员内部类与匿名内部类,他们的对象都会隐式持有外部类对象的引用,影响外部类对象的回收. GC只会回收没有被引用或者根集不可到达的对象(取决于GC算法),内部类在生命 ...
- Java并发框架AbstractQueuedSynchronizer(AQS)
1.前言 本文介绍一下Java并发框架AQS,这是大神Doug Lea在JDK5的时候设计的一个抽象类,主要用于并发方面,功能强大.在新增的并发包中,很多工具类都能看到这个的影子,比如:CountDo ...
- php实现聊天室功能
原理:长连接 一.长连接与短连接 短连接:客户端与服务端每进行一次报文收发交易时才进行通讯连接.交易完毕后立即断开连接. 长连接:客户端与服务端先建立连接, 连接建立后不断开,然后在进行报文发送和接收 ...
- C# sqlhelper 整理
以下代码是参考几个不同人的写法总结写成的,肯定还有很大的优化空间,暂存该版本:有建议的欢迎提出: using System; using System.Collections.Generic; usi ...
- ElasticSearch实战-编码实践
1.概述 前面在<ElasticSearch实战-入门>中给大家分享如何搭建这样一个集群,在完成集群的搭建后,今天给大家分享如何实现对应的业务功能模块,下面是今天的分享内容,目录如下所示: ...
- Java并发编程笔记之基础总结(一)
一.线程概念 说到线程就必须要提一下进程,因为线程是进程中的一个实体,线程本身是不会独立存在的.进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一 ...
- CMMI三个过程域的流程及达到特定目标、共性目标的要求(RD需求管理过程,PI产品集成过程,TS技术解决方案)
RD需求管理过程 通过面谈的方式获取相关干系人关于产品生命周期各阶段的需求.期望,限制条件,接口 将相关干系人的需求.期望,限制条件,接口转化成用户需求说明书 依据客户需求,确定产品或产品组件需求,形 ...