51Testing软件测试论坛

标题: vb脚本的调用问题 [打印本页]

作者: wangll    时间: 2010-3-11 17:46
标题: vb脚本的调用问题
问题是这样的:
目前有两个脚本,一个是Operation.vbs,一个是Base.vbs
其中Base.vbs包含了很多公共函数,而Operation.vbs的函数调用了Base.vbs中的公共函数
请问如何实现vbs之间的调用呢?
作者: wangll    时间: 2010-3-11 17:49
这个问题是在qtp论坛里一专家上传的newtours例子时候看到的,在qtp里我也没看到有call这种语法出现,但就是不清楚到底他是如何调用的呢?
作者: skyzhu    时间: 2010-3-11 20:39
QTP 的 setting 里,有这个设置的,只要把文件加到列表里,随时可以用
作者: wangll    时间: 2010-3-11 23:03
设置我知道,但那只是把vb脚本加载到qtp里吧?我的意思是加载后这两个vb脚本是如何调用的呢?[attach]60343[/attach]
附件就是newtours的例子,也是在这个论坛里下载的,应该不算侵权吧,呵呵先谢过这位提供者吧。
有劳大家看一下这个例子,Enroll.vbs是怎么知道调用Base.vbs里的基本函数的呢?
作者: wangll    时间: 2010-3-12 09:47
顶一把,请大家帮忙看看这个问题,多谢了
作者: skyzhu    时间: 2010-3-12 15:13
附件 没法下载
如果是function 直接用就可以了
如果是class会麻烦一点
作者: feiyunkai    时间: 2010-3-12 15:25
标题: VBS之间函数调用,可以用ExecuteGlobal方法
VBS有个与QTP中ExecuteFile类似的方法:ExecuteGlobal,这个方法思路是将函数库中的所有函数读进内存,然后需要调用的时候直接调用,如果函数库中函数特别多,那么会占用很大内存,影响性能,所以如果可'以避免VBS脚本间函数调用,最好避免。
'下面举例说明ExecuteGlobal的用法:
'新建VBS函数库文件:Base.vbs 新建VBS文件:Operation.vbs,代码如下:

'Base.vbs
Public Function a()
Msgbox "我是函数Base.vbs中的函数a(),成功调用到我啦"
End Function
Public Function b()
Msgbox "我是函数Base.vbs中的函数b(),成功调用到我啦"
End Function

'Operation.vbs
'将OpenTextFile后面的路径C:\Documents and Settings\feiyunkai\桌面\Base.vbs修改为Base.vbs的实际路径
Set fso = CreateObject("Scripting.FilesyStemObject")
ExecuteGlobal fso.OpenTextFile("C:\Documents and Settings\feiyunkai\桌面\Base.vbs", 1).ReadAll   '将函数库中所有函数读进内存
call a()  '调用Base.vbs中的函数a()
call b() '调用Base.vbs中的函数b()
'保存后,双击运行Operation.vbs,你会看到Operation.vbs成功调用到Base.vbs中的函数a()和函数b()了

[ 本帖最后由 feiyunkai 于 2010-3-12 15:29 编辑 ]
作者: xiaoyaoke    时间: 2010-3-12 15:32
标题: 瞎说下
在C中,.c文件在编译的第一个阶段是预处理阶段,预处理器会读取文本中#开头的命令,修改原始的C程序,比如#include<stdio.h>指令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入到程序的文本中。结果就得到了另外一个C程序。

估计vbs也应该是借鉴这样的处理方式,脚本语言,变解释变执行。解析器看到#开头的指令,讲include后面的文件路径添加到初始vbs中,这样被引入的vbs中的函数或者类就相当于在本地文件中有定义,可以直接使用。

扩展下说:所以我们可以抽象一些基本的操作,比如Mysql数据库的,XML,Excel,Html等常用操作,抽象出一些具有通用性质的.vbs,就像python和perl的module似的。。。
作者: xiaoyaoke    时间: 2010-3-12 15:37
标题: VBS include()
' VBScript "Include" routine
Sub Include(sInstFile)
        On Error Resume Next

        Dim oFSO, f, s

        Set oFSO = CreateObject("Scripting.FileSystemObject")
        If oFSO.FileExists(sInstFile) Then
                Set f = oFSO.OpenTextFile(sInstFile)
                s = f.ReadAll
                f.Close
                ExecuteGlobal s
        End If

        Set oFSO = Nothing
        Set f = Nothing
End Sub

网上找的,和6#说的一致,就是封装了的




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