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

作者: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 LoadFunctionLibrary ?

让我们来看几个例子:

实例2:

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

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

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

使用ExecuteFile方式:

  1. '动态调用函数库ExecuteFile 方式  
  2. ExecuteFile "c:\iquicktest.vbs"  
  3.   
  4. '调用函数库中的q1方法  
  5. Call q1  


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

使用LoadFunctionLibrary方式:

  1. '动态调用函数库LoadFunctionLibrary 方式  
  2. LoadFunctionLibrary "c:\iquicktest.vbs"  
  3.   
  4. '调用函数库中的q1方法  
  5. Call q1  


把ExecuteFile改成LoadFunctionLibrary后,执行脚本,你会发现可以正常的调试

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

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

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


实例3:

修改之前的函数库文件

  1. class iquicktest  
  2.     function q1  
  3.   
  4.         msgbox "iquicktest1"  
  5.   
  6.     end function  
  7.   
  8.     function q2  
  9.       
  10.         msgbox "iquicktest2"  
  11.   
  12.     end function  
  13. end class  

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

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

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

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


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

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

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

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


总结:本文通过简单的例子和大家一起分析了两种动态调用函数库方式的区别,其实两种方式没有谁好谁坏,只有适合和不适合,如果你的测试设计过程中需要使用到类,那么推荐你使用ExecuteFile方法,但是如果你使用的是纯函数库并没有类,那么LoadFunctionLibrary的调试功能能让更快的定位错误。



你可能感兴趣的:(函数)