loadrunner参数化功能分享.doc_第1页
loadrunner参数化功能分享.doc_第2页
loadrunner参数化功能分享.doc_第3页
loadrunner参数化功能分享.doc_第4页
loadrunner参数化功能分享.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LoadRunner参数化分享质量管理部郑旭 质量管理部郑旭www.AutomationQA.com目录 目录1. 为什么要进行参数化 1. 为什么要进行参数化2. 参数化类型3. 参数化的操作4. VuGen参数化取值5 Controller中的参数取值 5. Controller中的参数取值6. 同行取值7. 数据向导为什么要进行参数化? 为什么要进行参数化?当我们使用loadRunner录制完脚本以后 需要对脚本进 当我们使用loadRunner录制完脚本以后,需要对脚本进行修改,添加参数化的功能来确保脚本能够动态运行,这里有一个问题,为什么要对录制完的脚本进行参数化呢?下面通过一个例子来说明下例如,录制一个用户在电子商务网站下订单的脚本,无论如何回放 得到的结果都是相同的用户下相同的订单 这个与我们 回放, 得到的结果都是相同的用户下相同的订单,这个与我们用户在商城购物的实际业务场景有着较大的区别,这是由于脚本中的内容都是静态造成的,只有通过参数化才能解决这个问题。参数类型虽然最常用的参数类型是文件型参数,它可以方便地自定义任意数据组合,接下来的参数化操作也是以文件类型为例子开展,但VuGen 也提供了很多实用的参数类型 例如 但VuGen 也提供了很多实用的参数类型。例如1.BPT该参数类型是与QC或ALM产品的BPT模块对应的。当使用它们作为性能测试代 的管 具并 是从其 模块中生成代 时 该 为性能测试代码的管理工具并且是从其BPT模块中生成代码时该功能会读取BPT模块中参数的类型2.Custom这里提供了一个自定义的参数类型,只需要填写参数值即可使用,为了阅读方便也可以写上对应的description 为了阅读方便也可以写上对应的description3.Date/Time该参数类型提供了获取当前时间的参数化方法,虽然在VuGen中可以使用C语言的now()函数来获得当前的日期,但是不如参数化中的简单明了 的简单明了。4 G N 4Group Name场景中有很多个人运行,称该团体为Group这就是说这一组内有一定数目的人,并且做了同样的事情(运行同一个脚本)。在实际运行中 使用该虚拟用户所在的 来代替 运行中, LoadRunner使用该虚拟用户所在的Vuser Group 来代替。但是在VuGen 中运行时Group Name将会是None5 I i N b 5.Iteration Number该参数用于获得当前所在迭代的编号6 L d G N 6.Load Generator Name当负载生成的时候 ,脚本是放在load Generator上执行,通过这个脚本来获取运行时所在的服务器名称7.Random Nummber有些时候需要使用随机的内容,参数化也考虑到了这一点,直接提供生成 定格式的随机内容 可以通过设置最小值和最大值 来实现范 生成一定格式的随机内容,可以通过设置最小值和最大值,来实现范围内随机数的生成,另外也可以在代码中使用C语言的rand函数来进行处理。8 Table 8.TableTable参数类型是一个file类型的增强版,它提供了一些独特的功能,Columns提供了对列的分隔方式的设置。File参数类型的缺点就在于它的分隔符只是使用了逗号、制表符、空格三种格式。如果参数化的对象中同时存在逗号、制表符、空格时只有使用Table参数类型才能解决这个问题。 型才能解决这个问题。9 Unique Number获得 个唯 的数据 在做某些主键属性的时候比较方便 当需要 获得一个唯一的数据,在做某些主键属性的时候比较方便。当需要大量用户名时,我们可以参数化话用户名后的编号,将其设置为唯一的取值即可。10.User Defined Function这是Vugen提供的扩展功能 当需要通过外部程序生成某些数据的时候, 这是Vugen提供的扩展功能 当需要通过外部程序生成某些数据的时候,可以通过dll方式来完成特殊输入,也可以通过lr_load_dll()函数来实现调用外部的dll扩展脚本功能。11.VuserID通过这个参数类型可以虚拟用户的编号,在场景中,每个用户都有一个唯一用户名,区别这个用户名是通过用户的ID来说明。例如Vuser1这里说明用户名为Vuser ( 般为脚本名) 而用户编号为1 如果需要获取用户的编号 名为Vuser(一般为脚本名)而用户编号为1。如果需要获取用户的编号,就可以通过这个参数来实现。经验分享:通过Load Generator Name 、Group Name 、Vuser 、Datetime这四个参数类型,我们可以在脚本中创建出绝对唯一的记录,首先使用LoadGenerator 、Name 区分所在的负载引擎,再通过GroupName 区别组名,然Generator 、Name 区分所在的负载引擎,再通过GroupName 区别组名,然后通过Vuser区别用户,最后通过Datatime获得当前时间,这样生成的就是负载中的绝对唯一的。12. XML作为一种流行的数据格式, XML在业界得到了大量的应用, 而XML参数 作 种 据格式 在 界得类型提供了对XML格式的支持参数化的操作 参数化的操作首先我们先编写 个简单的脚本 如下图所示 首先我们先编写一个简单的脚本, 如下图所示:Action lr_eval_string“param”return 0说明:lr_eval_string是loadRunner非常常用的函数,可以从参数中取得对应的值,并且转化成一个字符串这里的Param在vuGen中以紫色显示,说明这是一个参数。PARAM是参数,而是用来说明这个参数的边界的,在GennerOptions/Parameterization中可以设置参数的边界字符。这样就完成了参数化的操作,参数值被保存在Parameter List中,按CTRLL组合键单击工具栏上的Parameter,打开参数列表窗口,如下图所示单击add Row 按钮,并添加相应的内容经验分享:添加完成后单击右下角的 经验分享:添加完成后单击右下角的CloseClose关闭整个 关闭整个Parameter List Parameter List 窗口,整个 窗口,整个参数化内容设置完毕, 回放一下,会发现完全没有任何效果,这里还要多做两件 参数化内容设置完毕,回放一下,会发现完全没有任何效果,这里还要多做两件 参数化内容设置完毕,回放 下,会发现完全没有任何效果,这里还要多做两件 参数化内容设置完毕,回放 下,会发现完全没有任何效果,这里还要多做两件事情: 事情:1. 1.设置运行的次数,打开 设置运行的次数,打开Run_time Run_time SettingSetting,找到 ,找到Run logic Run logic,设置迭代次数为 ,设置迭代次数为3322 开 开 Log Log显示参数存取值的信息 显示参数存取值的信息打开 打 打 打开Run time Run time Setting Setting中的 中的Log Log选项,选中 选项,选中 22打开 打开Log Log显示参数存取值的信息 显示参数存取值的信息打开 打开Run_time Run_time Setting Setting中的 中的Log Log选项,选中 选项,选中Enable Enable Logged Logged 并且使用 并且使用Always send message Alwayssend message 在在Log Log的等级中设置使 的等级中设置使External log Externallog并并且选中 且选中Parameter log Parameter log设置完成之后,关闭设置的对话框,再来运行一次脚本,就会 设置完成之后,关闭设置的对话框,再来运行一次脚本,就会看到 看到Replace Log Replace Log窗口中出现了每次参数取值的结果。 窗口中出现了每次参数取值的峁参数取值的结果如下:注意:蓝色的部分表明的是参数的取值,只有参数日志打开的时候才会出现可以看到通过参数化,每次从Param这个参数中取得的值都各不相同,并且按照记录的顺序来读取。 按照记录的顺序来读取。参数在VuGen脚本开发中起到非常大的作用,可以用它来做很多的事情,例如,在VuGen里面编写以下脚本:然后将sites参数的内容修改为想要访问的几个门户网站地址,设置迭代的次数为4,在运行一次,即可自动访问以上4个门户网站在vugen脚本中,很多地方都是可以直接填写参数的,从而大大 在 g 脚本中,很多地方都是可以直接填写参数的,从而大大简化了脚本开发过程。可以简单地把参数理解为一种vugen自己的高级变量,相对于C语言变量来说要高级一点。既然参数的作用这么大 那么什么地方可以使用参数化呢? 既然参数的作用这么大,那么什么地方可以使用参数化呢?基本上所有LoadRunner函数中带“”内容都可以直接使用参数化,把刚刚自动访问四大门户网站的脚本切换到tree模式下,双击函数,在出现的图形化函数设置中,文本框后有ABC按钮,这些属性就可以直接使用参数化,例如web url函数中的URL和Target frame就 以直接使用参数化,例如 _ 函数中的 和 g 就支持参数化除了上面这种常用的参数化方法外 我们也可以通过下面的这种方 除了上面这种常用的参数化方法外,我们也可以通过下面的这种方法来实现。首先 在Parameter List窗口中 单击左下角的new按钮新建参数 首先,在ParameterList窗口中,单击左下角的new按钮新建参数。接着添加一个参数param_1然后找到需要参数化的内容,在代码中直接将其改写成为param_1即可,或者也可以选中要参数化的内容 在右键菜单中选择Use Existing parameter 下的param 1参 内容,在右键菜单中选择Use Existing parameter 下的param_1参数进行替换,如下图所示:通过param list可以添加新的参数,或者重命名参数和删除参数 在 li 的参数名单上单击鼠标右 删除参数, 在parameter list 的参数名单上单击鼠标右键,如下图所示注意:当在parameter list中修改参数名的时候,脚本中的对应参数化名称都会自动变为新的参数名 的对应参数化名称都会自动变为新的参数名。参数列表中Param type表示参数类型,当使用File参数类型的时候 会出现Fil 选项 该选项提供了浏览文件的功能 便于选择 候, 会出现File选项,该选项提供了浏览文件的功能,便于选择和填写参数存放的文件名中间是参数值列表区,有参数表的维护功能,比如添加、删除行或者列经验分享:在默认情况下参数化记录只显示100条记录,超过100条记录可以被操作,但是无法在vugen中显示出来,修改安装目录config目录下vugen.ini文件中的Param Table属性下的Max VisibleLines为想显示的记录条数则可。Edit with notepad 使用记事本打开参数文件,参数存放在一个dat(CSV)格式的文件中,该文件通过逗号分隔符说明列 回车说明行 其中第 行作为属性显示 从编辑 说明列,回车说明行,其中第一行作为属性显示,从编辑的方便角度来说,一般都会使用这个按钮来修改参数值D Wi d通过数据向导从 db 导入数据后面会详细 Data Wizard通过数据向导从odbc导入数据后面会详细介绍表 文件格式 这 包括 种格式 File Format表示文件格式,这里包括了以下两种格式(1)Column列的格式包括Comma(逗号分隔符)Tab制表分隔符space 空格分隔符,用来帮助我们分隔列,默认选择comma该格式也是行业规范的CVS格式(2)First data:行的记录是从第几行开始的,设置几就是从第几行开始作为数据行,不计算标题设置First data为2时,参数列表为ABC的时候,第1条记录从A变成B我们除了可以通过Run-time Settings中开启参数的扩展日志外, g也可以通过lr_output_message函数来把参数值输出到日志中例如 例如lr_output_messagelr_eval_string“param”我们可以使用这个函数对参数强行取值,从而查看参数化的取值结果 数化的取值结果现在新建一个脚本实例,脚本的内容如下Action Actionlr_output_messagelr_eval_stringquotparamquotreturn 0 return 0参数param内容为ABCDE 参数param内容为ABCDE文件类型参数定义各种取值的关键在于 l 文件类型参数定义各种取值的关键在于select next row和update value on这两个项Select next row 包含以下选项Sequential:顺序取值Random 随机取值 Random:随机取值Unique:唯一取值Same line as :取某个参数的同行Update value on 包含以下选项Each iteration:每次迭代更新 Each iteration:每次迭代更新Each occurrence:每次取值更新Once:只更新一次接下来我们逐一进行下分析它们的功能。VuGen中参数化取值1.Sequential取值(1)Sequential Each iteration在默认的运行结果中可以看到脚本运行的结果是Action.c3: A。在Sequential Each iteration组合下,第一次取值的内容是A 内容是A接下来设置下Run logic将迭代的次数从1修改为2,再运行一次, 接下来设置下Run logic将迭代的次数从1修改为2,再运行 次,这次运行的结果是AB而Each iteration是基于Run Logic 中迭代次数完成记录的变化操作的。继续设置迭代的次数为5,运行的结果为ABCDE如果我们设置了迭代的次数为7,那么会怎么办?也就是迭代的次数超过了参数记录的数目, 会取 也就是迭代的次数超过了参数记录的数目,会取什么值呢?设置以后,再运行1次脚本,结果为ABCDEFA,可以看到顺序取值的记录是从上到下,当记录取完后,再重新从记录的头开始取值。思考题1: 思考题1:如果把左边的脚本改成右边的形式,如下左右图所示设置Run上的迭代次数为2 ,请问参数化结果是多少?1AAABBB 2ABCDEF 3AAAAAA 4ABCCDB答案:AAABBB经验分享:当使用Update value on eachiteration 只有出现了strart iteration也就是 iteration 只有出现了strart iteration也就是迭代才会触发记录变化,否则取值内容均不会发生变化 发生变化思考题2:尝试下把刚刚的脚本中的Action迭代的次数设置为3,将最后的lr_eval_string“param”设置在Vuser_end函数中,结果又是如何呢? _1ABCDEFA 2AABBCCC3ABCDEFF 3 C 4AAAAAAA答案:2AABBCCC经验分享:当设置U d l 为 E h i i 当设置Update value on 为 Each iteration即使参数没有被调用,记录仍然下移(2)Sequential Each occurrence q将param的update value on 选项从each iteration 修改为eachoccurrence 再运行一次脚本i Actionlr_eval_stringquotparamquotreturn 0 return 0结果为A,设置了Run Logic 中的iteration次数为2次,会发现结果和 gEach iteration并无区别。那么Each occurrence 有什么特殊之处呢?将脚本修改为A i Actionlr_eval_stringquotparamquotlr eval stringquotparamquot lr_eval_string param return 0再次运行脚本,结果为ABCD分享总结:对比Each iteration 会发现结果从AABB变成了ABCD 这就是each occurrence的作 BB变成了ABCD,这就是eachoccurrence的作用,只要取一次参数值,那么记录就会发生变化,将Run设置迭代的次数为3 结果为ABCDEF 将Run设置迭代的次数为3,结果为ABCDEF思考题3如果把脚本改为如下形式 如果把脚本改为如下形式Actioni i int ifori0ilt2i lr_eval_stringquotparamquotlr_eval_stringquotparamquotreturn 0并且设置了Run上的迭代次数为2,请问参数的结果是多少?1AAABBB 1AAABBB2ABCDEF 2ABCDEF3AAAAAA4ABCCDB答案:2ABCDEF 答案:2ABCDEF由于each occurrence是每次取值 由于each occurrence是每次取值更新,所以我们的结果是ABCDEF(3)SequentialOnce (3)SequentialOnce相对来说once的取值比较简单,对于整个脚本来说参数值只取1次 再也不需要更新 只取1次,再也不需要更新设置param参数Update value on 为once再次运行脚本 p pActionlr_eval_stringquotparamquotreturn 0无论如何设置迭代或者for循环,取到param的值都是A, 无论如何设置迭代或者for循环,取到param的值都是A,因为第一取到的值是A以后再也不更新,所以param的值是不变的现在总结下select next row 下 Sequential选项参数的取值情况如下:Update valueon 取值结果Eachiteration 当设置了Run上的迭代次数后,参数会依次取值,当取值超过参数化记录的条数的时候,回到列表头继续取值Eachoccurrence参数每取一次值,记录变化,当取值超过参数化记录的时候,回到列表头继续取值Once 第一次取值后,再也不更新新的记录2 Random取值 2.Random取值顺序取值的各种方法搞明白后,Random取值(随机取值)就比较简单了。随机取值可以实现在参数列表中随机选择一条记录,将param这个参数的select next row取值方法从sequential改为Random。再次运行脚本,会发现每次运行的内容都不尽相同 VuGen会从参数列表中随机取出 运行的内容都不尽相同,VuGen会从参数列表中随机取出一条记录,其取值的次数受到Update value on 选项的限制。1Random Each iteration每当一次新的Starting iteration开始,重新从参数列表中取一次随机值 取 次随机值2Random Each occurrence每当取1次参数值,从参数列表中重新获取一次随机值3R d O 3Random Once当第一次取到随机内容后,再不更新记录经验分享如果需要随机且不重复的记录应该如何实现?这个问题可以通过参数化数据源来实现 通过Random取值的方式是无法 通过参数化数据源来实现,通过Random取值的方式是无法实现这个需求的,但是如果把参数的值先随机再放到参数文件中那么使用顺序取值取到的内容就是相对随机了。大多数时候随机的这种方式其实并不像我们想的那么好用,因为顺序取值很多时候的效果和随机是一样的 对服务器来 因为顺序取值很多时候的效果和随机是 样的。对服务器来说某接口的调用数据使用顺序和随机其实差不多。下面总结一下选择select next row 下的Random 选项时,参数化的取值情况 如下图 参数化的取值情况,如下图Updatevalueon 取值结果Eachiteration 当设置了Run上的迭代次数后,每产生一次新的迭代,参数随机取一次值 随机取 次值Eachoccurrence每当参数被取值一次,参数化随机选择一条记录Once第一次随机取值后,一直沿用这条记录4 Unique 取值 4.Unique 取值Unique取值是一种更加高级的顺序取值,Unique强调的是取值的唯一性,但是违反了该规则也能继续运行,VuGen提供了when out of values的选项来处理非唯一性的情况。When out of values 包含3个选项1Abort Vuser当参数取值超出参数表记录的条数时 忽略当前虚拟用户 当参数取值超出参数表记录的条数时,忽略当前虚拟用户2 Continue in a cyclic manner当参数取值超出参数表记录的时候,使用循环的方式取值3Continue with last value 3Continue with last value当参数取值超出参数表记录的时候,使用参数表中的最后一个值从参数化使用Unique的目的来说,脚本需要的是唯一的记录 从参数化使用Unique的目的来说,脚本需要的是唯 的记录,那么运行时对参数的取值次数超过了参数记录的条数自然违反了这个策略,所以需要停止脚本,Abort Vuser是常用的选项 选项。那么使用另外两个选项有什么好处呢

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论