51Testing软件测试论坛

标题: 全局变量的几种解决办法 [打印本页]

作者: kursk    时间: 2007-4-25 09:37
标题: 全局变量的几种解决办法
昨天在作QTP测试时发现了全局变量的问题,主ACTION的代码如下

RunAction "login", oneIteration

public filename
public clicktimes

filename="*********"
clicktimes=5

EditReportHead(filename)

'RunAction "***", oneIteration
'RunAction "***", oneIteration
'RunAction "***", oneIteration
.........

但是所调用的每个runaction中又必须重新声明变量,必须重新赋值,就是开始的几段代码
public filename
public clicktimes

filename="*********"
clicktimes=5

为了避免在每个runaction中赋值,这样做的好处是显而易见的,可以通过在主action中赋值,控制调用的每个action的变量值,减少维护代码的工作量。在网上查了一下,发现总的来说有两种办法

1、将变量的赋值给globalsheet tatalbe,然后用globalsheet作中转,再传给每个runaction中的变量,不过这样做的缺点也是非常多的:
缺点:
(1)每个runaction还是必须声明一次变量名,只是少了赋值的代码;
(2)当在其他测试任务中调用这个函数时,也必须建一个globalsheet datatable,名称还必须一样,太麻烦了!

2、相比之下,用Enviroment就要好得多,只需要在主action中声明
Environment.Value("filename")="e:\pageloadtime.txt"
Environment.Value("clicktimes")=5

然后再其他的action中使用Environment("var").value就可以了,对QTP的依赖程度低,代码复用性高

因此,我主张只要有可能,应该多用Environment对象,少用datatalbe.

此帖抛砖引玉,望大家都来指正
作者: danmy    时间: 2007-4-25 10:15
总结的不错,顶一下~
作者: 风过无息    时间: 2007-4-25 11:06
也可以放在外部文件里面通过调用来引用
作者: sidneylover    时间: 2007-4-25 11:46
参数调用也可以,和环境变量差不多
作者: kursk    时间: 2007-4-25 15:26
原帖由 sidneylover 于 2007-4-25 11:46 发表
参数调用也可以,和环境变量差不多


如果使用参数调用的话,就要在QTP里加入输入参数,而我想尽量不依赖QTP
作者: ancestor    时间: 2007-4-26 08:17
不错,学习中。。。
作者: 爱菲的猫    时间: 2007-4-26 10:41
Enviroment 的确非常方便好用
外部调用也是一种方法, 根据脚本选择合适的就好
作者: yuqingannie    时间: 2007-10-19 12:15
我还没用到全局变量,看来用起来比较麻烦.先收藏了,以后肯定回用到的,谢谢
作者: zhumingwei    时间: 2007-10-20 10:29
全局变量一般用Enviroment .qtp应该加入全局变量的定义,这样就好多了
作者: nestanesta    时间: 2008-1-22 13:06
标题: 理解完全错误,不要较坏人
并不是所有的地方都用Environment,你定义10个Environment变量,那么在启动QTP时候,就会生成10个Environment变量到内存的公共数据区,你定义的越多,跑test的速度就越慢,有一种说法就是公共数据区的变量,尽量不要去赋值,就是不要放在=的左边
作者: mythxhg    时间: 2008-1-22 14:21
标题: 回复 10# 的帖子
如果确定Environment是暂时存在内存上,而不是寄读在文件上的话,应该不会慢多少的,区区几个变量能占什么内存啊,莫非这个个变量占的内存让你的系统物理内存不足造成页面频繁交换?
作者: 暗涧幽火    时间: 2008-1-23 11:55
very goods!
作者: nestanesta    时间: 2008-1-24 11:04
也不是啊,如果你要跑的case很多,本来就很慢,你频繁操作的,势必会导致的很慢
这不是编写风格的问题,Environment类似于JAVA的static
反正我的建议就是,能不用,尽量少用
作者: mythxhg    时间: 2008-1-24 11:15
标题: 回复 13# 的帖子
你也说了啊,Environment是工具内共享的,你只开一个工具,不管你跑多少个CASE都是用这个Environment,所以不会造成内存等等的任何问题的,除非你跑一个CASE开建一个Environment。都是共享一个变量,不会差的。
作者: FLY000    时间: 2010-5-25 14:51
怎么定义一个全局变量的数组???
作者: FLY000    时间: 2010-5-25 14:52
Environment.Value("filename")="e:\pageloadtime.txt"
Environment.Value("clicktimes")=5
---------
这样不是相当于 已经给clicktimes赋值了?clicktimes的值就是5  怎么还是变量?
作者: ina164671089    时间: 2011-10-10 10:31
应用的时候,应该是
Environment.Value("filename")="e:\pageloadtime.txt"
Environment.("filename")就可以了吧。
作者: ina164671089    时间: 2011-10-10 10:31
应用的时候,应该是
Environment.Value("filename")="e:\pageloadtime.txt"
Environment.("filename")就可以了吧。
作者: heqingbluesky    时间: 2012-2-8 14:32
放到环境变量里面,维护起来还是比较麻烦。

放到外部的文件里面,然后在Library里面加载,就好了。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2