`
kiki1120
  • 浏览: 314464 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

QTP的六种设计模式

    博客分类:
  • QTP
 
阅读更多

一、单例模式(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程序并不复杂。每种方法都有其特点和适用场景,可以根据实际需求选择最合适的方案。掌握这些技巧后,就可以更加高效地利用QTP进行Java应用程序的自动化测试了。

    QTP三种自动化测试框架

    此框架通常会结合Page Object Model (POM) 设计模式,将Web页面的元素抽象为独立的对象,便于管理和重用。POM使得测试代码更清晰,更容易维护,尤其是在应对Web界面频繁变化的场景下。 ### ReporterManager报告管理...

    精通QTP——自动化测试技术领航

    5.1 QTP设计模式 5.2 GUI层面向对象的扩展设计 6.1 框架设计理念 6.2 框架设计平台 6.3公共对象管理 6.4 用例设计管理 6.5 公共函数工厂 6.6 测试执行管理 6.7 测试报表管理 6.8 一点写给读者的话语(总结)

    QTP汉化工具包

    QuickTest Professional(QTP)是HP公司推出的一种自动化测试工具,主要用于功能测试和回归测试,尤其在Web和桌面应用的测试领域中应用广泛。QTP汉化工具包是为了方便中文用户使用,解决英文界面带来的阅读障碍,...

    qtp初学者快速入门

    QTP支持三种录制模式:正常录制、模拟录制和低级录制,每种模式都有其特定的应用场景和限制。正常录制模式下,QTP直接对对象进行操作录制;模拟录制模式记录所有键盘和鼠标的精确操作,但脚本文件较大,且不易编辑;...

    QTP 自动化 框架 设计

    QTP,全称为QuickTest Professional,是HP公司推出的一款功能强大...总之,QTP自动化框架设计是一门深奥且实用的技术,需要结合具体项目需求,选择合适的框架模式,通过有效的工具和方法,实现高效、可靠的自动化测试。

    qtp8.0用户指南

    【QTP8.0用户指南】是一份专为初学者设计的详细教程,旨在帮助用户理解和掌握QuickTest Professional(QTP)8.0版本的基本功能和高级特性。QTP,现已被命名为UFT(Unified Functional Testing),是HP公司开发的一款...

    QTP中Delphi插件

    **QTP Delphi插件** 是专为在QTP中测试由Delphi开发的应用程序而设计的扩展工具。这个插件允许QTP更好地识别和操作Delphi组件,提高了对Delphi应用的自动化测试能力。由于Delphi组件可能有其独特的属性和行为,使用...

    精通qtp自动化测试技术领航

    第5章和第6章讲解了设计模式和自动化测试框架的内容,这两章内容是QTP测试技术精华的浓缩,如QTP设计模式和自动化测试框架。 另外,《精通QTP:自动化测试技术领航》在第1章至第4章精心设置了习题,帮助读者巩固已...

    QTP 软件测试教程

    QTP,全称为**QuickTest Professional**,是由Mercury Interactive Corporation开发的一款自动化测试工具,旨在为软件测试人员提供一种高效的方式,以自动执行重复的测试用例,确保软件产品的质量和稳定性。...

    qtp测试用例及测试脚本

    低级录制(Low Level Recording)是QTP的一种录制模式,它允许用户手动编辑对象识别代码,以更精确地控制测试步骤。相比于默认的高级录制,低级录制更适合处理那些复杂或者不规则的对象,能更好地适应特定的测试需求...

    QTP面试题及学习

    8. **QTP中如何实现框架设计?** - 使用Action。 - 使用共享库。 - 实现模块化。 通过以上的知识点总结,我们可以看出QTP不仅是一个强大的测试工具,而且拥有丰富的功能和灵活的应用场景。对于初学者来说,掌握...

    自录QTP9.0脚本

    三层架构是一种常见的软件设计模式,它将应用程序分为三个主要部分:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。在自动化测试脚本中,三层架构意味着: ...

    QTP学习与实践经验总结

    QTP,全称为Quick Test Professional,是Micro Focus(原HP公司)开发的一款自动化测试工具,专为B/S架构的应用程序设计。它以其易用性、强大的功能和与测试管理工具的无缝集成而受到广泛赞誉。QTP的强大之处在于其...

    软件测试 QTP

    - 选择录制模式。 - 操作目标应用程序,QTP会自动记录用户的动作。 - 结束录制后,QTP会自动生成测试脚本。 #### 四、增强脚本功能 - **加入检查点**:检查点用于验证特定条件是否满足。例如,可以设置一个文本...

    QTP自动化测试实践

    通过《QTP自动化测试实践》的学习,读者不仅能掌握QTP的基本操作,还能了解到如何设计和实施高效的自动化测试策略,提高软件测试的质量和效率。 总的来说,这本书对于想要深入学习QTP自动化测试的IT从业者来说,是...

    QTP自动化框架开发(实用框架)

    6. **Saffron框架**:名称"Saffron"可能是该框架的命名,它可能是一种自定义的QTP测试框架,结合了多种设计模式,如数据驱动、关键字驱动,以提供更高效、灵活的自动化测试解决方案。 综合以上,QTP自动化框架的...

    QTP描述性编程技术集锦

    8. **正则表达式应用**:正则表达式在QTP中用于匹配和提取复杂模式的文本,增强脚本的处理能力。 9. **调用Windows API**:QTP可以调用Windows API函数,扩展其功能,例如文件操作、系统交互等。 10. **Action调用...

Global site tag (gtag.js) - Google Analytics