收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
软件测试 > QTP > 正文

首页 | 领域细分: 游戏测试 安全测试 手机测试 Web测试 | 技术研究: 单元测试 入门教程 用例设计 性能测试 功能测试 | 测试职场: 面试精选 职场发展 面试试题

测试管理: 配置及流程 - 需求管理 - 质量验收 - 缺陷管理 - 其它管理相关 | 开发语言: PHP技巧 - PHP基础 - PHP实例 - PHP错误代码

测试工具: LoadRunner JiRa QuickTestPro RoBot WinRunner TestDirector 其它测试工具 | 数据库: Mysql数据库 Oracle数据库 CSS/DIV基础 HTML基础

QTP调用外部.vbs函数的方法比较

来源:互联网 日期:2013-09-21 20:00

  方式1:Executefile

  方式2:加到QTP的Resorece

  方式3:ExecuteGlobal方法

  在比较之前先简明叙述一下使用方法,以给初学者由浅入深的理解

  比如我们有一个函数Wally.vbs放在了C:盘下,其中有如下函数(获取本机的IP地址):

FunctionGetIPAddr()
SetobjWMI=GetObject("winmgmts://./root/cimv2")
SetcolIP=objWMI.ExecQuery("Select*fromWin32_NetworkAdapterConfigurationwhereIPEnabled=TRUE")
ForEachIPIncolIP
temp=IP.IPAddress(0)
ExitFor
Next
GetIPAddr=temp
EndFunction


  方式1的使用方法:

  直接在QTP中打:

  Executefile"c:wally.vbs"

  随后就可以引用wally.vbs中的任意函数了,如msgboxGetIPAddr()

  方式2的使用方法:

  点击QTP菜单的File->Settings->Resources,之后添加wally.vbs到QTP的resource中

  随后就可以引用wally.vbs中的任意函数了,如msgboxGetIPAddr()

  方式3的使用方式:

  ExecuteGlobal是VBS的函数而非QTP特有的函数,ExecuteGlobal的功能可以引入其它vbs文件的函数,就和C++的include,Java的import一样。使用范例:

dimfso:setfso=createobject("scripting.filesystemobject")
executeglobalfso.opentextfile("c:wally.vbs",1).readall
setfso=nothing

  大家可以看到其实它是把wally.vbs全部读入内存中

  随后就可以引用wally.vbs中的任意函数了,如msgboxGetIPAddr()

  下面是一些我使用中的心得:

  方式1:Executefile的好处:

  QTP可以使用这个函数方便了自己写语句来引入函数,灵活性非常高

  方式1:Executefile的缺点和解决方案:

  1.会使得QTP的语句执行的黄色指针工作异常,狂跳

  2.Debug很头疼。我以前的上周有一段经历,一个很小的Bug,调试的时候Stepinto不进正确的函数体,竟然跳到了一行空行。后来这个小Bug竟然足足花了我3整天的时间。这个应该是QTP的Bug,希望它后续的版本可以改进

  3.会莫名其妙的执行一些本不应该有的操作,大大降低QTP执行时间效率,之间屏幕在闪,但是不知道在执行些什么。我曾经遇到过这样的情况:任其自然执行,屏幕狂闪,执行了半小时;我单步执行,只花了5分钟执行完毕。可见这会使得原本就受质疑的QTP的Performance更受谴责

  解决方案:

  以上三点我找不出解决方案,属于Hp的严重Bug还是需要HP来完善

  方式2:加到QTP的Resorece的好处:

  毕竟是QTP自带的引用外部VBS函数的,非常稳定

  方式2:加到QTP的Resorece的缺点和解决方案:

  灵活程度大打折扣,经常的情况是使用同一个测试框架对于不同的项目需要引入不同的VBS文件,非常不灵活

  解决方案:

  不过这也是有方法可以解决的:在外部调用AOM的函数中添加:

Setobj=CreateObject("QuickTest.Application")
SetqtLibraries=obj.Test.Settings.Resources.Libraries'Getthelibrariescollectionobject
IfqtLibraries.Find("C:wally.vbs")=-1Then
qtLibraries.Add"C:wally.vbs",1
EndIf


  这样子就可以通过外部文件调用QTP对象模型来加载指定的VBS,也可以非常灵活。

  方式3:ExecuteGlobal方法的优势:

  1.自己写代码,非常灵活

  2.外部函数由于从内存中读取,避免了I/O,执行速度加快,而且通过这个方法调用其它文件函数非常稳定

  方式3:ExecuteGlobal方法的缺点:

  1.一下子把可能需要用到的VBS文件全部读入内存,势必会增加内存开销

  2.Debug时候Stepinto不到指定的函数,调试不方便

  解决方案:

  对于1的解决方案的答案是没有解决方案,因为采取了ExecuteGlobal方法后内存开销增大是不可避免的。但是这点内存对于运行QTP来说并不是个不可承受的内存,微不足道

  对于2的解决方案其实可以在需要调试的时候手工加入到QTP专家视图窗口,调试完毕后再采用ExecuteFile调用

  事实上如果要我排个序的话我的优先顺序是:

  方式2:加到QTP的Resorece>>方式3:ExecuteGlobal>>方法方式1:Executefile

本周排行

别人正在浏览

强悍的草根IT技术社区,这里应该有您想要的!
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号