`
kiki1120
  • 浏览: 307909 次
  • 性别: 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——自动化测试技术领航

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

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

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

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

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

    精通QTP:自动化测试技术领航(余杰 赵旭斌) [高清扫描版]

    《精通QTP:自动化测试技术领航》(余杰 赵旭斌) [高清扫描版] 《精通QTP:自动化测试技术...第5章和第6章讲解了设计模式和自动化测试框架的内容,这两章内容是QTP测试技术精华的浓缩,如QTP设计模式和自动化测试框架。

    软件测试中QTP应用模式设计

    设计应用软件测试中QTP应用模式设计自动化测试并不只是利用自动化测试工具进行录制回放操作。虽然基本是每一个自动化测试工具都必须提供的功能,但如果只是这么应用,从严格意义上来说,这并不能算是自动化测试。...

    QTP应用模式设计

    自动化测试并不只是利用自动化测试工具进行录制回放操作。虽然基本是每一个自动化测试工具都必须提供的功能,但如果只是这么应用,从严格意义上来说,这并不能算是自动化...  早期使用QTP,可以利用QTP提供的功能实

    QTP用户指南(中文)

    的集中质量解决方案,原为 TestDirector)进行交互,以及有关设计 QuickTest 测试以便与 Mercury 性能测试和应用程序管理产品一起使用的详细注意事项。 第九部分:附录 提供有关常见问题的信息。

    LoadRunne性能

    《精通QTP:自动化测试技术领航》共分为6章,书中实例新颖、趣味性强、案例贴近实际,在...第5章和第6章讲解了设计模式和自动化测试框架的内容,这两章内容是QTP测试技术精华的浓缩,如QTP设计模式和自动化测试框架。

    QTP_8_用户手册中文版

    选择录制模式........................................................................................86 更改Active Screen...................................................................................

    软件测试面试题总结

    java程序员面试宝典、java程序员的基本修养、大话设计模式只看了重要的 )、测试相关(软件测试的艺术、从菜鸟到测试架构师、软件测试技术大全、selenium,qtp,junit的一些相关资料和书)、linux看了一点(鸟哥的...

    2018 猎豹网校 教程大全 资源难找赶紧保存吧

    Java设计模式[MP4] JavaScript 经典教程[MP4] Java 编程思想 中级教程[MP4] Java 编程思想 高级教程[MP4] Java 编程思想 初级教程[MP4] HTML网页设计[MP4] Flash CS5 经典教程[MP4] Flash ActionScript 经典...

    软件测试经典面试题 (超实用)

    20、简述一下c/s模式或者b/s模式? 33 21、TCP/UDP有哪些区别? 34 22、ISO模型?HUB、tch、Router是ISO的第几层设备? 34 23、内存有哪几种存储组织结构.请分别加以说明? 34 人力资源面试题 34 1、你的测试职业...

    测试培训教材

     -测试设计。  -测试执行。  -测试记录和缺陷跟踪。  -回归测试。  -测试总结和报告。 一个好的测试管理工具应该能把以上几个阶段都管理起来。 测试人员每时每刻都在度量别人的工作成果,而测试人员的...

    loadrunner测试资料

    无不体现着这一理念,测试工作越发被机械化Coding化,很多企业招人时也不乏喜欢给自己的员工提些要求QTP/Loadrunner/Winrunner/RTF/Rebot一系列测试化工具被列入正规、精益的代名词。于是我们投入了大量人力物力来...

    性能测试进阶指南——LoadRunner11实战 part1

    4.4 QTP脚本在场景中的运行 4.5 场景数据 4.6 小结 第5章 数据收集分析Analysis 5.1 新建Analysis分析 5.2 Analysis Summary 5.2.1 Analysis Summary(场景的摘要) 5.2.2 Statistics Summary(场景状态的统计说明...

    性能测试进阶指南——LoadRunner11实战 part2

    4.4 QTP脚本在场景中的运行 4.5 场景数据 4.6 小结 第5章 数据收集分析Analysis 5.1 新建Analysis分析 5.2 Analysis Summary 5.2.1 Analysis Summary(场景的摘要) 5.2.2 Statistics Summary(场景状态的统计说明...

    性能测试进阶指南——LoadRunner11实战 part3

    4.4 QTP脚本在场景中的运行 4.5 场景数据 4.6 小结 第5章 数据收集分析Analysis 5.1 新建Analysis分析 5.2 Analysis Summary 5.2.1 Analysis Summary(场景的摘要) 5.2.2 Statistics Summary(场景状态的统计说明...

Global site tag (gtag.js) - Google Analytics