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()函数的目的是,提醒如果被关联内容超出了默认的1024字节会导致存放数据溢出,就会产生参数值为空,关联失败的情况(做附件下载的脚本就可能会遇到这个问题),但通常不会关联到如此巨大的内容。

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;

}

Loadrunder之脚本篇——关联函数对话框详解的更多相关文章

  1. mysql基础篇 - SELECT 语句详解

    基础篇 - SELECT 语句详解         SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...

  2. loadrunner 脚本开发- web_url函数详解

    脚本开发- web_url函数详解 by:授客 QQ:1033553122   加载指定url的web页面(GET请求) C语言函数 int web_url( const char *StepName ...

  3. 入木三分学网络第一篇--VRRP协议详解第一篇(转)

    因为keepalived使用了VRRP协议,所有有必要熟悉一下. 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是解决局域网中配置静态网关时,静 ...

  4. 【Flutter】功能型组件之对话框详解

    前言 对话框本质上也是UI布局,通常一个对话框会包含标题.内容,以及一些操作按钮,为此,Material库中提供了一些现成的对话框组件来用于快速的构建出一个完整的对话框. 接口描述 // 1. Ale ...

  5. J2EE学习篇之--Struts1详解

    今天来看一下Struts1的相关知识,其实Struts现在是出名的,每个Web开发者都会知道的,也是现在比较流行的框架,下面就来看一下我们为什么要用Struts框架呢? 摘要 1.建立在mvc这种好的 ...

  6. iOS开发——控制器OC篇&UINavigationController&UITabBarController详解

    UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationControl ...

  7. vue.js基础知识篇(6):组件详解

    第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...

  8. Spring之旅第三篇-Spring配置详解

    上一篇学习了IOC的概念并初步分析了实现原理,这篇主要学习Spring的配置,话不多说,让我们开始! 一.Bean元素配置 1.1 基本配置 看一个最基本的bean配置 <bean name=& ...

  9. 实时通讯系列目录篇之SignalR详解

    一. 简单说几句 最早使用SignalR的时候大约是两年前了,记得当时是一个OA中消息的实时提醒,轮询的方式有点耗资源,WebSocket写起来又比较麻烦,最终选择了SignalR,当时是什么版本已经 ...

随机推荐

  1. [Android]生成heap dump文件(.hprof)

    Android生成heap dump文件(.hprof) 一个heap dump就是一个程序heap的快照,能够获知程序的哪些部分正在使用大部分的内存. 它保存为一种叫做HPROF的二进制格式.对于A ...

  2. linux内核常用函数或宏

    1. simple_strtoul 用于将字符串转换为无符号长整数,第3个参数10意味着转换方式是10进制. ival = simple_strtoul(buffer, NULL, 10); 2. 大 ...

  3. Spring3.2.6 + hibernate4.2.8 + hibernate-generic-dao1.2.0

    n多方法都不成功,最后在hibernate-generic-dao官网上的例子hibernate-maven-web(使用其jar包及配置,并将hibernate更新为4.2.8,加入ehcache及 ...

  4. HTTPS请求 SSL证书验证

    import urllib2 url = "https://www.12306.cn/mormhweb/" headers = {"User-Agent": & ...

  5. zmq重点

    The zmq_msg_send(3) method does not actually send the message to the socket connection(s). It queues ...

  6. hdu 3394(点双连通)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 思路:题目的意思是要求无向图中的冲突边和不需要边的条数,如果一个块中有多个环,则该块中的每条边都 ...

  7. LINUX手动查看和修改MTU值的方法

    默认的ANDROID系统中不带BUSYBOX,所以无法用BUSYBOX IFCONFIG来查看修改MTU值.其实网卡的MTU值是保存在/sys/class/net/eth0/mtu文件中,所以可以通过 ...

  8. Android系统中Parcelable和Serializable的区别,自动化实现Parcelable接口的插件

    Parcelable和Serializable的区别 参考地址:http://greenrobot.me/devpost/android-parcelable-serializable/ 由于最终的区 ...

  9. PHPFastCGI进程管理器PHP

    PHP-FPM是一个PHPFastCGI进程管理器,是只用于PHP的.      PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中.必须将它patch到你的PH ...

  10. Problem H. Hotel in Ves Lagos

    Problem H. Hotel in Ves Lagos Input le: hotel.in Output le: hotel.out Time limit: 1 second Memory li ...