LR手动关联参数化问题总结《转载》

所谓的关联就是把脚本中某些写死的代码(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" , , 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中的某个属性的值,如下面这段代码:

业务号:

value="">

XML数据:

οnclick="dosubmit(1)">

οnclick="dosubmit(2)">

sessionId:

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

想要截取到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 空字符

loadrun Java 添加参数_loadrunner手动关联参数化问题总结相关推荐

  1. LR手动关联参数化问题总结

    所谓的关联就是把脚本中某些写死的代码(hard-coded)数据,转变成截取自服务器所送的.动态的.每次都不一样的数据. 一般情况下,比较聪明的服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一 ...

  2. Java添加一个滑动验证码,有啥可难的,分分钟加一个

    滑动验证一般和短信验证码是成对出现,为了避免短信被刷的情况,滑动验证码是一个必须添加的一个功能,下面给大家介绍通过java添加滑动验证的方法. 如何使在电脑端使用的滑动验证,需要引入一段js资源,这里 ...

  3. 关于java多参数的传值问题解析

    https://blog.csdn.net/chenzl0723/article/details/78800819 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 I ...

  4. java构造器(默认构造方法、参数化构造方法)

    构造器 构造器也叫构造方法.构造函数,是一种特殊类型的方法,负责类中成员变量(域)的初始化.构造器的用处是在创建对象时执行初始化,当创建一个对象时,系统会为这个对象的实例进行默认的初始化. 在用户没有 ...

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

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

  6. Loadrunner手动关联详解

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

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

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

  8. java.函数参数太多,Java方法参数太多怎么办—Part 2—引入参数对象,javapart

    Java方法参数太多怎么办-Part 2-引入参数对象,javapart 目录 自定义类型 引入参数对象 本文是这个系列的第二篇文章,介绍了通过引入参数对象应对参数过多的问题.如果你也希望参与类似的系 ...

  9. java运行时参数_运行时的Java 8参数名称

    java运行时参数 Java 8将引入一种更容易的方法来发现方法和构造函数的参数名称. 在Java 8之前,找到参数名称的方法是在编译阶段打开调试符号,这会在生成的类文件中添加有关参数名称的元信息,然 ...

最新文章

  1. 【译】表变量和临时表的比较(转)
  2. Facebook面经全披露,我是怎么拿到机器学习工程师offer的?
  3. 10年布局,这道题都不懂就别想进阿里
  4. web前端项目--用hbuilder调试app项目
  5. 什么是Session?
  6. 云计算时代的DCI技术
  7. 服务器如何自动校准北京时间,北京时间
  8. OpenModelica.VehicleInterfaces离线库安装
  9. 探索性与验证性因子分析
  10. box-sizing属性的理解
  11. 第二十五天 正则表达式
  12. python 进化树_Python ete3有没有一种方法来扩展系统进化树的分支?
  13. 使用GDI/GDI+绘制到D3D9缓冲区的方法
  14. SQL Server数据库技术期末大作业 机票预定信息系统
  15. android手机直播推流
  16. 续篇( 一) TCP 为什么是三次握手,四次挥手?
  17. google hacking常用语法
  18. LeetCode买卖股票之一:基本套路(122)
  19. unity3d 气泡效果_Unity粒子特效插件打造冰与水物语
  20. 让汽车软件进入iPhone时代!

热门文章

  1. 2017.9.25 Xor 失败总结
  2. 【英语学习】【医学】Unit 10 Tumor
  3. 【网络】SSH本地/远程/动态端口转发
  4. H2O Wave教程---基于浏览器的实时显示工具---教程01
  5. sap idoc生成文件传到别的服务器,IDOC 实例详解
  6. oracle事务默认自动提交吗_干货|事务
  7. GCD(Grand Central Dispatch)
  8. 从零开始构建自己的爬虫代理IP数据库并定期检验IP有效性...
  9. Linux下如何杀死终端
  10. 使用vagrant因用户权限导致文件不可写问题的解决