51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3049|回复: 4
打印 上一主题 下一主题

[求助] 能否让Library里面的Function直接调用主脚本里的变量?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-9-18 08:48:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有一个很长的QTP脚本已经指定调用了一个vbs文件(Library)。请问有没有方法让vbs文件里面的Function 不通过正常的Function变量传递而直接调用主脚本里面Public的变量。

因为,我要修改这个脚本,添加一些新的功能,比如自动建立测试报告等。在Library里面的Function要调用很多变量,其中有的变量还要被好多个Function公用。如果只使用Function CreatReport (X1, X2, X3, X4,.....)中的X1, X2, X3, X4,.....的方法传递变量,有许多局限性。能不能使用类似下面的方法去调用变量:

主脚本:
...
Public A
A=10
CreatReport X1, X2, X3
...


Library:
...
Function CreatReport (X1, X2, X3)
For i=1 to A
...
Next
...
End Function
...

我已经测试过,QTP 8.2是不支持这种用法的。可惜QTP也不支持include方法,不知道各位高手能不能提供一个好的解决方案?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-9-18 10:44:48 | 只看该作者
问题不是这样的!

VB/QTP基本知识:
1、变量一般要先定义后使用,不过VB支持自动定义变量,就是变量不用定义,直接在第一次使用时自动定义。
2、函数外定义的变量将被定义为全局变量,函数里定义的变量将被定义为局部变量。
3、QTP运行时,先按顺序编译执行Resource-Library里的文件,然后再编译执行Action里的代码

所以,在你的例子里:
先编译执行Library里的代码,函数CreatReport里的A因未定义,所以被当作自动定义变量,是函数里的局部变量。
后编译执行Action里的代码,这时候Public A定义的是全局变量。
所以两个地方的A变量是两个独立的变量了,所以使用起来肯定出问题!

解决方法:要在编译执行Function  Library文件前,先定义A为全局变量。
1、将A的定义放在另外一个独立Library文件中,并且加载顺序要在Function Library前
2、将A的定义放在同一Function Library文件的开头
3、放弃Resource-Library方式来加载Libray,改用在Action里"ExecuteFile LibraryFilePath“方式加载Library,并且ExecuteFile要在变量A定义之后

其实说来说去,用全局变量的方式传递大量参数,并不是好的方法!
用函数参数的方式还是比较好的!
你可以将很多个变量放都定义在一个class里,然后将此class变量当作一个函数参数进行传递,这样就不会觉得函数的参数太多,写起来很麻烦了!

[ 本帖最后由 yabest 于 2007-9-18 10:46 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-9-18 11:11:45 | 只看该作者
楼主可以试一下 byref方法,传地址调用
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-9-18 11:43:12 | 只看该作者
楼主如果想要用自己的方式,那么只要将需要在vbs文件中使用的变量定义为环境变量即可
File->settings(8.2 中是Test->settings)->Environment  选 User-defined,添加环境变量,比如A,Value可以为空,可在代码中对其赋值,使用方式为Environment("A")
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-9-19 11:35:13 | 只看该作者
非常感谢大家的帮助,问题已经解决。最后采用的是设置环境变量的方法。因为那个脚本太长了,光Library里引用的vbs就有将近2000行代码。我只是需要添加几个function,实在懒得从头分析所有的内容。不过通过这次的问题,我学到了一些QTP工作的基础知识。本来还想当然的以为QTP是先执行主脚本,只有当调用相关程序的时候才会运行Library。sdlkfj1
这里特别感谢yabest详尽的回答,以及hsjzfling和yuandjing的帮助。在51Testing论坛里使我学到了很多的知识。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-28 23:28 , Processed in 1.173438 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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