数据向导—性能测试进阶指南 LoadRunner 11实战(第二版)

发表于:2015-1-15 10:47

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

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

(51Testing软件测试网获得作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。)
  A.6.8  参数和变量
  在VuGen中默认使用{}的字符串称为参数,参数的最大优点就是在LoadRunner函数中可以直接应用,例如:
  web_link("test","TEXT={param}",LAST);
  可以直接用参数来替换需要点击的链接的名称,并且在运行脚本时,系统会自动解析这个参数并将值读出。
  如果希望在测试报告中看到的标题也是参数内容,那么这样写是不正确的:
  web_link({param},"TEXT={param}",LAST);
  //web_link函数要求第一个逗号前的内容必须是字符串
  也不能这样写:
  web_link("{param}","TEXT={param}",LAST);
  //这个字符串是{param},没有实际的意义
  参数并不是能写在LoadRunner函数中的任意位置,如果想要实现对无法直接参数化的部分进行参数化,例如,web_link()函数中的step部分可以这样写:
  web_link(lr_eval_string("{param}"),"TEXT={param}",LAST);
  注意,lr_eval_string()函数也可以这样写:
  Lr_eval_string("{param}+{param1}={param2}");
  如果想获得一个字符串的第一个字母的ASCII码可以这样写:
  lr_eval_string("{param}")[0];
  这种写法会返回param参数中的第一个字母的ASCII码。
  参数和变量的最大区别在于:参数必须在双引号中才能应用,而变量如果使用双引号则变成了一个字符串,所以使用lr_eval_string()函数的时候也是使用双引号来调用的。
  1.参数和变量的定义方法
  常用的参数都是使用Parameter List构建的,这种类型的参数是无须定义的。只要保证脚本中的参数名在参数列表中有同名参数对应即可,这种参数都包含了一组值。
  而有些时候需要自己定义一个参数,这个参数是自行使用的,那么就需要使用lr_save_string()函数来实现,将一个字符串保存为一个参数。
  例如:
  lr_save_string("http://www.51testing.com","website");
  这里就是把一个http://www.51testing.com的字符串赋值给了一个叫作website的参数。如果接着编写下面的代码:
  web_url("51testing","URL={website}",LAST);
  运行这个脚本,访问51Testing网站的请求就会被发送出去。接着可以使用lr_free_parameter()将这个参数的值释放掉,减少对内存的占用。
  如果想要把数字和日期写入一个参数可以使用lr_save_int()和lr_save_datetime()函数来实现。
  如果需要把一定的格式写成参数,那么可以直接使用lr_param_sprintf()函数,例如:
  int index = 56;
  char * suffix = "txt";
  lr_param_sprintf ("LOG_NAME_PARAM", "log_%d.%s", index, suffix,100); lr_output_message("The new file name is %s",lr_eval_string("{LOG_NAME_ PARAM}"));
  其输出的内容为:
  The new file name is log_56.txt
  由于使用C语言为基础,所以变量的定义相对简单,例如:int i 或char city[100] 。
  如果要为一个参数中存放的数字做加1操作,那么可以使用这个函数lr_param_increment。
  对于指针型字符串建议使用以下的定义方式,避免脚本长时间运行占用过多内存,甚至导致内存泄露的问题。
  Buf=(char *)malloc(1024 * sizeof(char)));
  //为变量定义内存使用的大小
  而在脚本结束的时候使用下列代码:
  free(Buf);
  //释放变量所使用的内存
  这样定义可以在脚本结束时及时释放内存。注意变量的定义必须要在脚本的最开始(系统函数之前),否则会出现错误,例如:
  Action()
  {
  lr_eval_string("{param}");
  int x;
  }
  运行该脚本就会得到以下错误:
  Action.c (5): illegal statement termination
  Action.c (5): skipping `int'
  c:\\users\\administrator\\appdata\\local\\temp\\noname1\\\\combined_noname1.c (5): 2 errors, not writing pre_cci.ci
  将int x;放在lr_eval_string()函数前即可解决该问题。
  2.参数和变量的区别
  参数是可以直接在系统函数中应用的,绝大多数情况下都可以直接用参数替换掉函数中双引号内的数据。变量是属于C语言的,所以无法直接应用在系统函数中。
  参考以下例子,大家可以了解变量和参数处理一个请求的异同点。
  变量写法:
  char url[100];
  strcpy(url, "URL=http://www.51testing.com");
  web_url("51testing",url,LAST);
  参数写法:
  lr_save_string("http://www.51testing.com","url");
  web_url("51testing","URL={url}",LAST);
  这两种写法结果都是相同的,区别在于使用变量需要生成整个函数中逗号间的所有内容,相对来说比较麻烦;而使用参数可以直接应用在字符串中,相对简洁得多。
  3.参数和变量的作用域
  参数是全局的,在脚本的任何一个Action中都可以使用;变量一般是局部的,如果跨Action调用会出现未声明的错误。
  如果在vuser_init()中,定义一个变量i并且赋值:
  Vuser_init()
  {
  int i;
  i=10;
  }
  在Action()中调用它:
  Action()
  {
  lr_output_message("i =%d",i);
  }
  脚本运行错误,提示i变量未定义。
  如何声明全局变量呢?打开左侧Action列表中的globals.h文件。修改脚本,在globals.h中的//Global Variables后设置全局变量。
  #ifndef _GLOBALS_H
  #define _GLOBALS_H
  //--------------------------------------------------------------------
  // Include Files
  #include "lrun.h"
  #include "web_api.h"
  #include "lrw_custom_body.h"
  //--------------------------------------------------------------------
  // Global Variables
  int i;//在这里添加我们的全局变量申明
  #endif // _GLOBALS_H
  然后在vuser_init()中为i赋值i=10;,最后在Action()中调用,运行脚本可以发现i是一个全局变量,能够在不同的Action中使用。globals.h文件相当于C语言中的头文件,这里可以看到在脚本中调用了lrun.h、web_api.h和lrw_custom_body.h,这3个文件中包含了脚本所需要使用的系统函数,可以自行参考具体内容。
  如果我们希望将一些自己定义的.h函数库加载到脚本中,也可以在这里通过编写#include头文件的方式来完成,便于快速使用自定义函数。
  例如,我们需要在代码中使用C语言的pow函数,帮助我们计算X的Y次方,那么在这里我们可以这样编写代码。首先在globals.h中添加math.h头文件引用:
  #include "lrw_custom_body.h"
  #include "math.h" //引用C90头文件
  //--------------------------------------------------------------------
  // Global Variables
  然后在Action代码中编写对该函数库中的pow函数调用:
  Action()
  {
  double x = 2.0, y = 3.0;
  lr_output_message ("%lf raised to the power of %lf = %lf\n", x, y, pow(x, y));
  return 0;
  }
  在这里需要注意的是被头文件加载的.h库文件必须符合C90的规范,这里所使用的函数头都是从LCC包中复制出来的Include90版。对于引用的头文件必须存放在LR安装目录下的include子目录中,否则会出现找不到头文件的错误提示。
本文选自《性能测试进阶指南—LoadRunner 11实战(第二版)》,本站经作者的授权。
版权声明:51Testing软件测试网获作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
42/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号