脚本优化-关联设置

by:授客 QQ1033553122

关联的原理

关联也属于一钟特殊的参数化。一般参数化的参数来源于一个文件、一个定义的table、通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的、动态的值。

例子:常见系统中的登陆功能,在登陆后服务器会返回SessionID,登陆后的操作都需要提交该SessionID确认身份。使用VuGen录制脚本时,Vugen将会记录服务器返回的SessionID,并且原封不动地在下一个请求中发送给服务器。

服务器每次接收到用户名和密码的登录请求后返回新的SessionID,但是回放脚本时,仍然发送旧的SessionID给服务器,最终因新的SessionID和旧的SessionID不一致,导致脚本回放失败。

也就是说,录制的脚本中的SessionID是固定不变的,而服务器返回的SessionID是根据登录请求动态变化的。由此产生了问题。为了确保脚本回放的成功,我们需要获得服务器每次返回的动态SessionID,再将这个动态参数发回给服务器。而关联则可以做到这点。关联通过web_reg_save_param()函数来实现,这个函数可以帮助我们完成对服务器返回的保存操作。

注意:

关联函数是一个注册型函数,需要告诉VuGen下一个请求返回是需要被处理的。所以该函数必须要写在请求前,如下,否则就会提示无法获得关联结果的错误。这时绝大多数使用关联的新手最容易犯错的错误。

Action()

{

//在请求前添加关联函数

web_url(“localhost:8081”,”URL=http://localhost:8081/”,LAST);

return
0;

}


关联的方式

关联就是对服务器的返回做处理的过程,而关联方式有3种:

自动关联

手动关联

一边录制一边关联



自动关联

VuGen提供的自动关联处理策略,它的原理是对同一脚本运行和录制时的所有服务器返回进行比较,来自动查找变化的部分,并且提示是否生成关联。

注意:使用自动关联前必须先运行一次脚本。

点击Vuser->Scan
Script for Correlations

弹出如下,

点击
Yes,进行关联扫描

如上图,如果有可关联的对象则会显示在上图的关联结果中

如有数据的情况下,单击Correlate按钮后,则生成一个关联,关联的前后内容和所属Action也被列出来。自动关联结束。脚本中会自动添加关联函数web_reg_save_param_*函数并将被关联的内容保存到一个叫参数中去

回放脚本,如果还有其他关联引起的错误,重复上述操作。

自动关联是通过录制和回放时的服务器返回值比较确定需要关联的内容,然后再帮助生成对应的关联函数,常用在非标准的动态数据处理中。如sessionid,在大多数情况下,脚本无法正常回放都可以通过自动扫描的方法来生成关联,解决动态数据的问题。

但是自动关联有很强的局限性,无法实现特殊的动态数据捕获,例如帖子的id,作者名等,这个时候就需要手动关联来解决它了。



手动关联

通过web_reg_save_param()将想要的字符串保存到一个参数中。从而捕获从服务器返回的标题或正文的文本内容,也可以用来捕获服务器返回的超链接。

通常情况下,关联的对象一般都是选择链接地址而不是链接名,这样可确保在以后的使用中比较简单



一边录制一边关联

打开录制选项(Tools->Correlation选项),录制选项时建议大家在初期都将Enable选项去掉。禁止这个功能的使用。

这里Vugen提供了一些常见应用需要做的关联规则,这些规则有效解决了录制脚本后回放失败的问题,但是同时也带来弊端。例如:如果需要录制的项目使用了和规则十分相似的数据返回格式,而开发又在其中写了一些自定义的不规范内容,就会导致VuGen错误关联数据,使本来能够回放成功的脚本由于添加了错误的自动关联而无法正常回放。

如何设置一个自定义的新规则

单击New
Application按钮,新建一个应用

点击刚建的应用,单击New
Rule新建一个规则

填写规则的左边界,右边界等

新建一个脚本,重新录制,系统会自动按照规则生成关联函数。


手动关联举例

将鼠标移动到添加关联的函数中的指定位置,然后选择Insert->New
Step选项(或右键也可以),在系统弹出Add
Step窗口中查找关联函数,如下图

点击OK后,弹出如下图

填写如下

点击确定后,在脚本中光标所在的地方添加如下web_reg_save_param函数

关联函数的作用,通过一种规则将服务器的返回保存到一个参数中,所以为了看到参数的内容,应打开参数取值的日志选项

注意:每一句“Notify:Saving
Parameter temp=”后面都是被关联到的服务器返回,我们会发现返回不止一条。具体分析会发现,被关联到的内容有以下几种:

1.HTML

2.CSS

3.JavaScript

4.JPEG、PNG、GIF

也就是说,通过这个函数获得了服务器所有的返回内容。

对于图片和CSS等内容其实一般都不是我们关心的,系统的动态数据需要关联的服务器返回信息一般都保存在HTML正文中。所以接着修改一下关联函数,将Search
In选项从ALL修改为Noresource,也就是只要关联HTML、XML等资源而不关联附属的信息。

修改Search
In选项为Noresource

切换到Tree模式下,双击“Reg
Save Param”函数

改好了代码自动变为如下

web_reg_save_param(”temp”,

“LB=”,

“RB=”,

“Ord=1”,

“Search=Noresource”,

LAST

);

可以看到被关联内容只有一个了,而且就是服务器返回的HTTP包中的正文内容,和通过VuGen看到的服务器返回内容完全相同,这个返回是保存在一个叫temp的参数中。

整个HTTP请求分为两段,一段是开头数据包,叫做header,另外一段是HTML页面,叫做body。在“Search”选项中可以修改为Header或者body来更加精确地划分关联范围。

通常,我们还是使用Noresource来处理关联范围,因为这样可以得到最常用的返回内容。得到了服务器返回的内容,接着就可以做任何想做的事情,如获得页面中的任意一个对象。

关联函数提供了一个叫做左边界、右边界的策略,只需要填写这个规则,它会在整个被关联范围内查找符合该规则的内容。

如上,修改关联函数。修改关联函数方法:

1.直接在代码上修改

2.切换到Tree模式下,双击关联函数,在Lef
Boundary/Right Boundary中输入条件,修改关联函数。

点击OK后,如下

运行结果:

如下,定位Web
Tours

运行结果:

注意:输出结果前后有空格

解决方法,在左边界和右边界都添加空格

输出结果:

 

注意:关联函数的结果需要请求结束后才能获得,所以提取关联结果参数的值必须在请求后,而关联函数必须在请求前。


寻找关联点

由于我们在访问请求前设置规则,服务器返回的动态内容都会被关联函数捕获并且保存到参数中,这样实现了对动态数据的捕获,通过后期处理过程,即可完成对动态对象的操作。

以下字符串最可能需要关联

*
登录字符串.一个带有动态数据的登录字符串,比如session
ID或一个时间戳timestamp.

* Date/Time
Stamp.任何使用了日期或时间戳time
stamp,或者其他用户凭证的字符串

* Common
Prefix.
带有特征字符串的前缀,如SessionID或CustomerID,。

#查找需要关联的值

方法1:通过比较脚本

1.录制并保存脚本.

2.创建另一个脚本并录制关键操作,保存脚本。

3.选择Tools
> Compare with Script
来比较脚本

4.脚本中的不同点被高亮。重新审视不同点来判断哪些需要关联。

方法2:回放日志查找

a

扫描脚本视图中的脚本,查找可能需要管理的字符串,如哈希字符串,随机字符串,会话id等。

b

在脚本生成日志中,查找字符串(服务器返回的字符串)第一次出现的时间。

c

扩展回放日志中查找同样的字符串。检查同一个边界上,服务器返回是否包含不同字符串。如果是则需要关联。

loadrunner 脚本优化-关联设置的更多相关文章

  1. loadrunner 脚本优化-检查点设置

    脚本优化-检查点设置 by:授客 QQ:1033553122 VuGen判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的是HTTP状态为200 OK,那么VuGen就认为脚本正确地 ...

  2. loadrunner 脚本优化-事务时间简介

    脚本优化-事务时间简介 by:授客 QQ:1033553122 事务概念 事务是指用户在客户端做一种或多种业务所需要的操作集(actions),通过事务开始和结束函数可以标记完成该业务所需要的操作内容 ...

  3. loadrunner 脚本优化-参数化之Parameter List参数同行取值

    脚本优化-参数化之Parameter List参数同行取值 by:授客 QQ:1033553122 select next row 记录选择方式 Same line as,这个选项只有当参数多余一个时 ...

  4. Loadrunner脚本优化-参数化之关联MySQL数据库获取数据

    脚本优化-参数化之关联MySQL数据库获取数据 by:授客 QQ:1033553122 测试环境: Loadrunner 11 Win7 64位 实操: 1.   安装MySQL ODBC驱动程序 O ...

  5. loadrunner 脚本优化-集合点设置

    脚本优化-集合点设置 by:授客 QQ:1033553122 添加集合点(Insert->Rendezvous) 当一个集合点被插入,VuGen往Vuser脚本中插入一个lr_rendezvou ...

  6. LoadRunner脚本优化之—参数化迭代介

    在LoadRunner的脚本优化时,有时发送给服务器的请求参数化时,服务器返回的内容也会和参数化的内容相对应,例如发送的请求带有查询key=123,则服务器也会返回含有123相关的内容.这时我们在使用 ...

  7. loadrunner 脚本优化-参数化方法

    脚本优化-参数化方法 by:授客 QQ:1033553122 方法一 1.确定需要参数化的内容 2.选中需要参数化的内容 3.右键选中的内容->Replace with a Parameter- ...

  8. loadrunner 脚本优化-关联函数web_reg_save_param()函数详解

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

  9. Loadrunner脚本自动关联和手动关联

    关于Loadrunner关联一.什么时候需要关联 1.关联的含义        关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服 ...

随机推荐

  1. jQuery基础与JavaScript与CSS交互-第五章

    目录 JavaScript框架种类及其优缺点 jQuery库 jQuery对象$ 掌握基本选择器 掌握过滤选择器 掌握表单选择器 RIA技术 常见的RIA技术 Ajax Sliverlight Fle ...

  2. spring框架学习笔记7:事务管理及案例

    Spring提供了一套管理项目中的事务的机制 以前写过一篇简单的介绍事务的随笔:http://www.cnblogs.com/xuyiqing/p/8430214.html 还有一篇Hibernate ...

  3. RabbitMQ服务端配置详解

    RabbitMQ支持三种配置方式: 1) 读取环境变量中配置, 这包括shell中环境变量和rabbitmq-env.conf/rabbitmq-env-conf.bat文件中配置的环境变量 可配置如 ...

  4. kill 结束进程

    kill 支持的信号 kill -1 重启进程 kill -9 终止进程 pkill 和 killall 的区别在于pkill 可以踢终端用户 pkill  -9  -t tty1

  5. Go 新起点

    因项目需求 又得开始啃Go了,虽然比计划早了点,撸起袖子开始干吧~

  6. Python常用模块time & datetime &random 模块

    时间模块前言 在Python中,与时间处理有关的模块就包括:time,datetime 一.在Python中,通常有这几种方式来表示时间: 时间戳 格式化的时间字符串 元组(struct_time)共 ...

  7. Spring Bean 的生命周期,如何被管理的?

    定义 Bean是一个被实例化,组装,并通过Spring IOC容器(BeanFactory和ApplicationContext容器)所管理的对象. 作用域 Spring支持五个作用域,分别是sing ...

  8. 通过Postman进行post请求时传递X-XSRF-TOKEN

    前言介绍 这段时间一个项目后端用的是laravel.在写API接口时通过Postman6进行测试.但是在测试后形式的接口时laravel自带了CSRF验证机制.这就很尴尬了... 所以我们的目的在使用 ...

  9. [TensorFlow] Introducing TensorFlow Feature Columns

    Welcome to Part 2 of a blog series that introduces TensorFlow Datasets and Estimators. We're devotin ...

  10. xshell与xftp使用注意

    1.xshell报ssh服务器拒绝了密码,请再试一次 xshell登录使用的用户名不能是root,要是服务器的用户名,否则连接时会报 ssh服务器拒绝了密码,请再试一次.将root改成服务器用户名即可 ...