Controller中的参数—性能测试进阶指南 LoadRunner 11实战(第二版)

发表于:2015-1-14 11:14

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈霁、李锋、王臣钧    来源:51Testing软件测试网原创

(51Testing软件测试网获得作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。)
  A.6.6  参数类型
  虽然最常用参数类型是文件型参数,它可以方便地自定义任意数据组合,但VuGen也提供了很多实用的参数类型。接下来我们简要介绍一下各种参数类型的特点。
  1.BPT
  该参数类型是与QC或ALM产品中的BPT模块对应的。当使用它们作为性能测试代码的管理工具并且是从其BPT模块中生成的代码时,该功能会读取BPT模块中的参数类型数据。
  2.Custom
  这里提供了一个自定义的参数类型,只需要填写参数值即可使用,为了阅读方便也可以写上对应的Description。
  3.Date/Time
  该参数类型提供了获得当前时间的参数化做法,虽然在VuGen中可以使用C语言的now()函数来获得当前的日期,但是不如参数化中的简单明了。选择参数类型为Date/Time型,如图A.95所示。
  
图A.95  Date/Time型参数
  这里提供了几种常用格式,如果觉得不够的话还可以手工添加自定义格式。很多时候我们需要一些唯一的数据就可以使用日期格式来自定义解决。在界面的下方,Offset提供了偏移的策略,不但可以获得当前的时间,还能对这个时间做一个往前或者往后的移动。选中Offset parameter可以指定偏移的日期和时间。
  1)Working days only
  该选项是指获得的日期为周一至周五,不包含周末时间(周六、周日)。
  2)Prior to current
  该选项是指是否生成过去的时间。
  Date/Time型参数往往可以帮助我们生成唯一的数据,或者填写某些时间字段表单。
  在代码中可以使用lr_save_datetime函数来手动生成:
  lr_save_datetime ("%Y- %m- %d %H:%M:%S",DATE_NOW+TIME_NOW,"datetimes");
  lr_save_datetime ("%Y- %m- %d ",DATE_NOW,"times");
  4.Group Name
  这里先要说明一下什么是Group Name,在VuGen中称一段代码为一个虚拟用户脚本,这个脚本只有一个Vuser去运行。到了场景中,一个脚本有很多人来运行,称这个团体为Group Name,也就是指这一个组里面有一定数目的人,并且做了同样的事情(运行同一个脚本)。通过这个参数,可以在脚本里面获得当前脚本所在的Group Name,用于某些处理。
  5.Iteration Number
  该参数用于获得当前所在的迭代编号。
  6.Load Generator Name
  当负载生成时,脚本是放在Load Generator中执行的,通过这个参数可以获得脚本运行时所在服务器的名称。
  7.Random Number
  有时需要使用随机的内容,参数化也考虑到了这一点,直接提供生成一定格式的随机内容,可以通过设置最小值和最大值,来实现范围内随机数的生成,另外也可以在代码中使用C语言的rand()函数来进行处理。
  8.Table
  Table参数类型是一个File类型的增强版,它提供了一些独特的功能,如图A.96所示。
  Columns提供了对列的分隔方式的设置。File参数类型的缺点就在于它的分隔符只提供了逗号、制表符、空格三种格式。如果参数化的对象中同时存在逗号、制表符、空格时,只有使用Table参数类型才能解决这个问题。构建一个参数表,如图A.97所示。
  若使用Select all columns,那么取值的时候参数会认为整个表只有一个属性,通过回车符划分记录。运行脚本后从日志中可以看到参数paramzhongwen的值为[1,A],其取值没有受到分隔符的影响。
  Columns by number是指用列编号来确定取值属性项,这里如果设置为2,那么取值就是paramzhongwen_2这个列。
  Rows提供了对回车符号的处理,可以修改Rows per来说明每个参数带几行记录。例如,设置Rows per=2,再次执行代码并查看日志。
  
图A.96  Table型参数设置                   图A.97  参数表设置内容
  这次看到的记录是[1,A2,B],一次参数取值得到了2行记录。注意这里回车符直接被忽略了。由于Table参数类型的特殊性,所以VuGen还提供了Table Information这个功能,如图A.98所示。
  这里提示了如果是5行记录,每次取值取2行,那么会导致第三次取值出错。修改下面的策略能解决该问题,如图A.99所示。
  
图A.98  Table Information表属性          图A.99  Table参数行数溢出处理规则
  当记录不够时,参数化会根据这个规则来进行取值:
  1)Parameter will get less rows than required
  该选项指如果记录条数不够,那么能取多少取多少。比如在现在这个例子中我们设置迭代3次,那么取值结果就是[1,A2,B] [3,C4,D] [5,E]。
  2)Use behavior of "Select Next Row"
  如果选择该选项,VuGen会检查下一次取值是否能够得到足够的记录行数,如果不够则跳过后续记录,根据我们设置好的取值方式重新进行取值。按照同样的设置,取值的结果变成了[1,A2,B] [3,C4,D] [1,A2,B]。
  Rows delimeter for log用来设置行之间的替换符,如图A.100所示。
  修改这个值为51testing再来运行一下脚本,运行结果变成了[1,A51testing2,B]。
  
图A.100  行之间的替换符设置
  9.Unique Number
  获得一个唯一的数据,在做某些主键的属性时会比较方便。
  当需要大量用户名时,我们可以参数化用户名后的编号,将其设置为唯一取值即可。例如,在web_submit_date()函数中设置username属性为"Name=username", "Value=cloud {userid}", ENDITEM即可。这里设置{userid}参数为唯一性取值,block size为10万,这样就可以生成10万条用户名不相同的用户记录。
  10.User Defined Function
  这是VuGen提供的扩展功能。当需要通过外部程序生成某些数据的时候,可以通过dll的方式来完成特殊输入,如图A.101所示。
  
图A.101  调用用户自定义函数
  也可以通过lr_load_dll()函数来实现调用外部dll扩展脚本的功能。
  例如:
  lr_load_dll("user32.dll");
  MessageBoxA(NULL, "This is the message body", "message_caption", 0);
  通过这个代码可以调用Windows自带的user32.dll链接库,然后使用该库文件中的MessageBoxA方法实现一个Windows信息窗口的弹出操作。
  对于VuGen来说,首先需要确保所创建的external library (DLL)必须遵守以下规则:
  __declspec(dllexport) char *<functionName>(char *, char *)
  例如:
  __declspec(dllexport) char *UF_GetVersion(char *x1, char *x2)
  {
  return "Ver2.0";
  }
  或
  __declspec(dllexport) char *UF_GetCurrentTime(char *x1, char *x2)
  {
  time_t x = tunefully;
  static char t[35];
  strcpy(t, ctime( &x));
  t[24] = '\0';
  return t;
  }
  将该代码编译后,即可提供给VuGen进行使用,更多的使用规则可参考VC++开发文档。另一种情况也可以通过system()命令来让VuGen脚本调用DOS命令,完成一些特殊的操作。
  例如,在MySQL中提供了一个DLL库,让我们可以使用C语言对其进行操作。
  11.Vuser ID
  通过这个参数类型可以虚拟用户的编号。在场景中,每个用户都有一个唯一用户名,区别这个用户名是通过用户的ID来说明的。例如Vuser1,这里说明用户名为Vuser(一般为脚本名),而用户编号为1。如果需要获得用户的编号,就可以通过这个参数来实现。
  通过Load Generator Name、Group Name、Vuser、Datetime这4个参数类型,我们可以在脚本中创建出绝对唯一的记录,首先使用Load Generator Name区分所在的负载引擎,再通过Group Name区别组名,然后通过Vuser区别用户,最后通过Datatime获得当前时间,这样生成的记录是负载中绝对唯一的。
  12.XML
  作为一种流行的数据格式,XML在业界得到了大量的应用,而XML参数类型提供了对XML格式的支持,如图A.102所示。
  
图A.102  XML参数设置
  单击表格左下角的Edit Data按钮,可以对XML的元素和节点属性进行维护。每个节点后都可以填写自己的值,通过Add Column为一个节点添加属性,通过Duplicate Array Element可以新增一个节点下元素,如图A.103所示。
  
图A.103  XML参数记录属性维护
  通过日志可以看到取值的结果是一个乱码,导致这个结果的原因也很简单,在这里设置的XML数据默认的保存格式为UTF-8,直接取出就变成乱码了,解决这个问题的方式有两种。
  用记事本打开这个参数文件,另存格式为ASNI(修改后VuGen会无法识别这个文件,但是不影响取值)。
  用前面说到的lr_convert_string_encoding函数进行编码转换。
  但是XML参数类型并不是很实用,当我们需要使用的参数值为XML时,还是推荐直接将XML源代码作为字符串保存。
  到这里我们基本把参数化能提供的各种类型都进行了简单的介绍,关键还是看在什么情况下用什么参数类型最合适。最后来看一下在File格式下的Data Wizard功能。
本文选自《性能测试进阶指南—LoadRunner 11实战(第二版)》,本站经作者的授权。
版权声明:51Testing软件测试网获作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
相关文章:
参数化—性能测试进阶指南 LoadRunner 11实战(第二版)
33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号