QTP实验-含脚本-完成品

文章发布时间:

最后更新时间:

前言

注:本次使用仍然为QTP10。使用Windows XP进行测试。

如您使用的是Win7以及QTP11,请参考机构老师的视频。

由于身体原因,后面更新的很潦草,不过能过就得了,这东西没人用了,体会到思想就OK了

注意!由于某些原因,复制粘贴的脚本无法正常运行,这是解决方案:

直接导入这些Test进行测试!

image-20211031191227451

下载这些文件导入即可,1234分别对应四个测试。

Test3.zip

Test4.zip

Test1.zip

Test2.zip

前置准备

请先下载好:

破解文件.zip

T6510-15063.zip

(文件太大,只能给百度了)

链接: https://pan.baidu.com/s/1QSqkDg9XPfK3BVwJLQRnrQ

提取码: dne2

合成的XP镜像:

链接: https://pan.baidu.com/s/11c4UVggNT4r_uhbT94Xr8Q

提取码: ehc5

安装Windows XP虚拟机(有可跳过)

为了怀旧安装的是一个自己很喜欢的版本——三叠纪XP SP4。

结果因为手残,折腾半天没折腾好激活QTP(后来才知道为啥,但是,哎,为时已晚,为时已晚呐)

最后换上了专注于Win7大佬做的GhostXP最终版。加上微PE合成了一个新文件这样子。

为什么不用WIN7?一来WIN7镜像比较大,对硬盘不友好,二来WIN7开始有了管理员权限这个麻烦东西,稍不注意就会导致测试啥的出问题,所以不喜欢。

首先加载合成文件的镜像,镜像到上面能找到。

找到之后运行会看到如图所示:

image-20211013212034346

创建主分区

首先需要进行分区:

双击分区工具DiskGenius.

image-20211013212134761

右键 - 快速分区

image-20211013212153863

如图顺手分区即可。

注意分区后稍微等待一会儿,否则不会分配盘符,后面会出错。

安装GHOST版本

分区之后,找到光盘,打开并拷贝它到软件盘符。(注意不要拷贝到主盘符……)

image-20211013212610959点击Ghost备份还原:

image-20211013212225067

点击下拉按钮会自动搜索到

image-20211013212641965

之后点击确定,会出来一个框,等他加载完并消失之后,重启即可。

image-20211013212742351

之后就是漫长的等待时间。

安装Vmtools

等完事之后,点击Vmware软件 - 虚拟机 - 安装Vmtools,等待。

image-20211013213119908

这里会有一个设备。它名字有的时候显示不清楚,打开看看是不是这样:

image-20211013213143682

如果是,双击setup,一路next即可。

完成后会要求重新启动。话说回来,装了这玩意感觉声音就不正常了(吐槽)

安装QTP

首先从上面弄下来破解文件,之后直接拷贝里面的所有文件到D盘:

image-20211013213502310

安装脚本调试器和破解

双击scd10chs然后一路next即可安装脚本调试器。

之后创建如下目录:

C:\Program Files\Common Files\Mercury Interactive\License Manager

把mgn-mqt82丢进去运行。

image-20211013221659412

运行成功之后会生成这个文件。用记事本打开备用。

安装本体

把下载的本体文件拷贝进去运行即可。

image-20211013222135138

第一次点击否:

image-20211013222146377

然后再点击是:

image-20211013222157426

image-20211013222216343

安装一下必备组件什么的。

全部安装完成之后再次弹出:

image-20211013222340596

继续点否

image-20211013222407868

接下来就是一路下一步。路径建议别改,这样后面的脚本你就不用改任何东西了。

安装之后如图:

image-20211013222914284

点击运行,一会儿会出现这个窗口:

image-20211013222936017

从刚刚让你用记事本打开的那个文件里找到第一个#之前的东西,粘贴进去。

image-20211013223018226

继续一路next。

image-20211013223036179

点击关闭,到此安装完成。

QTP实验 - 拉胯的航班

测试什么

本次测试为:测试登录功能,订票功能,传真订单功能,删除订单功能。

和附赠的实例测试的相同。

登录测试

用例设计

根据登录模块的条件:

  1. 用户什么也不输入,是否提示输入用户名
  2. 只输入名字不输入密码,提示输入密码
  3. 密码太短,提示输入密码长度不够
  4. 名字太短,提示输入名字长度不够
  5. 正确输入,OK进入操作界面

据此进行用例设计:

测试编号 输 入 条 件 预期输出 实际输出
———— 用户名 密码 —————— ——————
001 提示:输入用户名 提示:输入用户名
002 asdsda 提示:输入用户名 提示:输入用户名
003 mercury 提示:输入用户名 提示:输入用户名
004 sss 提示:用户名长度少于4位 提示:用户名长度少于4位
005 sss asdsda 提示:用户名长度少于4位 提示:用户名长度少于4位
006 sss mercury 提示:用户名长度少于4位 提示:用户名长度少于4位
007 asdsada 提示:输入密码 提示:输入密码
008 asdsada asdsda 提示:密码错误 提示:密码错误
009 asdsada mercury 无提示进入主界面 无提示进入主界面
测试过程

注:不同于某个Word,这里将会对脚本产生方式进行详细说明。

首先使用QTP进行一次用户名密码的输入录制:

1
2
3
4
5
6
Dialog("Login").WinEdit("Agent Name:").Set "asda"
Dialog("Login").WinEdit("Password:").SetSelection 0,3
Dialog("Login").WinEdit("Password:").SetSecure "6166f2318916990d6bec6c3f25c4e82b73d638f0"
Dialog("Login").WinButton("OK").Click
Dialog("Login").Dialog("Flight Reservations").WinButton("确定").Click
Dialog("Login").WinButton("OK").Click

可以看到这些是生成的代码,接下来对他进行修改来循环满足用例设计需求。

首先让他每次都能自动打开待测程序:

1
systemUtil.Run"C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe"

之后用

1
If Dialog("Login").Dialog("Flight Reservations") Then

来作为控制每一次的运行的部分。

然后使用dtLocalSheet作为数据来源。并使用

1
Reporter.ReportEvent micFail和Reporter.ReportEvent micPass

进行结果的输出。

首先介绍一下这个dtLocalSheet。在你不录制的时候,可以看到这个:

image-20211013231915981

你点击那个Action1:

image-20211013231934146

就能改到Action1的部分,这就是dtLocalSheet,上面那个A,B,C可以双击之后改:

image-20211013232013344

这边我们改成了username和password。如果你不改并且照抄我的代码的话,就会不停地崩

下面就是输入数据的地方。

这样就可以了吗?NONONO,很不幸的是:

出错识别方法没有一个靠谱的识别方式:

1
err_message=Dialog("Login").Dialog("Flight Reservations").Static("Agent name must be at").GetROProperty("text")

这个的方案是:识别Static里包含"Agent must be at"的内容。

我们需要识别各种方式的,但是一番搜索之后……:

1
那如果我就是要获取各种提示框里面的不同提示信息的内容,怎么实现比较好呢,比如飞机订票系统输入用户名或密码有错误时提示信息都会不同,我就是想要获取这不同的提示内容,但是我只能添加一个提示信息的static对象到OR中,再添加别的就不能添加了。如果使用描述性编程的方法的话,我要把各种情况都列出来,感觉有点麻烦,不知道有没有好点的方法。

不幸的是,没有。

于是我们需要用一些魔幻的方法来实现我们的目标:

首先让他报错一次:

image-20211014224228499

这次是随便的报错,接下来从这里找到Object Spy。

image-20211014224256752

点击之后我们可以查看到Static:

image-20211014224320523

(鼠标指向)

image-20211014224339736

这是一个static,我们可以看到原本的筛选是靠"text"属性来确定的。

image-20211014225112511

然后根据这种确定方式,我们发现这里面至少有两个Static,一个是那个叹号标识,一个是那个提示信息。

我们拉到values的最底端:

image-20211014225424544

注意到这个x每次都是不变的。我们把x填写到代码里(由于我不确定你们的x和我的x是否一致,所以请自行确定并输入!)

代码如下:

1
err_message=Dialog("Login").Dialog("Flight Reservations").Static("x:=65").GetROProperty("text")

总代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
systemUtil.Run"C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe"
Dialog("Login").WinEdit("Agent Name:").Set DataTable("username", dtLocalSheet)
Dialog("Login").WinEdit("Password:").Set DataTable("password", dtLocalSheet)
Dialog("Login").WinButton("OK").Click
If Dialog("Login").Dialog("Flight Reservations").Exist(5) Then
Dim err_message
err_message=Dialog("Login").Dialog("Flight Reservations").Static("x:=65").GetROProperty("text")
Reporter.ReportEvent micFail, "登录失败","错误信息是: "&err_message
Dialog ("Login").Dialog("Flight Reservations").WinButton("确定").Click
Dialog("Login").WinButton("Cancel").Click
Else
Reporter.ReportEvent micPass,"登陆成功","登陆成功"
Window("Flight Reservation").Close
End If

接下来输入测试案例:

image-20211014211752326

然后点击Global:

image-20211014230120512

复制一份Action1的进入(这个操作是为了能让它重复这么多次)

进行测试:

image-20211014230206925

测试成功(最后一次成功,其他的失败,正常)

查看错误项:

image-20211014230233909

查看正确项:

image-20211014230254078

测试完毕。

订票测试

用例设计

订票测试要在登录成功之后进行测试。

image-20211014231642020

根据测试情况整理测试:

注意改日期……

编号 输入 预期结果 实际结果
001 在Fly中选择一个地点,弹出警告信息 不能为空的警告
002 10/10/21 在Fly中选择一个地点,弹出警告信息 日期要在今天之后
003 13/10/21 在Fly中选择一个地点,弹出警告信息 月份要小于13
004 10/32/21 在Fly中选择一个地点,弹出警告信息 天要在1-31之间
005 10/31/21 在Fly中选择一个地点,弹出警告信息 天要在1-30之间
006 10/25/21 正确 正确(无提示)
007 Fly From 选择Frankfurt Fly to 为空 Flights按钮不可用 与预期结果相符
008 Fly From 选择Frankfurt Fly to选择 Denver Flights按钮可用 成功
009 单击Flights,选择第一个航班 在窗口显示航班信息 显示航班信息
010 在Fly to中改选其他航班 清空航班信息, Flights按钮不可用,Ft自动清空 成功
011 输入名字test,1张票,Economy 显示 Price:和 Total:价格 成功
测试过程

首先录制一个简单的成功案例准备进行修改:

点击Record进行录制:

image-20211014233514322

之后填入用户名和密码:

image-20211014233554912

填入时间,Fly from和Fly to.

image-20211014234256692

点击Flights

image-20211014234315538

点击一个Flights Table。

image-20211014234339189

输入名称和订票数,点击订票

image-20211014234406240

image-20211014234418125

录制代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
Dialog("Login").WinEdit("Agent Name:").Set "measdsa"
Dialog("Login").WinEdit("Password:").SetSecure "61684fdc47c246af82ce308ddde96237bb27c843"
Dialog("Login").WinButton("OK").Click
Window("Flight Reservation").WinObject("Date of Flight:").Type "102521"
Window("Flight Reservation").Move 574,328
Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver"
Window("Flight Reservation").WinComboBox("Fly To:").Select "Frankfurt"
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select "14205 DEN 12:57 PM FRA 01:41 PM AF $121.20"
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set "test"
Window("Flight Reservation").WinRadioButton("Economy").Set
Window("Flight Reservation").WinButton("Insert Order").Click

接下来修改代码使其可以进行测试:

修改了好几天,最后变成了这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
systemUtil.Run"C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe"
'copied from login test
Dialog("Login").WinEdit("Agent Name:").Set "measdsa"
Dialog("Login").WinEdit("Password:").SetSecure "61684fdc47c246af82ce308ddde96237bb27c843"
Dialog("Login").WinButton("OK").Click
'使用Table填写日期,从哪儿和到哪儿
Window("Flight Reservation").WinObject("Date of Flight:").Type DataTable.Value("dateof")
'刚开始只能先填写FlyFrom,能确保前几个案例的测试,否则会导致重叠
Window("Flight Reservation").WinComboBox("Fly From:").Select DataTable.Value("flyfrom")
'如果出现了报错窗口,输出失败的错误信息(Wait 3 second)
If Window("Flight Reservation").Dialog("Flight Reservations").Exist(3) Then
Dim err_message
' 看起来这个x没有发生变化可以继续用
err_message = Window("Flight Reservation").Dialog("Flight Reservations").Static("x:=65").GetROProperty("text")
Reporter.ReportEvent micFail, "Test Failed","错误信息是: " & err_message
Window("Flight Reservation").Dialog("Flight Reservations").WinButton("确定").Click
'使用File->Exit来退出软件以进行重复测试
Window("Flight Reservation").WinMenu("Menu").Select "File;Exit"
Else
'此时测试完成了所有日期错误情况,接下来测试
Window("Flight Reservation").WinComboBox("Fly From:").Select DataTable.Value("flyfrom")
If Window("Flight Reservation").WinButton("FLIGHT").CheckProperty("enabled",False) Then
Dim err_messages
err_messages = err_messages + "(上一测试)此时FLIGHT按钮不可用"
Else
End If
Window("Flight Reservation").WinComboBox("Fly To:").Select DataTable.Value("flyto")
If Window("Flight Reservation").WinButton("FLIGHT").CheckProperty("enabled",True) Then
err_messages = err_messages + "(再次测试)此时FLIGHT按钮可用"
Else
End If
Reporter.ReportEvent micDone,"Test","信息是: " & err_messages
'此时测试进入最后,点击飞行按钮
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").Activate
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").Activate
Window("Flight Reservation").WinEdit("Name:").Set "test"
Window("Flight Reservation").WinButton("Insert Order").Click
Reporter.ReportEvent micDone,"Test","成功完成订单测试 "
Window("Flight Reservation").Close()
End If

配套的输入:

image-20211021205511020

本来想具体写写,但是因为折腾时间太长了,所以忘了具体的折腾过程了 ,反正大家都不看,不是么?

具体原理看注释可能更好些。

传真订单测试

用例设计

由于我们是测试Fax Order,前面的登录账号等都没有什么意义,这些保持成功即可。

这里只需要输入一个Fax Number:和一个签名。签名是没有任何要求的。

使用录制的方式输入Fax Number和签名即可。

测试过程

传单测试的最大麻烦是:每一次测试的数值都会不同:

image-20211021210318162

我们这次不需要借鉴上一次的曲线救国法(找x啥的),因为……这个玩意有正则表达式(真的是太好了.jpg)

使用正则表达式:(感谢:Capture runtime fax order number (learnqtp.com)

首先你得先录制一遍上面的那个窗口。之后:

image-20211021214624053

点一下之后点#:

image-20211021214827866

然后修改需要正则的位置:

image-20211021214958495

之后再次进行录制……然后也不知道是不是我的问题,我这里BUG了,能识别到Fax Order窗口,里面的啥东西都识别不到……

最后直接用了Analog recording:

image-20211021220422426

打开Fax Order之后直接录就行了,录完直接回放就OK。传真号码和右边的都能录制上。

image-20211021221348376

代码:(注意这个代码不能直接复制!有一个地方需要自己录制)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SystemUtil.Run "C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe","","C:\Program Files\HP\QuickTest Professional\samples\flight\app","open"
Dialog("Login").WinEdit("Agent Name:").Set "asdasd"
Dialog("Login").WinEdit("Password:").SetSecure "617165fc40c047cfd210f29f239b7a9f0e04a388"
Dialog("Login").WinButton("OK").Click
Window("Flight Reservation").WinObject("Date of Flight:").Type "121221"
Window("Flight Reservation").WinComboBox("Fly From:").Select "Los Angeles"
Window("Flight Reservation").WinComboBox("Fly To:").Select "London"
Window("Flight Reservation").WinButton("FLIGHT").Click
Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
Window("Flight Reservation").WinEdit("Name:").Set "123"
Window("Flight Reservation").WinButton("Insert Order").Click
Window("Flight Reservation").Activate
Window("Flight Reservation").WinMenu("Menu").Select "File;Fax Order..."
'这里下面这句要自己进行过录制
Desktop.RunAnalog "Track2"
Window("Flight Reservation").Close

删除订单测试

用例设计

删除订单测试主要就是通过输入某个部分进行删除(或者更新,自选一个)

原本的代码不能复制,不过因为测试用例并不多,这个也属于凑数类型,所以录制一下试试就是了。

测试过程

首先先进行录制,得到一些脚本:

image-20211021225212931

之后也没啥改的必要……加个输出就好:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SystemUtil.Run "C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe","","C:\Program Files\HP\QuickTest Professional\samples\flight\app","open"
Dialog("Login").WinEdit("Agent Name:").Set "asdasd"
Dialog("Login").WinEdit("Password:").SetSecure "617165fc40c047cfd210f29f239b7a9f0e04a388"
Dialog("Login").WinButton("OK").Click

Window("Flight Reservation").Activate
Window("Flight Reservation").WinMenu("Menu").Select "File;Open Order..."
Window("Flight Reservation").Dialog("Open Order").WinCheckBox("Flight Date").Set "ON"
Window("Flight Reservation").Dialog("Open Order").WinObject("12/12/21").Type "121221"
Window("Flight Reservation").Dialog("Open Order").WinButton("OK").Click
Window("Flight Reservation").Dialog("Open Order").Dialog("Search Results").WinButton("OK").Click
Window("Flight Reservation").Activate
Window("Flight Reservation").WinButton("Delete Order").Click
Window("Flight Reservation").Dialog("Flight Reservations").WinButton("是(Y)").Click
Window("Flight Reservation").Activate
Reporter.ReportEvent micPass,"测试成功:","删除成功"
Window("Flight Reservation").Close

最后这个写的比较潦草。

后记

其实可以去参考一下那个原本QTP的脚本的。不过我实在没心情去改那个脚本了,而且说实话,QTP都属于快被淘汰的产品,现在的Selenium啥的各种替代品也有不少,这次记录更多的是为后来人铺路,因为国内能搜到的这个东西少之又少,并且大多数都并不完全,希望可以帮到更多的人,也欢迎有人直接借助评论区补充我没有写好的部分。

原来的文件我抹除了一些信息之后也放在了这里,这是给没有这个文件的人准备的。希望能帮到各位。

QTP飞机订票测试实例(1).doc