软件测试 中 LoadRunner 函数中的几个陷阱 1、atof 在 loadrunner 中如果直接用 float f; f=atof("123.00"); lr _output_message("%f",f); 输出的结果会是1244128.00,根本不是我们想要的。 因为float,double型在不同的平台下长度不一样,所以在loadrunner

软件测试LoadRunner函数中的几个陷阱

1、atof

  在loadrunner中如果直接用

  float f;

  f=atof("123.00");

  lr_output_message("%f",f);

  输出的结果会是1244128.00,根本不是我们想要的。

  因为float,double型在不同的平台下长度不一样,所以在loadrunner中调用atof需要显式的声明这个函数。

  如下:

  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",

  "PATH=f:/ftp_file.txt", "TARGET_PATH=/pub/for_jon", "MODE=ASCII",

  ENDITEM ,

  LAST);

  当你兴匆匆地以为拿过来修改一下就可以用了的时候,LR却提示如下错误:

  Starting action Action.

  globals.h(101): Warning message:PATH=D:/ftp.txt is not ftp_put valid option

  globals.h(101): Debug message:Putting 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 "PASSIVE=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 -86025:Put 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",

  "PATH=f:/ftp_file.txt", "TARGET_PATH=/pub/for_jon", "MODE=ASCII",

  ENDITEM,

  LAST);

  而且例子代码写的是“ftp_put_ex”, 描述例子时却说的是“ftp_get_ex”。

软件测试中LoadRunner函数中的几个陷阱的更多相关文章

  1. eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?

    eclipse 中main()函数中的String[] args如何使用? 右击你的项目,选择run as中选择 run configuration,选择arguments总的program argu ...

  2. linux中probe函数中传递的参数来源(上)

    点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...

  3. js中在一个函数中引用另一个函数中的函数,可以这么做

    在另一个函数中,将需要使用的函数绑定在window下 // UEditor $(function () { window.ue = UE.getEditor('editor', { // ue即可成为 ...

  4. 苹果浏览器Safari对JS函数库中newDate()函数中的参数的解析中不支持形如“2020-01-01”形式

    苹果浏览器safari对new Date('1937-01-01')不支持,用.replace(/-/g, "/")函数替换掉中划线即可 如果不做处理,会报错:invalid da ...

  5. JNI中GetStringChars函数中的isCopy

    一直不明白这个isCopy是什么意思,只知道每次使用的时候都传NULL,今天看到了相关的资料,特来分享下. 当从JNI函数GetStringChars中返回得到字符串B时,如果B是原始字符串java. ...

  6. Javascript中的函数中的this值

    看下面这段代码会在控制台上输出什么内容? <script> var url="fang.com"; var obj={ url:"soufun.com&quo ...

  7. MYSQL中group_concat( )函数中参数的排序方法

    使用mysql中的group_concat( )函数连接指定字段时,可以先对该字段进行排序. PS:是因为二刷mysql的51道题的第12题遇到的:查询和" 01 "号同学学习的课 ...

  8. 继承过程中对函数中this的认识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 10.Python中print函数中中逗号和加号的区别

    先看看print中逗号和加号分别打印出来的效果.. 这里以Python3为例 1 print("hello" + "world") helloworld 1 p ...

随机推荐

  1. CodeForces 732E Sockets

    贪心,优先队列. 将$s$按照从小到大的顺序扔进优先队列.从小的开始与电脑配对,如果找不到合适的电脑,那么再变小一次,直到找到与之配对的电脑或者作废. #pragma comment(linker, ...

  2. 记一次Python爬虫开发经历

    为啥要做Python爬虫,是因为我去找电影的某个网站有点坑,它支持tag标签查询自己喜欢的电影,但是不支持双标签或者三标签查询.由于一个电影对应多种类型(tag),这就意味着,我需要进入这个电影介绍界 ...

  3. 决策树:ID3与C4.5算法

    1.基本概念 1)定义: 决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系,树中每个节点代表的某个可能的属性值. 2)表示方法: 通过把实例从根结点排列到某个叶子结点来分类实例,叶子 ...

  4. python笔记三:函数式编程

    1.概念: 函数式编程就是一种抽象程度很http://i.cnblogs.com/EditPosts.aspx?opt=1高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要 ...

  5. Loj#6432「PKUSC2018」真实排名(二分查找+组合数)

    题面 Loj 题解 普通的暴力是直接枚举改或者不改,最后在判断最后对哪些点有贡献. 而这种方法是很难优化的.所以考虑在排序之后线性处理.首先先假设没有重复的元素 struct Node { int p ...

  6. Linux命令之rlogin

    rlogin [-8EKLdx] [-e char] [-l username] host rlogin在远程主机host上开始一个终端会话. (1).选项 -8 选项允许进行8位的输入数据传送:否则 ...

  7. response (响应对象)

    一.response响应过程 在去发送一个请求时, 会找到tomcat引擎 引擎会找到对应的web应用,并且会创建request对象和response对象 找到应用后, 会执行应用的web.xml再去 ...

  8. BZOJ 2212 [Poi2011]Tree Rotations(线段树合并)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2212 [题目大意] 给出一棵二叉树,每个叶节点上有一个权值,现在可以任意交换左右儿子, ...

  9. 【动态规划】mr354-坐车看球

    [题目大意] 两个球队的支持者要一起坐车去看球,他们已经排成了一列.我们要让他们分乘若干辆巴士,同一辆巴士上的人必须在队伍中是连续的.为了在车上不起冲突,希望两队的支持者人数尽量相等,差至多是D.有一 ...

  10. PS 2019 | Photoshop CC 2019 的安装激活

    文章目录 写在前面 安装步骤 软件激活 关闭"主页"屏幕 写在前面 Photoshop CC 2019(64位)下载地址: 链接:https://pan.baidu.com/s/1 ...