欢迎光临散文网 会员登陆 & 注册

一篇文章学通QTP UFT自动化测试实战

2023-04-12 15:09 作者:大牛测试技术  | 我要投稿

       UFT作为一款老牌自动化测试工具,入门相对简单,在开源自动化工具爆发的今天,UFT在当今在自动化测试领域仍有一定优势,学习UFT可以帮助大家快速建立自动化测试思想,尤其在开发自动化测试平台、测试工具过程中,可以根据UFT提供的设计思想,为设计出好的工具提供思路。像现今流行的智能驾驶智能座舱、arm底层测试工具都有UFT身影。本篇通过实例方式帮助大家学会UFT自动化测试工具,包含重点、难点以及最终的测试框架。

1、基础使用

  •       录制脚步功能使用

    首先需打开UFT 选择Web、NET等常用的控件

1-1 选择控件

工具栏选择 

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


1-2 录制脚本

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

1-3 录制百度首页
  •  识别不同对象

    Web应用:

1-4 识别web控件

脚本如下:

   普通C/S系统

1-5 C/S系统

.NET应用

1-6 NET应用

代码如下:


2、登录功能开发

  步骤: 先增加对象库

        工具栏 Object Spy->Add Object to Respository,对象库用于保存UI界面元素属性方法,以下是“Flight”-“login”-“Agent Name”对象库,其中Login是登录界面,Agent Name是登录框,如下:

1-7 登录对象库
1-8 登录对象库

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

登录脚本如下:

1-9 登录脚本

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


图1-10 登录运行

基础加强:以上Login,Agent Name:对应的Name值是默认值,也可以在对象框中进行修改:

Login->Flight_Login,Agent Name:->Name:,如下图所示:

图1-11 修改属性值

修改完之后测试脚本会自动修改为:


3、增加订单

      通过上面的学习,我们学会了编写第一个测试脚本,下面继续登录到Flight Reservation中进行增加航班。

表1-1 登录与增加订单

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

图1-12 订单对象

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

图1-13 帮助文档

如:文本框详细注释如下

增加订单功能如下:

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

执行完之后”Order No”产生

图1-14 增加订单

4、检查FlyFrom与FlyTo下拉列表值

功能分析:以FlyFrom为例,通过帮助文档,我们得知用GetItemsCount方法计算下拉框元素总个数,通过For循环获取其中某个值,然后与预期值进行比对。

 脚本如下:

脚本分析:

把预期值存放于数组中,用GetItemsCount方法获取总数,用GetItem获取FlyFrom列表实际值,由于是从第一个值对应Item是0,故For语句总数要减1,数组Item也是从零开始,取”Denver”用flyFrom(0),取数组长度可用ubound方法,如:ubound(flyFrom),msgbox 是以弹出框的形式输出消息,vbs连接字符串需要用&符号

图1-15 数组长度

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>"

图1-16 工具栏操作

6、对象库操作

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

图1-17 对象库

合并对象库:

如A同学在对象框中增加了FlyFrom,B同学在对象框中增加了FlyTo,我们可以把A,B同学的对象框合并成一个新的对象库包含FlyFrom与FlyTo 

打开:Object->Object Repository Manager->Tools->Object Repository Merge Tool

图1-18 合并对象库

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

图1-19 新对象库

6.2 描述性编程

如不使用对象库,可以用描述性编程:

:如果父级对象使用使用描述性编程,则子级对象必须使用描述性编程,以下两种写法都有错

6.3 GetROPropertySetTOProperty GetTOProperty 

GetROProperty:获取被测对象的运行时属性值

SetROProperty:修改运行时被测对象的属性,

GetTOProperty:取得仓库对象的某个属性的值

如:获取FlyFrom当前值,可用GetROProperty方法,点”+”可以看到更详细的Name,Value.其中text对应的值是”Denver”

图1-20 GETRO

电“+”增加"text“属性

图1-21 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

FunctionSubFunction可有返回值,Sub没有

Sub:


图 7-1 sub

Function:

图7-2 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下拉框值,脚本如下:

图7-3 测试报告

注: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-4 报告模版
图7-5 HTML格式生存

7.3 开启应用程序

打开flight程序:

图7-6 打开应用

打开浏览器


8.数据驱动

8.1 自带databable应用举例

   DataTable("Col", dtLocalSheet)

   DataTable("Col", dtGlobalSheet)

   dtLocalSheet就是当前ActionDataTabledtGlobalSheet就是GlobalDataTableCol是列名

   DataTable("Col", "Action2")

列名值不可为数字,特殊字符,否则会报错

图8-1 datable

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

图8-2 global

获取Action1,第1列元素数据

   循环获取下一行

8.2 导入导出

8.3 实战datatable重构检查FlyFrom:

步骤把预期值贴入datatable中


图8-3 fly值

首先要循环读出flyFrom这一列值:

法一:File-Setting-Run-Run on all rows

用以下脚本

图8-4 设置datatable

选择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

9-1 写excel

10、外部文件

10.1对外部vbs文件操作

之前演示的函数,我们都存放于同一个脚本文件中,下面介绍几种方法直接调用外部文件:

把CompareComobox函数拷贝到com.vbs文件中

10-1 vbs文件

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

10-2 关联函数

增加完成后运行报错:

这是由于数组放于脚本文件中,没有作为变量传递过来,找不到数组原因,

法一:把数组也拷贝到该函数中

法二:函数增加一个参数,用于传递数组

修改后执行成功

(2)用ExecuteFile执行

注:ExecuteFile后可直接用vbs存放路径,也可以把com.vbs文件放solution下

用相对路径:ExecuteFile "com.vbs"

(3) 用LoadFunctionLibrary

10.2 对dll文件操作

用C#编写Add方法

Set var_CreateInstance = DotNetFactory.CreateInstance(“类","dll路径")

10-3 动态库

11、框架篇

 (1)启动UFT

:该方法是通过QTP自身接口AOM对象启动QTP,该脚本只能存放于vbs文件中,然后双击文件,QTP便会启动执行脚本工程

 (2)  代码加载对象库

去掉对象库后,直接运行

Window("Flight Reservation").WinComboBox("Fly From:").Select(3)会报错


图11-1 对象库

 RepositoriesCollection.Add加载对象库正常执行,直接引用tsr文件路径

视频课程以及框架请关注公众号“大牛测试”





















     








一篇文章学通QTP UFT自动化测试实战的评论 (共 条)

分享到微博请遵守国家法律