作者:zzxxbb112
时间:2011/11/9 版权所有,侵权必究。
出处:http://blog.csdn.net/zzxxbb112
还记得在最早的第四讲中我们曾经介绍过了资源池的概念,通俗的讲就是一种静态加载函数库的方式,但是静态的加载方式往往都是靠QTP工具本身的设置来决定,因此往往没有通过脚本的方式动态的去加载函数库来的灵活。
QTP函数库动态加载两种方式:
1. ExecuteFile - 动态调用VBS文件方式
2. LoadFunctionLibrary 动态调用函数方式 (QTP11最新加入的新函数)
实例1:
本例准备一个vbs函数库文件在c盘根目录,文件内容如下:
function q1 msgbox "iquicktest1" end function function q2 msgbox "iquicktest2" end function
定义了两个函数,接着我们通过qtp的两种动态的调用方式分别来调用此函数库
ExecuteFile:
'动态调用函数库ExecuteFile方式 ExecuteFile "c:\iquicktest.vbs"
'调用函数库中的q1方法 Call q1
LoadFunctionLibrary :
'动态调用函数库LoadFunctionLibrary 方式 LoadFunctionLibrary "c:\iquicktest.vbs" '调用函数库中的q1方法 Call q1
分析:
当你在执行以上两种动态调用方式之后你会发现这两个执行结果是一模一样的,你完全看不出它们之间的区别在什么地方。那么 它们之间的区别究竟在哪里呢?
ExecuteFile VS LoadFunctionLibrary ?
让我们来看几个例子:
实例2:
我们在QTP中使用快捷键Shift + Alt + O 打开函数库文件
在打开之后在如图位置设置断点,接着回到test主脚本编辑区
使用ExecuteFile方式:
'动态调用函数库ExecuteFile 方式 ExecuteFile "c:\iquicktest.vbs" '调用函数库中的q1方法 Call q1
使用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的调试功能能让更快的定位错误。
Rss订阅IQuickTest(关于如何订阅?)