51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3291|回复: 8
打印 上一主题 下一主题

[原创] vb脚本的调用问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-3-11 17:46:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题是这样的:
目前有两个脚本,一个是Operation.vbs,一个是Base.vbs
其中Base.vbs包含了很多公共函数,而Operation.vbs的函数调用了Base.vbs中的公共函数
请问如何实现vbs之间的调用呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2010-3-11 17:49:07 | 只看该作者
这个问题是在qtp论坛里一专家上传的newtours例子时候看到的,在qtp里我也没看到有call这种语法出现,但就是不清楚到底他是如何调用的呢?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2010-3-11 20:39:08 | 只看该作者
QTP 的 setting 里,有这个设置的,只要把文件加到列表里,随时可以用
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2010-3-11 23:03:53 | 只看该作者
设置我知道,但那只是把vb脚本加载到qtp里吧?我的意思是加载后这两个vb脚本是如何调用的呢?
附件就是newtours的例子,也是在这个论坛里下载的,应该不算侵权吧,呵呵先谢过这位提供者吧。
有劳大家看一下这个例子,Enroll.vbs是怎么知道调用Base.vbs里的基本函数的呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2010-3-12 09:47:44 | 只看该作者
顶一把,请大家帮忙看看这个问题,多谢了
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2010-3-12 15:13:54 | 只看该作者
附件 没法下载
如果是function 直接用就可以了
如果是class会麻烦一点
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-18 10:31
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    7#
    发表于 2010-3-12 15:25:30 | 只看该作者

    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 编辑 ]

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2010-3-12 15:32:32 | 只看该作者

    瞎说下

    在C中,.c文件在编译的第一个阶段是预处理阶段,预处理器会读取文本中#开头的命令,修改原始的C程序,比如#include<stdio.h>指令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入到程序的文本中。结果就得到了另外一个C程序。

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

    扩展下说:所以我们可以抽象一些基本的操作,比如Mysql数据库的,XML,Excel,Html等常用操作,抽象出一些具有通用性质的.vbs,就像python和perl的module似的。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2010-3-12 15:37:59 | 只看该作者

    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#说的一致,就是封装了的
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-25 23:38 , Processed in 0.074923 second(s), 34 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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