所谓的关联就是把脚本中某些写死的代码(hard-coded)数据,转变成截取自服务器所送的、动态的、每次都不一样的数据。

一般情况下,比较聪明的服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要数据的是不是同一个浏览器,一般称这个辨识码为SessionID。对于每个新的请求,服务器都会产生新的SessionID给浏览器。这也就是执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要数据,服务器发现这个Session ID是失效的或者它根本不认识这个Session ID,当然就不会传送正确的网页数据给VuGen了。

要对付这种服务器,必须想办法找出这个Session ID到底是什么、位于何处,然后把它撷取下来,放到某个参数中,并且取代脚本中有用到Session ID的部分,这样就可以成功骗过服务器,正确地完成整个交易了。

一、什么地方需要关联

凡是脚本每次执行时都必须获得唯一标识的地方都需要关联。假如脚本需要关联,如果不做关联是不会执行通过的,也就是说会有错误消息发生。不过很遗憾,并没有任何特定的错误消息是和关联有关系的。会出现什么错误消息,与系统实际的错误处理机制有关。错误消息有可能会提醒用户要重新登录,但是也有可能直接就显示HTTP 404的错误消息。

二、如何做关联

关联会用到下列的函数:

1、web_reg_save_param;

2、web_create_html_param;

3、web_create_html_param_ex;

其中,web_reg_save_param的语法为:

web_reg_save_param ( "Parameter Name" , < list of Attributes >, LAST );

web_create_html_param和web_create_html_param_ex这两个函数主要是保留以兼容以前旧版本。建议使用web_reg_save_param函数。

那么,如何找出要关联数据呢?简单地说,每一次执行时都会变动的值,就有可能需要做关联。VuGen提供两种方式帮助用户找出需要做关联的值:自动关联和手动关联。

自动关联一般情况下比较简单,在此就不进行说明了,下面主要是总结手动关联时的一些方法以及出现的一些问题的解决方式。

三、手动关联总结

1、正常情况下的手动关联:web_reg_save_param("SessionId","LB=value=\"","RB=\">",LAST);

LR:所需截取字符串的左边界

RB:所需截取字符串的右边界

如果左右边界中存在各种特殊字符,如双引号等,则需先用\进行转义

一般情况下,如果所截字符串的左右边界比较唯一的话,可以直接用上面的方式进行获取,无需设置别的属性了。

(“LAST”是固定的。。。)

2、如果进行关联后,有报错信息,提示参数化未成功,有可能是以下几方面的原因:

1)左右边界取值不正确,可以进入Generation log中,查看在关联的参数左右边界是否正确

2)关联函数的位置放置错误

可以将log设置成输出Extended log。

设置方法为:Vuser->Run-time Settings->Log属性中,选中Extended log 并选中下面三个日志。

在输出的日志中找到所要关联化的参数第一次的输出位置(注意是response返回的值,不是request中的),对照左侧的脚本行数,将关联函数放在此行数之前,即可。

3、关联没问题,运行时无报错,可就是得不到参数的值,可以从Extended log中找到原因。

将Replay Log中的日志改为输出Extended log->Parameter substitution日志,再重新运行一次,便可看到所关联参数的变化情况。

有一次我在录制了Flex协议的脚本后,将JSessionId做好手动关联,运行无任何错误,可是将JSessionId打印时却得不到任何值,一直找不到原因,后来通过这种日志输出,看到了JSessionId的一个数据变化的过程,得知由于flex编码中含有十六进制数,在我需要截取的参数前,有一串"\\x04\\x00\\x06",在获取参数时由于这一串数的影响无法获取到我所需要的值,所以后来就将web_reg_save_param函数中一个属性SaveOffset设置为4才得到了所需的字符串。

SaveOffset的用法为:当找到符合的动态数据时,从第几个字符开始才开始存储到参数中。此属性值不可为负数,其默认值为0。

4、另外一种设置方法可以使左右边界简单化

针对jsp页面中,如果要获取form中的某个属性的值,如下面这段代码:

<form method="post" name="frmLogout">

<div align="left">

<br>

业务号:

<input type="text" name="serviceId" size="100" maxlength="20"

value="">

<br>

XML数据:

<textarea name="data" rows="10" cols="100"></textarea>

<br>

<input type="submit" name="submit" value="提交"

οnclick="dosubmit(1)">

<input type="submit" name="submit" value="取消"

οnclick="dosubmit(2)">

<br>

sessionId:

<input type="text" name="sessionId" size="100" maxlength="20"

value="af0616ae-cbe7-412d-8965-1d33ba55fc3b">

<br>

</div>

</form>

想要截取到sessionId的value值,如果直接用左右边界截取,由于程序中的太多的value,所以需要截取左边界为name="sessionId" size="100" maxlength="20" value=",

由于此边界的内容显示时有换行,所以如果以上面那一段内容作为左边界的话可能会有截取不成功的情况,所以在这种情况下,我们可以采取以下方式:

web_reg_save_param("SessionId","LB=value=\"","RB=\">","ORD=5",LAST);

ORD可以定位整个数据中取第几个值

利用ORD属性,在左边界出现的第5次时再进行截取。如果不确定自己所要截取的这段字符串是在第几次出现,那么可以先将ORD设置为ALL,然后通过Extended log->Parameter subsitution日志,可以看到所有左右边界一致的截取的字符串数组,再确认自己所需截取的字符串是在这个数组中的第几个位置,将ORD设置为几即可。

5、如果某个参数关联成功,可是运行时却发现还会报错,那么可以考虑一下是不是因为有别的值跟你所截取的这个参数相关联,随着那个值的变化,你所截取的这个参数也会进行某一方面的变化,那样的话就需要将那个变化的值同样进行参数化。

6、如何打印出参数值

解决方法:利用lr_eval_string与lr_output_message这两个函数来打印出参数值。

例:lr_output_message("SessionId=%s",lr_eval_string("{ParameterName}"));

打印参数值这段代码所放的位置一定是在已经获取到参数值后,才可打印出来。

四、参数说明:

ParamName:存放动态数据的参数名称。

list of Attributes:其他属性,包含 “Notfound”、“LB”、“RB”、“RelFrameID”、“Search”、“ORD”、“SaveOffset”、“Convert”以及“SaveLen”。

下面将详细说明每个属性值的意义:

1、Notfound:指定当找不到要找的动态数据时该怎么处理。

当指定Notfound=error时,表示着找不到动态数据时,就发出一个错误消息。此为该属性的默认值。

当指定Notfound=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,表示一直到结尾的整个字符串都存入参数中。

五、转义字符总结

在做手动关联时,取边界值的时候,会经常用到转义字符,现将转义字符整理如下:

\b 退格

\f 换页

\n 换行

\r 回车

\t 水平制表

\v 垂直制表

\\ 反斜杠

\? 问号字符

\' 单引号字符

\" 双引号字符

\0 空字符

LoadRunner手动设置关联时关联结果的值为空

使用LoadRunner录制脚本时,许多应用程序都使用动态值,每次使用应用程序时这些值都会发生变化。LoadRunner通过关联解决这种问题,关联将动态值保存到参数中。

下面进行手动设置关联时,出现关联结果的值为空:

原因在于:

设置关联有手动关联和自动关联两种方式,LoadRunner安装的时候默认选择了自动关联方式,导致关联结果的值为空。

点击工具------>录制选项------>取消勾选【在录制期间启用关联】

然后重新录制一下脚本,按照之前的方法手动关联结果就可以了。如图,录制快照中的文本 和回放快照中的文本数据不一样,所以我们手动选择它们进行关联。

手动关联完成后,脚本里就会生成关键函数。

执行再次回放操作,即可回放成功。

转载于:https://www.cnblogs.com/scarlett-hy/p/10173527.html

LR手动关联参数化问题总结相关推荐

  1. loadrun Java 添加参数_loadrunner手动关联参数化问题总结

    LR手动关联参数化问题总结<转载> 所谓的关联就是把脚本中某些写死的代码(hard-coded)数据,转变成截取自服务器所送的.动态的.每次都不一样的数据. 一般情况下,比较聪明的服务器在 ...

  2. Loadrunner手动关联详解

    Loadrunner手动关联详解 一.关联的含义: 关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到 ...

  3. LoadRunner 技巧之 手动关联与预关联

    上一节介绍了关联的原理与自动关联,除了自动关联还有另外两种关联方式:手动关联与 预关联. 手动关联                                                   ...

  4. VS2010 MFC中改变static字体颜色、大小、背景颜色(自定义类),及手动关联变量的方法...

    在MFC的Dialog工程中生成一个CStatic的自定义类,类名例如为:CColorStatic 定义必要的变量: protected:COLORREF m_crText; // 字体颜色COLOR ...

  5. MFC开发IM-第五篇、MFC中改变static字体颜色、大小、背景颜色(自定义类),及手动关联变量的方法

    在MFC的Dialog工程中生成一个CStatic的自定义类,类名例如为:CColorStatic 定义必要的变量: protected:COLORREF m_crText; // 字体颜色COLOR ...

  6. 手动关联endnote20和wps

    最近因为电脑重装了,所以陆陆续续有很多问题,今天遇到的就是wps和endnote的关联消失了,百度之后知道了可以手动在wps里添加"EndNote Cwyw.dll"解决,但因为我 ...

  7. 使用connet或者手动关联react和redux

    在正式项目当中我们一般是使用react-redux这个库提供的 Provider 和connect这两个库来关联react和redux,但是我们也可以使用手动关联,在学习过程当中不要求接近,理解最原始 ...

  8. VS2012手动关联xaml与CS文件

    前言: 这个只是记录一下,自己偶尔碰到的一个问题.关于xaml文件与cs文件失去关联关系. 简介: 一般来说,当我们通过VS来添加一个Window或者UserControl时,VS会自动帮我们添加两个 ...

  9. LoadRunner教程09:LR自动关联

    一定要在回放脚本执行出错的时候然后在进行关联扫描:如下所示,点击就行 在进行关联扫描以后会出现下图,列出需要进行关联的两个部分,点击右下角的关联即可,然后在回放脚本,发现可以正常运行

最新文章

  1. 阿里云 centos 远程可视化桌面部署
  2. SCALA中类的继承
  3. 微信小程序知识点梳理
  4. spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring
  5. Vue源码分析系列四:Virtual DOM
  6. matlab循环遍历数组_Matlab - 访问for循环中最大值的索引,并使用它从数组中删除值...
  7. linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(修改配置文件)
  8. 8种常见的 代码 编译 软件 !!
  9. 智能机器人机器人心得_你是机器人吗
  10. 我爱你 php代码怎么打,微信翻译代码我爱你怎么写?微信翻译表白代码介绍大全...
  11. Struts2,Hibernate,Spring框架学习总结
  12. LaTeX入门|(1)从Word到LaTeX:LateX排版常用指令
  13. iphone 中的大小和像素问题
  14. 自己做小程序开个社区团购可行吗?
  15. 简单粗暴理解与实现机器学习之K-近邻算法(三):距离度量、欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化距离、余弦距离、汉明距离、杰卡德距离、马氏距离
  16. Java PPT转PDF 亲测无水印
  17. 关于 YCbCr(YUV) 格式视频流的介绍
  18. h5页面输入框在安卓手机上被键盘挡住
  19. 浮云绘图编辑器之文字、图片基础图元操作及源码,用于文本描述及拓扑图、平面布局图开发
  20. 【运筹学】不平衡运输问题 ( 不平衡问题转化为平衡问题 )

热门文章

  1. Ionic 2 Beta 11 升级 RC 0 的坑 (update: RC 1 已经出来了,稍微没那么坑一点点)
  2. php中的单引号与双引号详解
  3. 转:GridView 中如何给删除按钮添加提示
  4. TCP连接的建立和终止
  5. spring整合springmvc和mybatis
  6. 关于series的统计
  7. 克服拖延的11种方法
  8. OC语言--SEL类型小记
  9. 【Oracle 常用查询】oracle表空间使用率统计查询
  10. Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏