51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2388|回复: 3

[原创] LoadRunner函数中的几个陷阱

[复制链接]
  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    发表于 2011-11-17 22:52:16 | 显示全部楼层 |阅读模式
    1、atof
      在[url=]LoadRunner[/url]中如果直接用:

      float f;
      f=atof("123.00");
      lr_output_message("%f",f);


      输出的结果会是1244128.00,根本不是我们想要的。
      因为float,double型在不同的平台下长度不一样,所以在loadrunner中调用atof需要显式的声明这个[url=]函数[/url]。
      如下:

      doubleatof (const char *string);
      float f;
      f=atof("123.00");
      lr_output_message("%.2f",f);


      这样就能输出结果:123.00。
      其实,在LR关于atof的帮助文档描述中有提到这点,要求使用这个函数前“must be explicitly declared in Vugen scripts. ”,同样的要求也出现在atol函数的描述中。
      2、lr.save_string
      在LoadRunner中,使用.NET VUser时可以使用lr.save_string来存入一个变量,但是其使用方法却与通常使用的lr_save_string有区别,不小心的话容易“中招”。
      C语言的lr_save_string的定义如下:
      int lr_save_string (const char *param_value, const char *param_name);


      注意:参数值在前面,参数名在后面。
      而.NET VUser的lr.save_string的参数使用恰好相反,参数名在前面,参数值应该放到后面。
      但是LR的帮助文档并没有关于lr.save_string的定义,如果在脚本中选中“lr.save_string”,然后按F1,则直接蹦到lr_save_string的定义描述中,极容易误导人!
    3、ftp_put
      ftp_put 是LoadRunner中的FTP函数,用于上传文件到FTP服务器。定义如下:
      int ftp_put ( char *transaction, LAST);


      查看LR的帮助文档可获得如下例子:

      // Send the file "ftp_file.txt" to the for_jon directory.
      ftp_put("Ftp_Put",
      "ATH=f:/ftp_file.txt", "TARGET_PATH=/pub/for_jon", "MODE=ASCII",
      ENDITEM ,
      LAST);


      当你兴匆匆地以为拿过来修改一下就可以用了的时候,LR却提示如下错误:
      Starting action Action.
      globals.h(101): Warning messageATH=D:/ftp.txt is not ftp_put valid option
      globals.h(101): Debug messageutting file test.txt in /Qdownload/test.txt, passive mode set to 0
      globals.h(101): Error -86026:Failed to open D:\LoadRunner\LRProject\lr_FTP1\test.txt for reading.
      globals.h(101): Error -86027:Failed to put data: 226 Transfer complete
      Abort was called from an action.
      提示错误是文件不能读,但是文件明明就不在错误所提示的D:\LoadRunner\LRProject\lr_FTP1\test.txt 中,而是在D:/ftp.txt。
      后来看到错误提示之前的一个Warning写道PATH=D:/ftp.txt is not ftp_put valid option,难道错误是这里引起的?查看帮助文档关于item_list的描述可知:
      item_list
      A list of all the items for this function. Enclose all entries with quotes.
      SOURCE_PATH: The file to upload to the FTP server.
      OR
      MSOURCE_PATH - Like SOURCE_PATH, but using wildcards to specify multiple files. If wildcards are not specified, all the files in the MSOURCE_PATH are uploaded.
      TARGET_PATH (optional) - the path and filename in which to place the file.
      if (M)SOURCE_PATH is specified, but TARGET_PATH is not specified, the file is stored in the root directory of the FTP server, with the original file name.
      MODE (optional) - Retrieval mode ASCII or BINARY (default).
      PASSIVE (optional) - Sets the communication protocol to Passive Mode FTP. To enable, pass "ASSIVE=TRUE".
      ENDITEM - Marks the end of the list. (no quotes)
      原来是SOURCE_PATH而不是例子所说的PATH,好吧,等你改成SOURCE_PATH后,如下所示:

      // Send the file "ftp_file.txt" to the for_jon directory.
      ftp_put("Ftp_Put",
      "SOURCE_PATH=f:/ftp_file.txt", "TARGET_PATH=/pub/for_jon", "MODE=ASCII",
      ENDITEM ,
      LAST);


      兴匆匆地以为就行了,一运行又报错:
      globals.h(101): Error -86025ut failed; 550 /pub/for_jon: Not a regular file
      原来这次是TARGET_PATH的问题,再看LR的帮助文档:
      TARGET_PATH (optional) - the path and filename in which to place the file.
      if (M)SOURCE_PATH is specified, but TARGET_PATH is not specified, the file is stored in the root directory of the FTP server, with the original file name.
      原来TARGET_PATH要包含文件名,因此改成:

      // Send the file "ftp_file.txt" to the for_jon directory.
      ftp_put("Ftp_Put",
      "SOURCE_PATH=f:/ftp_file.txt", "TARGET_PATH=/pub/for_jon/ftp_file.txt", "MODE=ASCII",
      ENDITEM ,
      LAST);


      这次终于行了。
      同样的,在ftp_put_ex函数中也有类似的错误:

      In the following example, the ftp_get_ex function gets the file ftp_file.txt from the FTP server.
      // Send the file "ftp_file.txt" to the for_jon directory.
      ftp_put_ex(&ftp, "Ftp_Put",
      "ATH=f:/ftp_file.txt", "TARGET_PATH=/pub/for_jon", "MODE=ASCII",
      ENDITEM,
      LAST);


      而且例子代码写的是“ftp_put_ex”, 描述例子时却说的是“ftp_get_ex”。
      LR是非常优秀的性能测试工具,但是如果帮助文档中类似这样的错误比较多的话,对初学者而言就又多了一道学习的门槛:鉴别联机帮助信息的真伪的能力。
    回复

    使用道具 举报

    该用户从未签到

    发表于 2011-11-18 08:39:58 | 显示全部楼层
    学习了!感谢楼主和版主!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2011-11-18 14:29:33 | 显示全部楼层
    支持一下!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2011-11-18 17:31:14 | 显示全部楼层
    学习了,支持
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-18 13:18 , Processed in 0.085076 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表