一、单例模式(Singleton Pattern)
'-------------------------------------------------------------------------------
' Description:
' 单例模式Singleton Pattern
' 只能实例化一个对象。当创建ExcelWrapper这个类包装的时候就只会调用单个实例,在类销毁时,
' 会自动销毁此全局变量的实例,这样就再也不会在进程里看到N多个Excel进程实例了。
'-------------------------------------------------------------------------------
Option Explicit
Public oExcel '声明全局变量
Dim oExcelInstace
Class ExcelWrapper
Private oExcelObject
'初始化类
Private Sub Class_Initialize()
Dim bAleadyInit '判断对象是否存在的标志位
bAleadyInit=False '检查对象是否已经被初始化
If IsObject(oExcel)=True Then
'对象初始化
If Not oExcel Is Nothing Then
bAleadyInit=True '激活状态
End If
End If
'如果标志位是False,则创建一个实例对象
If bAleadyInit=False Then
Set oExcel=CreateObject("Excel.Application")
End If
Set oExcelObject=oExcel
End Sub
'类销毁时退出Excel,并且释放Excel对象引用
Private Sub Class_Terminate()
oExcelObject.Quit
Set oExcelObject=Nothing
End Sub
Public Sub Open(oFileName)
'写入打开文件代码
End Sub
Public Function GetSheetData(oSheet)
'写读取单元格代码
End Function
End Class
Set oExcelInstace=New ExcelWrapper
oExcelInstace.Open("")
二、工厂模式(Factory Pattern)
'-------------------------------------------------------------------------------
' Description:
' 工厂模式Factory Pattern
' 一种创建模式,可用于创建和初始化某个对象。通过工厂的核心来创建、存储、管理需要的输出机制,
' 并利用关键字请求进行对象输出,是测试设计中非常重要的设计模式。
'-------------------------------------------------------------------------------
Option Explicit
Public oOutputs
Set oOutputs=New OutFactory
Class OutFactory
Public Channels '定义变量
Private Sub Class_Initialize
Set Me.Channels=CreateObject("Scripting.Dictionary")
End Sub
Private Sub Class_Terminate
Set Me.Channels=Nothing
End Sub
Public Sub Construct(sChannelName, sChannelType)
Dim oNewChannel
Select Case sChannelType
Case "excel"
'创建一个Excel的Singleton类
Set oNewChannel=New ExcelWrapper
Case "fso"
'创建一个FSO的Singleton类
Set oNewChannel=New fsoWrapper
Case "DB"
'创建一个ADO的Singleton类
Set oNewChannel=New DBWrapper
End Select
'把类都存储起来
Me.Channels.Add sChannelName, oNewChannel
End Sub
End Class
'构造方法
oOutputs.Construct "excel_instance", "excel"
oOutputs.Construct "fso_instance", "fso")
oOutputs.Construct "DB_instance", "DB")
'直接取我们需要的东西,并进行操作
oOutputs.Channels("excel_instance").whatever
'此处的Whatever是Excel的Singleton类中的自定义方法
三、命令包装模式(Command Pattern)
'-------------------------------------------------------------------------------
' Description:
' 命令包装模式Command Pattern
' 把一个请求或者操作封装到一个对象中。该模式运行系统使用不同的请求把客户端参数化,对请求排队或者记录
' 请求日志,可以提供命令的撤销和恢复功能。是一种将函数命令包装成一个类对象的模式,在运行时实例化一个类获取实
' 例化对象,并使实例化对象获得一个函数的引用。首先需要先定义一个完整类,在类中封装一个Default函数,这样当在
' 调用创建此类时即可把Default函数的指针指向新建的那个对象类。
'-------------------------------------------------------------------------------
Option Explicit
Class oCommand
'定义输入
Private VarIntNum
Public Property Get Number
Number = VarIntNum
End Property
Public Property Let Number(ByVal oNum)
VarIntNum = oNum
End Property
'定义输出
Private VarResult
Public Property Get Result
Result = VarResult
End Property
Public Property Let Result(ByVal oResult)
VarResult = oResult
End Property
'默认主函数
Public Default Function Exec()
Me.Result=Number * Number
Exec=Me.Result
End Function
End Class
'构造一个构造器
Function Constructor(ByVal newNumber)
Set Constructor = New oCommand
Constructor.Number = newNumber
End Function
'调用构造器并输入参数
Dim con1
Set con1 = Constructor(3)
'命令模式
Call con1
'获取命令执行结果
MsgBox con1.Result
四、回调设计模式(CallBack Pattern)
'-------------------------------------------------------------------------------
' Description:
' 回调设计模式CallBack Pattern
' 主要用于一个模块执行完毕后,脚本自身会去回调一个所需要执行的代码块,一种非常实用的设计模式。
' 主要的出发点还是依靠类的销毁化函数引申出来的。要做到通用性的回调设计类,只需要在类中加入Execute反射
' 即可。
'-------------------------------------------------------------------------------
Option Explicit
Class Callback
'回调的动态脚本
Dim CallBackScript
'类的销毁化
Public Sub Class_Terminate()
Execute CallBackScript
End Sub
End Class
'定义回调变量
Dim cb
Set cb=New Callback
cb.CallBackScript="call msg()"
Function msg()
MsgBox "callback scriptiong"
End Function
MsgBox "script end"
五、函数指针模式(Function Pointer Pattern)
'-------------------------------------------------------------------------------
' Description:
' 函数指针模式Function Pointer Pattern
' 就是指向函数的指针变量。Function相当于一个测试模块,当需要添加或者删除模块时,只需要
' 在调用时更改LoadFunc数组即可,无需改动核心脚本的代码逻辑,这种模式在自动化测试中经常被用到的
' 控制测试流的技术手段。
'-------------------------------------------------------------------------------
Option Explicit
'函数tt1
Public Function tt1()
MsgBox "tt1"
End Function
'函数tt2
Public Function tt2()
MsgBox "tt2"
End Function
'函数tt3
Public Function tt3()
MsgBox "tt3"
End Function
'建立测试流函数
Public Function TestFlow(LoadFuncs)
Dim CallFunc,i
'遍历所有载入的函数名,并利用函数指针进行调用
For i=0 To UBound(LoadFuncs)-LBound(LoadFuncs)
'将CallFunc的指针指向动态载入的函数
Set CallFunc=GetRef(LoadFuncs(i))
'调用指针
Call CallFunc
Next
End Function
'调用测试流
Call TestFlow(Array("tt1","tt2"))
六、类的继承模式(Extends Pattern)
'-------------------------------------------------------------------------------
' Description:
' 类的继承模式Extends Pattern
' VBScript本身完全不支持类的继承,但通过后期的脚本处理技巧,使用一些取巧的方式来变相实现这些设计模式。
'-------------------------------------------------------------------------------
Option Explicit
'创建一个继承类库
Class ClassHelper
Private dict
'添加默认方法
Public Default Function addMethod(name)
Set dict(name)=GetRef(dict("type") & name)
End Function
'创建字典对象
Private Function createDict()
Set createDict=CreateObject("Scripting.Dictionary")
End Function
'复制字典对象
Private Function copyDict(super, child)
Dim key
For Each key In super
If IsObject(super(key)) Then
Set child(key)=super(key)
Else
child(key)=super(key)
End If
Next
Set copyDict=child
End Function
'新建一个类
Public Function newClass(name)
Set dict=createDict()
dict("type")=name
Set newClass=dict
End Function
'继承方法
Public Function extends(super, childType)
Set dict=copyDict(super, createDict())
Set dict("parent")=super
dict("type")=childType
Set extends=dict
End Function
'新建继承类
Public Function [new](super, arrParams)
Dim dict : Set dict=copyDict(super, createDict())
Call dict("initialize")(dict, arrParams)
Set [new]=dict
End Function
End Class
'载入继承帮助类
Dim Mercury : Set Mercury=New ClassHelper
'创建一个AutoTestTools新类
'START NEW ClassHelper
Dim AutoTestTools
Set AutoTestTools=Mercury.newClass("AutoTestTools")
AutoTestTools("effect")="Automation Testing"
Public Function AutoTestToolsInitialize(this, arrParams)
this("effect")=arrParams(0)
End Function : Mercury "initialize"
Public Function AutoTestToolsLaunch()
MsgBox "Launch AutoTestTools"
End Function : Mercury "Launch"
'END CLASS
'创建一个新继承AutoTestTools的类
'START NEW CLASS
Dim QuickTest
Set QuickTest=Mercury.extends(AutoTestTools, "QuickTest")
QuickTest("name")="QuickTest Professional"
QuickTest("support")="all"
Public Function QuickTestInitialize(this, arrParams)
this("support")=arrParams(0)
End Function : Mercury "initialize"
Public Function QuickTestLaunch()
MsgBox "Launch QuickTest"
End Function : Mercury "Launch"
'END CLASS
'初始化QuickTest类
Dim QuickTestCls : Set QuickTestCls=Mercury.[new](QuickTest, Array("web"))
'打印support属性,此时已经被初始化为Web
MsgBox QuickTestCls("support")
'执行QuickTest类中的Launch方法
Call QuickTestCls("Launch")()
'执行QuickTest类的父类的Launch方法
Call QuickTestCls("parent")("Launch")()
分享到:
相关推荐
通过以上六种方法,我们可以看到在QTP中调用Java程序并不复杂。每种方法都有其特点和适用场景,可以根据实际需求选择最合适的方案。掌握这些技巧后,就可以更加高效地利用QTP进行Java应用程序的自动化测试了。
此框架通常会结合Page Object Model (POM) 设计模式,将Web页面的元素抽象为独立的对象,便于管理和重用。POM使得测试代码更清晰,更容易维护,尤其是在应对Web界面频繁变化的场景下。 ### ReporterManager报告管理...
5.1 QTP设计模式 5.2 GUI层面向对象的扩展设计 6.1 框架设计理念 6.2 框架设计平台 6.3公共对象管理 6.4 用例设计管理 6.5 公共函数工厂 6.6 测试执行管理 6.7 测试报表管理 6.8 一点写给读者的话语(总结)
QuickTest Professional(QTP)是HP公司推出的一种自动化测试工具,主要用于功能测试和回归测试,尤其在Web和桌面应用的测试领域中应用广泛。QTP汉化工具包是为了方便中文用户使用,解决英文界面带来的阅读障碍,...
QTP支持三种录制模式:正常录制、模拟录制和低级录制,每种模式都有其特定的应用场景和限制。正常录制模式下,QTP直接对对象进行操作录制;模拟录制模式记录所有键盘和鼠标的精确操作,但脚本文件较大,且不易编辑;...
QTP,全称为QuickTest Professional,是HP公司推出的一款功能强大...总之,QTP自动化框架设计是一门深奥且实用的技术,需要结合具体项目需求,选择合适的框架模式,通过有效的工具和方法,实现高效、可靠的自动化测试。
【QTP8.0用户指南】是一份专为初学者设计的详细教程,旨在帮助用户理解和掌握QuickTest Professional(QTP)8.0版本的基本功能和高级特性。QTP,现已被命名为UFT(Unified Functional Testing),是HP公司开发的一款...
**QTP Delphi插件** 是专为在QTP中测试由Delphi开发的应用程序而设计的扩展工具。这个插件允许QTP更好地识别和操作Delphi组件,提高了对Delphi应用的自动化测试能力。由于Delphi组件可能有其独特的属性和行为,使用...
第5章和第6章讲解了设计模式和自动化测试框架的内容,这两章内容是QTP测试技术精华的浓缩,如QTP设计模式和自动化测试框架。 另外,《精通QTP:自动化测试技术领航》在第1章至第4章精心设置了习题,帮助读者巩固已...
QTP,全称为**QuickTest Professional**,是由Mercury Interactive Corporation开发的一款自动化测试工具,旨在为软件测试人员提供一种高效的方式,以自动执行重复的测试用例,确保软件产品的质量和稳定性。...
低级录制(Low Level Recording)是QTP的一种录制模式,它允许用户手动编辑对象识别代码,以更精确地控制测试步骤。相比于默认的高级录制,低级录制更适合处理那些复杂或者不规则的对象,能更好地适应特定的测试需求...
8. **QTP中如何实现框架设计?** - 使用Action。 - 使用共享库。 - 实现模块化。 通过以上的知识点总结,我们可以看出QTP不仅是一个强大的测试工具,而且拥有丰富的功能和灵活的应用场景。对于初学者来说,掌握...
三层架构是一种常见的软件设计模式,它将应用程序分为三个主要部分:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。在自动化测试脚本中,三层架构意味着: ...
QTP,全称为Quick Test Professional,是Micro Focus(原HP公司)开发的一款自动化测试工具,专为B/S架构的应用程序设计。它以其易用性、强大的功能和与测试管理工具的无缝集成而受到广泛赞誉。QTP的强大之处在于其...
- 选择录制模式。 - 操作目标应用程序,QTP会自动记录用户的动作。 - 结束录制后,QTP会自动生成测试脚本。 #### 四、增强脚本功能 - **加入检查点**:检查点用于验证特定条件是否满足。例如,可以设置一个文本...
通过《QTP自动化测试实践》的学习,读者不仅能掌握QTP的基本操作,还能了解到如何设计和实施高效的自动化测试策略,提高软件测试的质量和效率。 总的来说,这本书对于想要深入学习QTP自动化测试的IT从业者来说,是...
6. **Saffron框架**:名称"Saffron"可能是该框架的命名,它可能是一种自定义的QTP测试框架,结合了多种设计模式,如数据驱动、关键字驱动,以提供更高效、灵活的自动化测试解决方案。 综合以上,QTP自动化框架的...
8. **正则表达式应用**:正则表达式在QTP中用于匹配和提取复杂模式的文本,增强脚本的处理能力。 9. **调用Windows API**:QTP可以调用Windows API函数,扩展其功能,例如文件操作、系统交互等。 10. **Action调用...