51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5160|回复: 18
打印 上一主题 下一主题

[原创] 全局变量的几种解决办法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-4-25 09:37:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天在作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.

此帖抛砖引玉,望大家都来指正
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-4-25 10:15:04 | 只看该作者
总结的不错,顶一下~
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-4-25 11:06:32 | 只看该作者
也可以放在外部文件里面通过调用来引用
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-4-25 11:46:23 | 只看该作者
参数调用也可以,和环境变量差不多
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-4-25 15:26:58 | 只看该作者
原帖由 sidneylover 于 2007-4-25 11:46 发表
参数调用也可以,和环境变量差不多


如果使用参数调用的话,就要在QTP里加入输入参数,而我想尽量不依赖QTP
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-4-26 08:17:55 | 只看该作者
不错,学习中。。。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-4-26 10:41:10 | 只看该作者
Enviroment 的确非常方便好用
外部调用也是一种方法, 根据脚本选择合适的就好
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-10-19 12:15:21 | 只看该作者
我还没用到全局变量,看来用起来比较麻烦.先收藏了,以后肯定回用到的,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-10-20 10:29:56 | 只看该作者
全局变量一般用Enviroment .qtp应该加入全局变量的定义,这样就好多了
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-1-22 13:06:54 | 只看该作者

理解完全错误,不要较坏人

并不是所有的地方都用Environment,你定义10个Environment变量,那么在启动QTP时候,就会生成10个Environment变量到内存的公共数据区,你定义的越多,跑test的速度就越慢,有一种说法就是公共数据区的变量,尽量不要去赋值,就是不要放在=的左边
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-1-22 14:21:34 | 只看该作者

回复 10# 的帖子

如果确定Environment是暂时存在内存上,而不是寄读在文件上的话,应该不会慢多少的,区区几个变量能占什么内存啊,莫非这个个变量占的内存让你的系统物理内存不足造成页面频繁交换?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2022-5-9 16:11
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]测试排长

    12#
    发表于 2008-1-23 11:55:31 | 只看该作者
    very goods!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2008-1-24 11:04:19 | 只看该作者
    也不是啊,如果你要跑的case很多,本来就很慢,你频繁操作的,势必会导致的很慢
    这不是编写风格的问题,Environment类似于JAVA的static
    反正我的建议就是,能不用,尽量少用
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2008-1-24 11:15:34 | 只看该作者

    回复 13# 的帖子

    你也说了啊,Environment是工具内共享的,你只开一个工具,不管你跑多少个CASE都是用这个Environment,所以不会造成内存等等的任何问题的,除非你跑一个CASE开建一个Environment。都是共享一个变量,不会差的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2010-5-25 14:51:29 | 只看该作者
    怎么定义一个全局变量的数组???
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2010-5-25 14:52:43 | 只看该作者
    Environment.Value("filename")="e:\pageloadtime.txt"
    Environment.Value("clicktimes")=5
    ---------
    这样不是相当于 已经给clicktimes赋值了?clicktimes的值就是5  怎么还是变量?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2011-10-10 10:31:46 | 只看该作者
    应用的时候,应该是
    Environment.Value("filename")="e:\pageloadtime.txt"
    Environment.("filename")就可以了吧。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2011-10-10 10:31:52 | 只看该作者
    应用的时候,应该是
    Environment.Value("filename")="e:\pageloadtime.txt"
    Environment.("filename")就可以了吧。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2012-2-8 14:32:37 | 只看该作者
    放到环境变量里面,维护起来还是比较麻烦。

    放到外部的文件里面,然后在Library里面加载,就好了。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-9-21 18:44 , Processed in 0.100735 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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