LoadRunner中脚本增强技术之参数化

1.4脚本增强技术之参数化
参数化是为了实现不同用户的不同操作。逻辑相同、数据不同。同一个脚本运行,但是发送的数据不同。
为什么要做参数化?在性能测试领域,脚本之所以要进行参数化操作,原因一般有两种:
•功能角度:一般来说,如果业务功能中某些数据具有唯一性的诉求,则一般要进行参数化或者相关的处理。
•性能角度:一般来说,如果服务器端有缓存操作(查询类)的业务,则需要考虑参数化。
从悲观的角度来说,可以考虑增加参数值的个数,使得每一次操作都不重复,即达到不走缓存的效果。
从真实模拟的角度来说,我们需要调研生产环境中,业务的缓存使用比例,然后设置合适的参数值,使得: 缓存使用率=(执行次数-参数值个数)/执行次数。
1.4.1 参数化的操作
在LR中,参数化的实现方式(操作)很多,但是从本质上来说,我们需要保证两点:参数存在且有值,脚本中调用参数。
在action()函数中,对text右键选择replace with a Parameter,将选中的text替换成参数。
在这里插入图片描述
在这里插入图片描述

在此弹窗中可以修改参数的名称以及文件类型,此处先选择默认即可,单击OK继续。

这个时候就可以发现text已经变成{Newparam},说明我们已经把text参数化了,那么怎么设置他的值呢?点击参数列表。或者使用ctrl+L快捷键。
在这里插入图片描述

在参数列表界面,点击edit with NotePad,设置参数的值,这里需要注意的是,我们发现参数会输入空。这是因为在写参数文件的时候,输入了空格,我们要保证光标在输入参数的下一行。效果如下:
在这里插入图片描述

将run-time setting循环次数设置为4,打开log的扩展参数级别运行脚本。
在这里插入图片描述

这样就完成了参数化,我们也可以先在参数列表中右键NewParameter然后create table给参数赋值,最后在脚本中使用{参数名}进行参数化处理。函数的方式意义不大这里就不介绍了。
1.4.2Parameter List界面介绍

在这里插入图片描述

•Parameter type :其他类型放到后面,现在主要说file类型
•File选项当类型为file类型则会出现该选项,便于选择和填写参数存放的文件名。
中间的是参数区,主要是用来维护参数表,添加、删除行或者列。
•Edit with Notepad:使用记事本打开参数文件,从编辑方便的角度来说,一般都会使用这个按钮来修改参数值。
•Data Wizard 通过数据向导ODBC导入数据
•File format:文件格式,这里包括以下两种:
•Column:列的格式包括Comma(逗号分割符)、Tab(制表位分割分)、Space(空格分割符),用来帮助我们分隔列。默认选择Comma,该格式也是行业规范的CSV文件格式。
•First data:行的记录是从第几行开始,设置几就是从第几行开始。
•Select column :设置参数取第几列的值,有两种方法
•by number:通过数字选择列数,参数取该列数的值
•by name : 通过列名选择列数,参数取该列数的值
在LR中,参数的取值方式一般收到以下两个选项的影响
•Select next now:该选项是用来设置参数获取、更新参数值参数值得方式。可选的选项有4个
•Sequential:顺序取值
•Random:随机取值
•Unique:唯一取值。在LR中,对于唯一的实现,是采用分配的方式。
所谓的唯一,实际效果是先分配再顺序。即先将所有的参数值按照顺序、按块(块大小)的方式依次分配给每一个虚拟用户,然后虚拟用户在执行脚本的过程中只会使用各自所分配的值。
•Same line as X:该选项要求参数列表中至少存在两个及以上的文件类型的参数时才会出现。该选项相当于将两个参数建立起了一一对应的关系。该选项不参与和Update选项的组合。
•Update value on:该选项是用来设置LR更新参数值的时机
•Each iteration:每一次迭代。是指每一次迭代开始的时候,参数就会去获取或者更新参数值,在下一次迭代之前,无论脚本中对于该参数是否调用、调用一次还是多次,参数的值都不会改变。
该模式下,参数值的变更只和迭代有关,和调用无关,参数值的变更次数等于迭代次数。
•Each occurrence:每一次出现。所谓出现就是指脚本中出现了参数的调用,是指每一次调用之前,参数都会去获取或更新参数值。
该模式下,参数值的变更就和调用有关和迭代无关。参数值的变更次数等于调用次数。
•Once:仅一次。是指参数参数第一次被调用的时候会获取一个参数值,然后在虚拟用户的生命周期中,该参数的值不会再发生改变
参数值的变更次数等于1。
1.4.3Vugen中的参数
我们的脚本是:

Action()
{
lr_output_message(“the value of param is :%s”,
lr_eval_string("{param}"))

lr_output_message(“the value of param is :%s”,
lr_eval_string("{param}"))
return 0;
}
参数取值为:ABCDEFG
迭代次数为:2
在这里插入图片描述

1.4.3.1Sequential取值方式
1.Sequential+Each iteration
顺序取值,每次迭代时获取新的参数值
第一次迭代:取A 输出2次AA
第二次迭代:取B 输出2次BB
结果为:AABB
在这里插入图片描述

2.Sequential+Each occurrence
顺序取值,每次出现时获取新的参数值
第一次迭代:
第一次出现:取A
第二次出现:取B
第二次迭代:
第三次出现:取C
第四次出现:取D
结果为:ABCD
在这里插入图片描述

3.Sequential+Once
顺序取值,仅一次
第一次迭代:param取A,在这个虚拟用户生命周期内均为A,所以结果是:AAAA
在这里插入图片描述

如果迭代次数很多,参数值不够,在默认情况下,LR是顺序取值的。
在这里插入图片描述

1.4.3.2Random取值方式
1.Random + Each iteration
随机取值在每次迭代效果为: XX|YY ,其中|为迭代分割

  1. Random + Each occurrence
    随机取值在每次出现效果为: X1X2|Y1Y2 ,其中|为迭代分割。
  2. Random + Once
    随机取值在仅一次效果为: XX|XX,其中|为迭代分割。

1.4.3.3Unique取值
顺序取值和随机取值,从本质上是没有区别的,一旦牵涉到值得分配或者唯一性诉求,则顺序取值和随机取值是无法满足要求的。此时必须选择unique方式
当select next now 选择unique的时,且update value on不为once的时,我们看到Parameter List下面的选项可选,我们看一下这些选项的含义
在这里插入图片描述

•When out of value:out of value是指虚拟用户变更参数值得次数大于所分配的值得个数时。
•About Vuser:中止虚拟用户,该选项可以保证每一次的数据都是唯一的
•Continue in a cyclic manner :继续执行,并循环使用参数值
•Continue with last value :继续执行,并且使用最后一次的值
•Allocate:指定块大小的方式,有两种
•Auto:自动方式,只有选择每次迭代才可用。此时的块大小会自动等于运行时设置中—Run logic 中所设置的迭代次数
•Allocate 手动设定块大小

  1. Unique + Each iteration
    当设置了Run上的迭代次数之后,按照记录顺序读取,当记录超出列表后,执行when out of value 策略
  2. Unique + Each occurrence
    每当参数被取值一次,按照记录顺序读取,当记录超出列表后,执行when out of value 策略
  3. Unique +Once
    第一次取值后一次不变
    2.4.4Controller的参数
    场景是生成负载的关键部分,那么当一个脚本在场景中被多个用户执行时,参数会如何变化?
    首先介绍一下场景设置的入门知识。
    打开Tools菜单下的Create Controller Scenario选项,会弹出:
    在这里插入图片描述

在这里选择Manual Scenario(手工场景),虚拟用户数为5个,其他选项使用默认值,确定后进入场景设计首页。
在这里插入图片描述

按照迭代次数循环
在这里插入图片描述

点击运行脚本

点击run完后的用户,在右键虚拟用户,选择show vuser log,即可查看参数日志。
在这里插入图片描述

1.4.4.1Sequential取值方式
1.Sequential+Each iteration
每个用户都是第一次迭代都是AA第二次迭代都是BB
在这里插入图片描述

2.Sequential+Each occurrence
每个用户都是第一次迭代都是AB第二次迭代都是CD

在这里插入图片描述

3.Sequential+Once
每次迭代都是AAAA,从参数化的角度来说选择 Once选项没有实际意义。

在这里插入图片描述

1.4.4.2Random取值方式
1.Random + Each iteration
每个用户都是随机取值

2.Random + Each occurrence
每个用户都是参数每次出现,随机取值

3.Random +Once
每个用户第一次随机取值,之后参数值不变

1.4.4.3Unique取值
1.Unique + Each iteration
按照设置的块大小分配参数,用户顺序取块,顺序取块中的值,并按照Each iteration更新值,当值不够时,执行when out of value 策略,来看一下
效果:
在这里插入图片描述

2.Unique + Each occurrence
按照设置的块大小分配参数,用户顺序取块,顺序取块中的值,并按照Each occurrence更新值,当值不够时,执行when out of value 策略
在这里插入图片描述

  1. Unique +Once
    按照设置的块大小分配参数,按照once更新值,当值不够时,执行when out of value 策略在这里插入图片描述

这地方应该能看懂吧,我不知道怎么描述了,不懂请找我

1.4.5 同行取值
接着来看最后一种Select next row 记录选择方式Same line as ,这个参数只有当参数多于一个时才会出现,起作用是根据某一个参数的行号取同一行。场景:城市名和辖区名,城市名是:北京、北京、北京 天津、天津、天津 辖区名:大兴、丰台、海淀、北辰、宁河、西青。 让城市名跟随辖区名,达到我选了辖区、选择对应的城市,达到一一对应的效果。如下图:

在这里插入图片描述
在这里插入图片描述

1.4.6参数类型
虽然常用的参数类型是文件类型,它可以方便地自定义任意数据组合,但Vugen也提供了许多很多实用的参数类型。我们简单的了解各种类型的参数特点
1.4.6.1 BPT
该参数类型是与QC或ALM产品中的BPT模块对应,一般用不上。
1.4.6.2 Custom
这里提供了一个自定义的参数类型,只需要填写参数值即可使用,为了阅读方便也可以写上对应的Description。
1.4.6.3 Date/Time
该参数类型提供了获取时间的参数化做法,在参数化时选择Date/Time选择时间格式即可。
在这里插入图片描述

1.4.6.4 Group name
通过这个参数可以在脚本中获取当前脚本所在的GroupName,用于某些处理。

1.4.6.5 Iteration Number
该参数用户获取当前所在的迭代编号
1.4.6.6 Load Generator Name
当负载生成时,脚本是放在 Load Generator 上执行,通过这个参数可以获得脚本运行时所在服务器的名称
1.4.6.7 Random Number
有些时候需要使用随机的内容,参数化也考虑到了这一点,可以通过设置最大值,最小值,来实现范围内随机数的生成
1.4.6.8 Table
Table参数类型是一个File类型的增强版,他提供了一些独特的功能,不做详细介绍有需求可自行百度。

在这里插入图片描述

1.4.6.9 Unique Number
获取一个唯一的数据,在做某些主键的属性时会比较方便。
当需要大量用户名时,我们可以参数化用户名后面的编号,比如 admin_{userid}
1.4.6.10 User Defined Function
这是VuGen提供的扩展功能。当需要通过外部程序生成某些数据的时候,可以通过dll的方式完成输入
1.4.6.11 Vuser ID
通过这个参类型可以虚拟用户的编号。在场景中,每个用户都有唯一的用户名,区别这个用户名时通过用户ID来说明的。例如Vuser1,这里说明用户名为Vuser(一般为脚本名)而用户编号是1.如果需要获取用户的编号可以使用这个参数来实现。
1.4.6.12 XML
作为一种流行的数据格式,XML在业界得到了大量的应用,而XML参数类型提供了对XML格式的支持

1.4.7参数和变量
在Vugen中,默认使用{}的字符串称之为参数,参数最大的优点就是在LoadRunner中可以直接应用,但是参数并不是能写在LoadRunner函数中的任意位置,如果想要实现对无法直接参数化的部分进行参数化,可以使用lr_eval_string(“{param}”),例如:
在这里插入图片描述

变量和参数的不同:
•变量默认是局部变量,只在当前action中有效。参数是全局的。变量实现全局变量的方式有两种,第一种将变量定义放在init的最前面,第二种将变量定义在globals.h中。
•变量的定义必须在函数的最开始的位置进行(C)。
•变量是不能直接使用在双引号中,要使用的话,则需要使用占位符(绝大多数的LR的函数不支持占位符)。
•参数是必须有调用格式的,且参数的调用必须发生在双引号之内。

需要掌握的函数:
sprintf:赋值字符串给字符串数组变量的。
在这里插入图片描述

lr_save_string:是将变量的值赋值给一个参数。
在这里插入图片描述

lr_eval_string:强制解析(迭代递归)为字符串。作用是将参数转为变量。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷雨飞鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值