您的位置:首页 > 其它

== 动态函数库加载的两种方式 ==

2011-11-10 07:23 267 查看
作者:zzxxbb112
时间:2011/11/9 版权所有,侵权必究。

出处:http://blog.csdn.net/zzxxbb112

QTP函数库动态加载两种方式:

1. ExecuteFile - 动态调用VBS文件方式

2. LoadFunctionLibrary 动态调用函数方式 (QTP11最新加入的新函数)

实例1:

本例准备一个vbs函数库文件在c盘根目录,定义了两个函数,文件内容如下:

Function q1
msgbox "iquicktest1"
End Function

Function q2
msgbox "iquicktest2"
End Function
接着我们通过qtp的两种动态的调用方式分别来调用此函数库

ExecuteFile:

dawadw

'动态调用函数库ExecuteFile方式
ExecuteFile "c:\iquicktest.vbs"

'调用函数库中的q1方法
Call q1


LoadFunctionLibrary :
'动态调用函数库LoadFunctionLibrary 方式
LoadFunctionLibrary "c:\iquicktest.vbs"

'调用函数库中的q1方法
Call q1
分析:

当你在执行以上两种动态调用方式之后你会发现这两个执行结果是一模一样的,你完全看不出它们之间的区别在什么地方。那么 它们之间的区别究竟在哪里呢?

ExecuteFile VS [b]LoadFunctionLibrary ?[/b]

让我们来看几个例子:

实例2:

我们在QTP中使用快捷键Shift + Alt + O 打开函数库文件



在打开之后在如图位置设置断点,接着回到test主脚本编辑区

使用ExecuteFile方式:

'动态调用函数库ExecuteFile 方式
ExecuteFile "c:\iquicktest.vbs"

'调用函数库中的q1方法
Call q1

还是刚才的脚本同样执行一遍,你会发现使用ExecuteFile方式对于函数库文件调试无效[/u]

使用LoadFunctionLibrary方式:

'动态调用函数库LoadFunctionLibrary 方式 LoadFunctionLibrary "c:\iquicktest.vbs" '调用函数库中的q1方法 Call q1把ExecuteFile改成LoadFunctionLibrary后,执行脚本,你会发现可以正常的调试



脚本自动停留在了设置断点处。

那么第一局 LoadFunctionLibrary 以 1比0 暂时领先对象 ExecuteFile

实例3:

修改之前的函数库文件

class iquicktest
function q1

msgbox "iquicktest1"

end function

function q2

msgbox "iquicktest2"

end function
end class

Test主脚本区中输入以下脚本:

'动态调用函数库ExecuteFile 方式
ExecuteFile "c:\iquicktest.vbs"
'实例化函数库中的iquicktest类
Set qtp = new iquicktest
'调用iquicktest类中的q1方法
qtp.q1

结果:脚本执行完毕后顺利实例化函数库文件中的类,并调用了q1方法



而如果使用LoadFunctionLibrary方式则会报错:



分析:说明LoadFunctionLibrary根本不支持函数库中的类,因此此方法本身只能读取到函数,从名称上就能得知。

这一局是ExecuteFile赢了,最终双方还是打成了平手。

总结:本文通过简单的例子和大家一起分析了两种动态调用函数库方式的区别,其实两种方式没有谁好谁坏,只有适合和不适合,如果你的测试设计过程中需要使用到类,那么推荐你使用ExecuteFile方法,但是如果你使用的是纯函数库并没有类,那么LoadFunctionLibrary的调试功能能让更快的定位错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: