自动化培训-函数关键字封装_第1页
自动化培训-函数关键字封装_第2页
自动化培训-函数关键字封装_第3页
自动化培训-函数关键字封装_第4页
自动化培训-函数关键字封装_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、测试自动化 12345QTP1QTP工程的“标配”QTP工程的标准“配置”如图中的大红框,是qtp一个新建的工程的(自动生成)默认文件和文件夹,这在测试过程中,给交易配工程或调试时报错(启动自动化实例失败、无响应适配器等),都需要优先检查的一步。检查工程是否正确、文件是否损坏,有几种方式:1、新建一个空工程,对比该有的工程文件是否齐全,包括Action两个文件夹中的文件;2、用qtp打开工程,调试执行看是否正常。3、图中usr文件的名称是否与平台的工程名称一样。注意:若是用tep执行时报错,先查看agent根目录executeproject文件夹下对应的工程是否正常、是否被agent正常解压缩

2、(工程是以压缩包的形式从tep传给agent,脚本和案例等也是压缩包形式),必要时用qtp打开调试验证;在agent无法发现问题,则回到源头TEP-Project目录下检查工程。QTP破解方法QTP破解(以qtp默认的安装路径为例,版本12.0以上)1、删除C:ProgramData目录下的“SafeNet Sentinel”文件夹(可能被隐藏,需设置显示隐藏的文件夹);2、运行C:Program FilesHPUnified Functional Testingbin目录下的“instdemo.exe”程序即可;Ps:可以自己写个Bat文件,每次直接运行:echo offDel /F /S

3、/Q C:ProgramDataSafeNet Sentinelecho 正在处理,请稍后.C:Program FilesHPUnified Functional Testingbininstdemo.exeF1和录制回放 什么是F1?在Windows操作系统下,快捷键F1用于调用程序的帮助文档。这些文档可以做为教学材料,也可以用于查阅。 如何录制?打开QTP,点击红色的录制按钮(F6),然后去操作被测试程序。 如何回放?录制完成后,点击回放按钮(F5) 录制回放有什么好处?不需要学习任何代码就可以制作自动化测试脚本。不知道操作方法时,录制回放可以得到想要的代码。 自动化就是录制回放吗?F1和

4、录制回放QTP的四种录制方式: 正常录制:默认录制模式,录制出来的脚本特点是直接对对象操作,不依赖分辨率和坐标(对象位置变更后,不需要重新录制就可以正常回放)。正常录制模式不能保证识别程序中的所有对象,某些特殊操作也无法录制,例如:鼠标拖拽。 模拟录制:开启正常录制后,点击Analog Recording(快捷键CTRL+F3),此模式可以录制鼠标轨迹,但是生成的脚本不能修改,分辨率或对象坐标变化后,需要重新录制。 低级录制:开启正常录制后,点击Low-Level Recording(快捷键SHIFT+F3),将所有不能识别的对象都识别为WinObject,通过对象在屏幕上的坐标来进行操作。

5、智能图像识别录制:新版本增加的功能, 除父对象外,都识别成InsightObject,通过图像识别技术进行操作。Android系统就是通过这种方法进行自动化测试的。 TMP平台QTPQTP对象识别机制和插件QTP对象识别机制和插件 什么是对象?初学者比较容易理解的说法,就是输入框,下拉菜单,按钮等等。另外还有一些调用的特殊对象,例如FileSystemObject、RegExp、Wscript等。 为什么要使用对象?指定了对象后,可以通过获取对象的属性和封装方法来进行操作,避免出现分辨率、坐标变化等情况的影响,保证自动化执行的正确性。另外,通过对象来操作更容易进行Coding,也能增加代码的可

6、读性。 如何识别对象?实际上,QTP是通过配置文件中的描述来识别对象的,也就是QTP的封装对象。我们可以通过Object Identification功能来查看QTP封装了哪些对象,以及它们的属性。在自动化项目中,通常我们是通过添加对象库或者Object Spy功能来识别对象的。(当然,在有足够多的经验时,可以通过眼睛直接在屏幕中看出来) 什么是方法?简单的说,就是指对象的动作而已,例如对文本框的输入、获取框中内容、点击等动作,是文本框对象的方法,都可以通过对象“点”出来。QTP对象识别机制和插件 什么是插件?刚才说过,QTP是通过配置文件来识别对象的,而插件其实就是一种配置文件。由于QTP自

7、身只封装了少数的对象,导致我们需要通过一些插件来满足我们对不同被测程序的识别需求。 插件加载越多越好吗?插件并不是加载得越多越好,加载太多的插件会影响QTP的对象识别精确性,也会增加QTP启动和加载的时间;甚至有某些插件之间还存在冲突(对同一对象有不同的描述),会导致QTP无法正常运行。 没有对应的插件怎么办?1.通过其他途径获得2.自己开发、封装3.对象映射4.强制识别为WinObject来操作5.放弃自动化测试常见系统的对象类型QTP的自带功能Object Indentification(实际上就是QTP的配置文件)可以查看当前加载的配置文件和插件中封装的对象。QTP的对象映射还是在Obj

8、ect Indentification里面,标准Windows控件下面可以自定义(User-Defined),用Spy获取对象的Class Name,然后Mapping To指定的对象类型中,那么下一次添加对象到对象库时,就会添加成映射的那个类型。VBS基本语法所有Rem后面的内容都被认为是注释(也可以用单引号)VBS中的变量、方法、函数、对象的引用等,不区分大小写VBS申明变量时不允许赋值,同时申明多个变量可以用“,”来分隔数组定义时是下标是从1开始的,读取时下标是从0开始的,例如:Dim Array(1),读取时是Array(0)操作符:加减乘除、大小等于都是常用符号,大于等于=,小于等于

9、=,不等于,乘方,取余Mod;逻辑运算符And、Or、Not;连字符+或者&,通常都用&;对象比较is条件语句有两种:和循环控制比较多,跳出循环:,跳出Action和Run比较特殊,错误处理:,字面意思,遇错继续执行和遇错停止把多条语句写在一行中用“:”连接,把一条语句分成多行用“_”连接函数和过程:,区别是一个没有返回值,另外一个可以有返回值。另外,比较特殊的一点是,类Class:,使用时Set出来用Option Explicit强制变量必须先申明才能使用AOM、DOM和EOM简介 AOM:Automation Object Model(自动化对象模型),QTP安装目录Bin

10、目录下,有一个QTObjectModel.dll,通过这个Dll,我们可以使用其他脚本语言调用QTP,以VB来举例:这样,我们就可以调出一个QTP的操作界面,然后会弹出智能提示,提示这个Dll下的所有方法和属性。详细的用法可以参见QuickTest Automation Reference,这里不做过多的介绍(TMP平台的TEPAgent也是通过这个模型来调用QTP的)。 DOM: Document Object Model(文档对象模型)。作为开发人员可以通过DOM非常方便地控制文档对象中的属性、方法和事件,测试也一样可以。而且DOM方式不需要QTP对象库处理(读取对象属性,查找对象,属性匹

11、配,调用封装方法,操作对象),属于直接对对象进行操作的方式,执行效率上更高,还能访问许多QTP没有封装的接口。相对来说,这种方式要求的技术较高,可以看一下下面的例子。AOM、DOM和EOM简介EOM:Excel Automation Object Model,即Excel的自动化模型对象。看起来与AOM很类似,例如下面这些:这些对象里面的用法都可以通过对象名“点”出来,简单来说,如果这些都会了,就可以算是一个准AX了。Ps:这种方式连接Excel,较麻烦又占用资源。QTP对象库编程所谓的QTP对象库,其实是将被测程序中的对象,储存到QTP工程中。一般来说,可以通过录制和手工添加对象两种方法获取

12、对象。通过录制时QTP会自动给对象命名,录制的对象比较多的时候,可能会出现不记得哪一个对象映射的是哪一个控件的情况,并且可能会添加一些不需要的对象。手工添加对象时,可以即时修改对象名称,方便记忆。同时不会添加不需要的对象,建议使用手工添加。下面我们来看一个QTP中添加的对象:QTP对象库编程这一句是ORP(Object Repository Programming,即对象库编程)的语句,看起来非常简洁,容易理解。这是对应的DP(Descriptive Programming,即描述性编程)语句,比ORP的要长,也不太好看。但是仔细看一下,我们会发现它是有规律的。其实打开对象库看一下这个对象的属

13、性,我们会发现,所谓的ORP其实就是把DP进行了二次封装而已。那么反过来,只要我们记住一些基本的属性名称,使用DP根本就不会遇到什么困难(实在不会描述的,抓个对象看一下就知道了)。同样的,我们也可以把这些描述封装起来,例如:这个是后面会说到的脚本函数化,让脚本看起来更简洁,更直观,无需抓取对象就可以直接操作。DP并不高深,ORP也仅仅是把对象封装了,DP同样能轻松做到。QTP描述性编程给一个实际的函数化脚本例子:确认父对象Step1:缩小并确认子对象所在范围(父对象到哪一层级)。若无经验,则通过QTP工具Spy后,按其显示的对象层级去一层层描述。例如抓到的“用户名”对象,其对象层次如截图所示,

14、它是在Browser(类型)对象下的page对象下的WebTable对象下。Step2:确认父对象后,用描述性编程方法描述它,使用尽可能少的属性,让QTP依据这些属性可以唯一识别它(区分其他相似的对象)Step3:使用highlight方法,确认在界面上能否“高亮”显示刚才描述的父对象。如:Browser(title:=.*工时.*).Page(title:=.*工时.*).highlight确认子对象-目标对象Class Name:=WebElement,abs_x:=617,abs_y:=402,class:=left,height:=35,html id:=,html tag:=TD,i

15、nnerhtml:=用户名,innertext:=用户名,outerhtml:=用户名,outertext:=用户名,title:=,type:=,visible:=True,width:=104,x:=617,y:=283Step1:目标对象(子对象)一般是带有中文或英文名称,可通过对象的名称与其他对象进行区分。例如右侧显示的是,通过QTP的SPY,识别到的“用户名”对象的属性和属性值,因此可以挑选innerhtml、 innertext、 outerhtml和outertext四个属性Step2:缩小属性范围后,查看其属性值,选择较简单、直观的。例如outerhtml属性一般不会挑选,对于

16、后续属性值的局部匹配可能会有影响。Step3:多抓取同类型的对象,比较其可公共使用的属性,减少维护的工作量。注意:相同类型的对象,有的属性值可能为空,例如outertext属性。Step4:抓取其他不同类型的对象进行对比,确认挑选的(公共的)属性是否会和其他类型的对象冲突。(ps:该步骤也可以在调试阶段验证)为什么描述的对象,要尽可能提取公共的属性?函数封装的必要性1、维护工作量如果不封装函数,相当于每个测试人员可以按自己的理解和习惯去编写代码,同种类型的对象,可能使用了不同的属性,可以产生多少种不同的语句?再加上n种类型控件的情况呢?由此因变更产生的维护工作量可能较大。(ps:编程时很难统一

17、所有代码、格式,一些细节,甚至是部分交易特有的东西,需要在调试过程中才了解)2、代码的冗余一个对象的操作语句一般至少有4句:1)点击(选中)对象语句;2)输入语句;3)回车确认(输入)语句;4)等待时间语句;相当于同种类型的对象的操作,会在脚本中重复编写多次,代码的冗余导致脚本看起来非常长、较乱,且一旦该类型对象的方法或功能有变,需要一个个去确认、修改、调试。3、易用性并不是所有自动化人员都熟悉vbs语言、函数封装,甚至是最基础的代码调试,更别提移交出去的基准库,因此需要封装一套功能、方法,方便给测试人员直接使用和调试;换言之,测试人员只需要具备基础的知识和能力,甚至达到只需要在关键字列表中找

18、到能提供他想要的功能的效果;并且在发现问题时,方便测试人员查错排错。描述性编程rem 创建空对象Set a = description.Createrem 给对象添加属性和属性值a.Add micclass, WebElementa.Add outertext, 用户名rem 下面这个属性区分另一个对象a.Add html tag, TDrem 适用于单ie窗口的情况,优点:无需通过Browser和Page的某个属性的具体值识别对象,如title。Browser(micclass:=Browser).Page(micclass:=Page).highlightrem 适用于多个ie窗口的情况,

19、通过指定title或其他属性区分Browser(title:=.*工时.*).Page(title:=.*工时.*).highlightrem 通过ChildObjects方法连接父对象和子对象,表示子对象在父对象的范围里Set b = Browser(micclass:=Browser).Page(micclass:=Page).ChildObjects(a)rem 打印 父对象范围内,满足条件的子对象的个数print b.countrem 遍历每个子对象For i = 0 To b.count - 1 rem 将对象在界面中高亮 b(i).highlightNext底层函数说明类名称函数名

20、称功能重要(输入)参数输出参数IdentityObjectClassspecifiedPath拆分对象的路径(格式为:对象类型.系统界面父对象名称.弹出框标题.目标对象名称.序号)strPath(对象路径)strRoute(父对象类型)、strSecondRoute(系统界面父对象的名称,若有多个相同系统界面,需填值)、strSubRoute(弹出框标题)、strElement(目标对象名称)、intOrder(目标对象的序号,即若有相同属性的对象,取第几个。默认值为0,取第一个对象)getDesc创建空对象,为对象添加属性和属性值strView(目标对象的默认属性名称)、strPropert

21、ies(目标对象的额外属性)getDesc(目标对象,没有定义所属的父对象)getObject通过ChildObjects方法,连接父对象和目标对象(子对象)strView(目标对象的默认属性名称)、strProperties(目标对象的额外属性)getObject(目标对象集合)getObjectInSpecifiedTime 在指定时间内,从对象集合中取指定(第intOrder个)的对象strView(目标对象的默认属性名称)、strProperties(目标对象的额外属性)、intTimeout(超时时间,若值为Empty,即未指定,则默认时间为10s)getObjectInSpecif

22、iedTime(目标对象)specifiedObject从目标对象集合中算出离参照对象最近的对象:将参照对象的横坐标和纵坐标,与目标对象集合中的各个对象的横纵坐标相减,再把两个差值的乘积,和对应对象的序号存入字典对象Dictionary中,进行排序。objSource(参照对象)、objTarget(目标对象集合)、boolDirection(True表示目标对象在参照对象右侧,False表示在左侧)specifiedObject(目标对象)ThrowError抛出错误给QTP,停止执行后续脚本ErrorMessage(错误信息)无使用方法/格式格式格式strRoutestrSecondRou

23、testrSubRoutestrElementintOrder例子例子父对象类型.目标对象名称*必填EmptyEmpty目标对象名称0交易窗口.凭证代号父对象类型.目标对象名称.序号*必填EmptyEmpty目标对象名称目标对象序号Index交易窗口.凭证代号.2弹出框.弹出框标题.目标对象名称*必填Empty弹出框标题目标对象名称0弹出框.兴业收费.账号弹出框.弹出框标题.目标对象名称.序号*必填Empty弹出框标题目标对象名称目标对象序号Index弹出框.兴业收费.账号.2父对象类型.系统界面标题.弹出框标题.目标对象名称*必填系统界面名称弹出框标题OrEmpty目标对象名称0交易窗口.i

24、e2.Empty.凭证种类弹出框.ie2.提示.确定基础函数说明类名称函数名称功能重要(输入)参数输出参数JavaClassgetParent调specifiedPath函数,并根据返回的参数指定父对象strRoute(父对象类型)、strSubRoute(弹出框标题)objParent(父对象全局变量)JavaLabel目前用于获取弹出框内的Label标签(对象)strProperties(标签对象的额外属性)JavaLabel(某弹出框的Label对象)WaitObjControl在指定时间(10s)内,等待对象(弹出框、页面要素或界面按钮)直至出现或消失,超时则抛错或选择不报错。Obje

25、ctType(对象类型)、TextView(对象名称)、strProperties(如果是弹出框,弹出框内容)、isExist(True表示等到对象出现,False等到对象消失)、isThrowError(True表示超时报错,False表示不报错)无JavaMultiplyList用于获取复选框对象。目前用于柜员新增交易时,部门组的选择。strProperties(复选框对象的额外属性)JavaMultiplyList(复选框对象)JavaTextEdit获取文本框对象(toolkit class=.*Text)strProperties(文本框的额外属性)JavaTextEditJavaE

26、dit获取文本框对象(toolkit class=.*TextView.*)GetObjMethod(值为Empty,表示(常规方法)依据某页面要素获取指定的文本框对象;若为其他值,表示通过文本框自身的属性识别到它自己)JavaEditJavaList用于下拉框类型的控件的输入。通过点击下拉按钮,从下拉列表中选择指定的选项。strProperties(下拉框对象的额外属性)JavaList(下拉框-选项已显示出来)JavaCombo获取下拉框对象strProperties(下拉框对象的额外属性)JavaComboJavaCheckBox获取单选框对象(选择/取消-on/off)strPrope

27、rties(单选框对象的额外属性)JavaCheckBoxJavaButton一般获取弹出框中的按钮对象(如确定、取消等) strProperties(按钮对象的额外属性)JavaButtonJavaAButton获取交易界面中按钮的对象(如打印、下一页、指示灯等)GetObjMethod(值为Empty,表示直接通过按钮名称识别到按钮本身;若为其他值,表示通过某页面要素,定位离其最近的按钮对象)JavaAButtonJavaALabel获取标签类型的对象,一般用于获取界面下日期、柜员号、流水号等对象(的值)strProperties(标签对象的额外属性)JavaALabelIdentityO

28、bjectClass类getparent 解析(要素的)路径 定义(指定的)父对象getDesc 创建(空)对象,即目标控件对象 给对象定义指定的属性和属性值getObject 为控件对象设置父对象 通过QTP的ChildObjects方法连接两个对象,建立层级关系getObjectInSpecifiedTime 控制QTP在一定时间内,查找指定的对象;循环查找直到发现对象或超时报错 从目标对象集合中取出指定的(第intorder个)对象函数关键字封装-注意事项1、独立性函数功能独立,尽可能是具有唯一性,与其他函数功能不冲突。2、通用性针对某个控件或对象,函数提供的方法应具有通用性,且较全面,

29、至少(适用)覆盖当前系统的控件所需的所有操作方法。3、简洁编写的代码,根据实际情况,尽量简化,结合With、Select、Do等方法减少重复(冗余)的代码;且另一方面,使用这些方法,排版出来的代码相对美观、整齐、易读。(代码分层次时请用Tab键)4、区分全局和局部变量(或对象)明确变量或对象的应用范围,如果是在某函数或类中使用,则定义变量在内部(局部变量);反之,在脚本开头的定义(声明)区域中定义全局变量。5、变量名称命名(易理解)统一命名格式,包括哪些类型单词缩写、全拼、使用拼音或英文等。其实目的就一个:统一规范、相对易理解,必要时在脚本中添加注释说明。正则表达式Function RegEx

30、pTest(patrn, strng) Dim regEx, Match, Matches 建立变量。 Set regEx = New RegExp 建立正则表达式。 regEx.Pattern = patrn 设置模式。 regEx.IgnoreCase = True 设置是否区分字符大小写。 regEx.Global = True 设置全局可用性。 Set Matches = regEx.Execute(strng) 执行搜索。 For Each Match in Matches 遍历匹配集合。 RetStr = RetStr & Match found at position R

31、etStr = RetStr & Match.FirstIndex & . Match Value is RetStr = RetStr & Match.Value & . & vbCRLF Next RegExpTest = RetStrEnd FunctionMsgBox(RegExpTest(is., IS1 is2 IS3 is4)正则表达式-属性和方法类型类型名称名称说明说明备注备注属性Global设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。如果搜索应用于整个字符串,Global 属性的值为 T

32、rue,否则其值为 False。默认的设置为 False。IgnoreCase设置或返回一个Boolean值,指明模式搜索是否区分大小写。如果搜索是区分大小写的,则 IgnoreCase 属性为 False;否则为 True。缺省值为 False。Pattern设置或返回被搜索的正则表达式模式。使用特殊的字符和序列书写正则表达式的模式方法ExecuteExecute 方法返回一个 Matches 集合,其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配,Execute 将返回空的 Matches 集合。ReplaceReplace 方法返回 string1 的副

33、本,其中的 RegExp.Pattern 文本已经被替换为 string2。如果没有找到匹配的文本,将返回原来的 string1 的副本。Test如果找到了匹配的模式,Test方法返回True;否则返回False。RegExp.Global属性对Test方法没有影响。正则表达式-字符和序列字符描述 将下一个字符标记为特殊字符或字面值。例如n与字符n匹配。n与换行符匹配。序列与匹配,(与(匹配。 匹配输入的开始位置。zoo$ zoos$ 匹配输入的结尾。* 匹配前一个字符零次或几次。例如,zo*可以匹配z、zoo。+ 匹配前一个字符一次或多次。例如,zo+可以匹配zoo,但不匹配z。? 匹配前一个字符零次或一次。例如,a?ve?可以匹配never中的ve。.匹配换行符以外的任何字符。(pattern) 与模式匹配并记住匹配。匹配的子字符串可以从作为结果的 Matche

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论