一篇文章学通QTP UFT自动化测试实战
UFT作为一款老牌自动化测试工具,入门相对简单,在开源自动化工具爆发的今天,UFT在当今在自动化测试领域仍有一定优势,学习UFT可以帮助大家快速建立自动化测试思想,尤其在开发自动化测试平台、测试工具过程中,可以根据UFT提供的设计思想,为设计出好的工具提供思路。像现今流行的智能驾驶智能座舱、arm底层测试工具都有UFT身影。本篇通过实例方式帮助大家学会UFT自动化测试工具,包含重点、难点以及最终的测试框架。
1、基础使用
录制脚步功能使用
首先需打开UFT 选择Web、NET等常用的控件

工具栏选择
Record->Record and Run Settings 选择Web程序或者Windows Applications->Recod(开始录制)

录制开始后,首先打开”百度”窗口,我们在搜索框中输入”test”,并“百度一下”录制的脚本如下:

识别不同对象
Web应用:

脚本如下:
普通C/S系统

.NET应用

代码如下:
2、登录功能开发
步骤: 先增加对象库
工具栏 Object Spy->Add Object to Respository,对象库用于保存UI界面元素属性方法,以下是“Flight”-“login”-“Agent Name”对象库,其中Login是登录界面,Agent Name是登录框,如下:


注意:以上图1-7为Login对象属性,图1-8为Name对象属性,写脚本之前先把界面对象增加到对象库中,如上:1-8中,Agent Name在对象库中有两层,第一层为Login,第二层为Agent Name:,脚本中要先从第一层开始,找到对应的Class,Login对应的Class->Dialog,Agent Name:对应WinEdit
登录脚本如下:

Run之后:Agent Name:中成功输入“test”,如下图所示:

基础加强:以上Login,Agent Name:对应的Name值是默认值,也可以在对象框中进行修改:
Login->Flight_Login,Agent Name:->Name:,如下图所示:

修改完之后测试脚本会自动修改为:
3、增加订单
通过上面的学习,我们学会了编写第一个测试脚本,下面继续登录到Flight Reservation中进行增加航班。

步骤: (1)先增加订单对象增加到对象库中

(2)、控件类型分析:该流程涉及到text,button,wincombobox,winlist四种控件。用到Set,GetROProperty,Select,Click方法.可以通过帮助文档查看每种控件具体用法,以Set为例:

如:文本框详细注释如下
增加订单功能如下:
注:脚本详解,点击”ok”之后,跳转到订单界面,页面出现需要时间,脚本中加入wait方法,wait之后的脚本便会延迟执行;Select是选取值,选第一个值,则用0,选二个,则用1,以此类推;直接点击按钮用click;为文本框赋值用set;Type方法是按照字符逐个输入,而set是一次性赋值。
执行完之后”Order No”产生

4、检查FlyFrom与FlyTo下拉列表值
功能分析:以FlyFrom为例,通过帮助文档,我们得知用GetItemsCount方法计算下拉框元素总个数,通过For循环获取其中某个值,然后与预期值进行比对。
脚本如下:
脚本分析:
把预期值存放于数组中,用GetItemsCount方法获取总数,用GetItem获取FlyFrom列表实际值,由于是从第一个值对应Item是0,故For语句总数要减1,数组Item也是从零开始,取”Denver”用flyFrom(0),取数组长度可用ubound方法,如:ubound(flyFrom),msgbox 是以弹出框的形式输出消息,vbs连接字符串需要用&符号

5、工具栏新增订单以 File->Open Order为例
首先需要把menu对象增加到对象库中,有以下两种方法可打开Open Order…
方法一: Window("Flight Reservation").WinMenu("Menu").Select "File;Open Order..."
方法二:Window("Flight Reservation").WinMenu("Menu").Select "<Item 1>;<Item 2>"

6、对象库操作
6.1 合并对象库、对象库就是储存QTP各Object以及其识别属性,从而在被测应用程序中找到对应的唯一的对象,在进行写脚本之前,需要先增加对象库Resources->Object Repository,用鼠标点击Help下方”+”鼠标会变成”手”状,然后点击被测程序的UI元素,如点击Fly From,便会加入到对象库中.

合并对象库:
如A同学在对象框中增加了FlyFrom,B同学在对象框中增加了FlyTo,我们可以把A,B同学的对象框合并成一个新的对象库包含FlyFrom与FlyTo
打开:Object->Object Repository Manager->Tools->Object Repository Merge Tool

选择文件并”ok”,通过file-save便可得到合并后的对象库

6.2 描述性编程
如不使用对象库,可以用描述性编程:
注:如果父级对象使用使用描述性编程,则子级对象必须使用描述性编程,以下两种写法都有错
6.3 GetROProperty、SetTOProperty和 GetTOProperty
GetROProperty:获取被测对象的运行时属性值
SetROProperty:修改运行时被测对象的属性,
GetTOProperty:取得仓库对象的某个属性的值
如:获取FlyFrom当前值,可用GetROProperty方法,点”+”可以看到更详细的Name,Value.其中text对应的值是”Denver”

电“+”增加"text“属性

由上,可以用以下脚本得到FlyFrom当前值
Set fly = Window("Flight Reservation").WinComboBox("Fly From:")
msgbox fly.GetROProperty("text")
SetTOProperty 增加属性与属性值
fly.SetTOProperty "add","wang"
msgbox fly.GetTOProperty("add")用GetTOProperty查看对象库中该属性值
7、函数与报告
7.1 vbs中函数有Function与Sub
Function与Sub,Function可有返回值,Sub没有
Sub:

Function:

练习:用函数重构检查FlyFrom值代码:
分析:我们可用Set定义FlyFrom对象,如:
Set flyFrom = Window("Flight Reservation").WinComboBox("Fly From:")
定义后求列表框元素总数可用flyFrom.GetItemsCount
脚本如下:
注释:定义函数CompareComobox(obj),其中obj是需要传递的FlyFrom对象,函数内部直接用obj代替之前的Window("Flight Reservation").WinComboBox("Fly From:"),调用函数时直接把fly作为参数传递过去便好。
7.2 报告
UFT自带测试报告Reporter方法
Reporter.ReportEvent EventStatus, ReportStepName, Details, [ImageFilePath]
EventStatus有四种状态0,1,2,3分别对应micPass,micFail,micDone,micWarnging
例:用micPass,micFail重构检查FlyFrom下拉框值,脚本如下:

注:ImageFilePath可以不要,输出时采用obj.GetItem(i)&"is right"方便查看是哪边出错,在"is right" is前应增加一个空格,便不会与前面字符连接在一起:obj.GetItem(i)&" is right"
QTP在运行结束后,不让它立即产生测试报告:
Tools-Options-Run sessions-View results 变为uncheck
配置Configure选项可以产生不同形式测试报告HTML,Doc,Pdf


7.3 开启应用程序
打开flight程序:

打开浏览器
8.数据驱动
8.1 自带databable应用举例
DataTable("Col", dtLocalSheet)
DataTable("Col", dtGlobalSheet)
dtLocalSheet就是当前Action的DataTable,dtGlobalSheet就是Global的DataTable,Col是列名
DataTable("Col", "Action2")
列名值不可为数字,特殊字符,否则会报错

DataTable(1, 1) 获取Global,第1列元素数据

获取Action1,第1列元素数据
循环获取下一行
8.2 导入导出
8.3 实战datatable重构检查FlyFrom值:
步骤把预期值贴入datatable中

首先要循环读出flyFrom这一列值:
法一:File-Setting-Run-Run on all rows
用以下脚本

选择Run one iteration only 或者Run from row 1 to row 1
用以下脚本:
注:以上两种方法都可以循环读取flyFrom这一列值,重构如下:
注:把数组直接改为datatable,并在Next语句之前加上datatable.SetNextRow让datatable读取下一行数值
8.4 动态数组与字典
Datatable中值我们也可以存放于动态数组或者字典中,然后再调用,重构如下:
法一:动态数组
注:该函数返回值直接为数组类型,仅需要用ubound求出数组长度,便可遍历该数组
法二:字典
注:对datatable可以不适用字典或动态数组,直接适用便可,这里只是顺便介绍存储数据的方法.字典是Key-value 数据格式,其中Key必须是唯一的,用Add方法把数据增加到字典中,如上脚本输出的key以及对应的value值。
9. Excel操作
注:以上脚本把读取excel值存放于动态数组中,该函数以数组形式返回,第一个参数是excel存放路径,第二个位工作薄名字,第三个为第几列.读者可以根据以下方法进行重构检查FlyFrom元素值,调用该方法:
写excel:
调用该函数: 调用完之后Sheet2中第一行第一列被写入值test

10、外部文件
10.1对外部vbs文件操作
之前演示的函数,我们都存放于同一个脚本文件中,下面介绍几种方法直接调用外部文件:
把CompareComobox函数拷贝到com.vbs文件中

(1)关联函数File->Settings->Resources增加com.vbs函数

增加完成后运行报错:
这是由于数组放于脚本文件中,没有作为变量传递过来,找不到数组原因,
法一:把数组也拷贝到该函数中
法二:函数增加一个参数,用于传递数组
修改后执行成功
(2)用ExecuteFile执行
注:ExecuteFile后可直接用vbs存放路径,也可以把com.vbs文件放solution下
用相对路径:ExecuteFile "com.vbs"
(3) 用LoadFunctionLibrary
10.2 对dll文件操作
用C#编写Add方法
Set var_CreateInstance = DotNetFactory.CreateInstance(“类","dll路径")

11、框架篇
(1)启动UFT
注:该方法是通过QTP自身接口AOM对象启动QTP,该脚本只能存放于vbs文件中,然后双击文件,QTP便会启动执行脚本工程
(2) 代码加载对象库
去掉对象库后,直接运行
Window("Flight Reservation").WinComboBox("Fly From:").Select(3)会报错

用 RepositoriesCollection.Add加载对象库正常执行,直接引用tsr文件路径
视频课程以及框架请关注公众号“大牛测试”

