zq861010 发表于 2010-3-31 23:04:56

QTP定义和封装FUnction

我想将我自己写的Function放在一个地方,让每个Action都能调用。
请问QTP有没有这样一个功能
请各位大侠给个例子

shotstar 发表于 2010-4-1 09:43:30

有很多种方法。一般可以把函数库保存为vbs、qfl或者好像txt也可以的。
然后在File—Test Setting里面有个resources,加载你的函数库文件,这样就可以使用了。不过如果是不同的Test,那就需要再添加,反正保证你需要使用到函数库的那个Test一定要加载这个函数库文件。
另一个办法可以直接写语句,需要使用的地方就写一个。
ExcuteFile "D/fun.vbs"
这样也是可以的。

yujie6832 发表于 2010-4-1 09:46:46

第二种可以更灵活点,但是貌似第二种可以写相对路径吗?

shotstar 发表于 2010-4-1 09:57:50

回复 3# 的帖子

好像不行的。要用绝对路径了。
我之前在客户那边是这样应用的,客户有测试执行机,和我们的办公电脑网络不通的,只能通过Terminal访问。后来为了方便大家使用,指定了一台机器设置了一个共享目录给大家。然后让大家通过添加网络驱动器的方式添加这个共享目录,并且统一命名,例如M盘。
这样以后大家需要用的相关函数库或者截图都放在那边了,比如函数库就可以这样写
ExcuteFile "M:/fum.vbs"
在任何地方执行案例都不会有问题,只要加了网络驱动器。
至于你想写相对路径,那案例执行的时候相对谁呢?总不能是QC吧,所以还是只能用绝对路径的。

k4124k 发表于 2010-4-1 10:58:00

可以设置一个环境变量来存储路径,然后就可以使用相对路径了。
例如:
executefile environment("FilePath") & "\1212.vbs"

其中的FilePath是QTP中自定义设置的一个环境变量。

shotstar 发表于 2010-4-1 11:10:46

回复 5# 的帖子

想法不错。不过那样不是多了一步么,你还要在每个Test Setting里设置环境变量。然后还是要在action里写executefile

feiyunkai 发表于 2010-4-1 11:30:19

如果项目文件路径不会改变的话,5#的方法的可以的,但是如果项目文件换了位置就又要重新设置环境变量,下面的代码可以实现不管项目文件的路径怎样改变,都可以使用相对路径(但如果项目的文件结构改变,该方法也就不可行了,不过改变项目的文件结构是没有什么意义的,一般都是预先设计好的)
可以用设置默认文件夹的方法:

set qtapp=createobject("QuickTest.application")
qtapp.Folders.Add(mid(Environment("TestDir"),1,(InStrRev(Environment("TestDir"),"\",len(Environment("TestDir")))))) '将当前脚本的上级目录,设置为默认文件夹
set qtapp=nothing
'下面就可以用相对路径了
ExecuteFile "FunctionLab.vbs"
'注:以上代码是脚本文件和函数库文件在同一目录下的情况,若不在同一目录下则:
'假设函数库文件路径为:..\project\FunctionLab\FunctionLab.vbs
'脚本文件路径为:..\project\Script\脚本名称
'则需要减去\Script\的长度,将脚本文件和函数库文件的上级目录设置为默认文件夹脚本如下:
set qtapp=createobject("QuickTest.application")
qtapp.Folders.Add(mid(Environment("TestDir"),1,(InStrRev(Environment("TestDir"),"\",len(Environment("TestDir")))-8))
) '将当前脚本的上一的上级目录,设置为默认文件夹
set qtapp=nothing

ExecuteFile "FunctionLab\FunctionLab.vbs"

如果是单一的脚本,使用这个方法没什么意义,直接添加相对文件夹就可以了:tools,option,Folders,弊端和5#的弊端是一样的
如果是自动化测试框架中使用,可以在驱动脚本中添加设置就可以了。例如:
set qtapp=createobject("QuickTest.application")
qtapp.launch
qtapp.Folders.Add(Projectpath)
set qtapp=nothing


Public Function getProjectPath()
Set objFSO = CreateObject("Scripting.FileSystemObject")                  '创建FSO对象
Set objFile = objFSO.GetFile(wscript.scriptfullname)                     '获取文件的完整路径
getProjectpath= objFSO.GetParentFolderName(objFile)                        '获取上一级文件夹路径
Set objFile = Nothing
Set objFSO = Nothing
End Function

[ 本帖最后由 feiyunkai 于 2010-4-1 11:57 编辑 ]

zq861010 发表于 2010-4-1 12:10:45

谢谢大家的指点 呵呵

DreamsYCX 发表于 2012-6-26 13:31:05

哈哈,使用相对路径可以有更简便的方法:
PathFinder.Locate (RelativePath) 函数可以获取到RelativePath(相对路径)的绝对路径
例如:
当前的目录结构为:C:\TEST
脚本为C:\TEST\action\action1
Excel在C:\TEST\data\test.xls
现在我们要在action1下调用test.xls
则可以使用如下语句表达test.xls的路径:
PathFinder.Locate ("data\test.xls")
如果action1和test.xls在同一个目录下,就更简单了,直接PathFinder.Locate ("test.xls")
同理,写的Function,也可以让每个Action都能调用
页: [1]
查看完整版本: QTP定义和封装FUnction