1.什么是QTP?

百度百科中对QTP是这么介绍的:

——”QTP是QuickTest Professional的简称,是一种自动化测试工具。使用QTP的目的是想用它来执行重复的自动化测试,主要是用于回归测试和测试统一软件的新版本。因此在测试前要考虑好如何对应用程序进行测试,例如要测试哪些功能、操作步骤、输入数据和期望的输出数据等。“

——”它让用户可以直接录制屏幕上的操作流程,自动生成功能测试或者回归测试用例。专业的测试者也可以通过提供的内置脚本和调试环境来取得对测试和对象属性的完全控制……“

2.QTP测试流程?

QTP进行功能测试的测试流程:【制定测试计划】-【创建测试脚本】-【增强测试脚本】-【运行测试】-【分析测试结果】

接下来我将以QTP自带的小飞机航班程序(Flight)作为演示,详细讲解测试流程。QTP(professional 9.2)启动界面如下图所示:

图1 QTP(professional 9.2)启动界面

下图为QTP自带Flight的小飞机程序,登陆名任意不少于4位数的字符,登陆密码为mercury。

图2 QTP自带Flight程序及启动界面

(1)制定测试计划

验证小飞机程序的基本功能,航班的预定,图片验证,文本验证等功能。

(2)创建测试脚本

录制脚本功能包括:登陆小飞机订票应用程序、输入订票时间(大于系统时间否则订票失败)、起始/到达地点、航班、姓名、席别和数量,订票成功后关闭应用程序。

操作步骤:

Automation-Record and run Setting-Windows Application

+添加Application Details-OK(默认即可):让QTP自动启动小飞机程序

点击record录制脚本,操作时切勿有多余的步骤(如QQ推送了一个新闻弹窗,尝试去关闭),你的任何操作将会录制到脚本中去,这样你将不得不在录制好的脚本中删除多余的操作或者重新录制一遍。(录制结束后切记点击stop终止录制,不然也会录制下多余的操作)

录制后的脚本查看,切换到Expert View可查看录制好的脚本:

  1: Dialog("Login").WinEdit("Agent Name:").Set "test"
  2: Dialog("Login").WinEdit("Password:").SetSecure "56824e518de1a75562ac09f826423a3795c28ce0"
  3: Dialog("Login").WinButton("OK").Click
  4: Window("Flight Reservation").ActiveX("MaskEdBox").Type ""
  5: Window("Flight Reservation").WinComboBox("Fly From:").Select "London"
  6: Window("Flight Reservation").WinComboBox("Fly To:").Select "Frankfurt"
  7: Window("Flight Reservation").WinButton("FLIGHT").Click
  8: Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
  9: Window("Flight Reservation").WinEdit("Name:").Set "test"
 10: Window("Flight Reservation").WinEdit("Tickets:").SetSelection 0,1
 11: Window("Flight Reservation").WinEdit("Tickets:").Set ""
 12: Window("Flight Reservation").WinRadioButton("First").Set
 13: Window("Flight Reservation").WinButton("Insert Order").Click
 14: Window("Flight Reservation").Close
 15: Dialog("Login_2").WinButton("Cancel").Click

点击run运行刚才录制的脚本,则会自动化验证基本的订票功能,效果如下:

(3)增强测试脚本

运行以上脚本后,发现虽然能够成功但passed次数仍是0,这是因为没加验证点,接下来我们来进一步强化测试脚本。

强化要求:(#1)参数化(username(登陆用户名)、Start_1(航班出发地)、End_1(航班目的地))(#2)加入文本验证、加入图片验证(#3)设置判断语句

可以看出,参数化的目的是为了完成多次测试,使用多个不同的用户名,不同的航班出发地和目的地。这样就必须多次启动小飞机。

在一开始的脚本录制中,我们采用的是通过QTP引导小飞机启动,然而这样只能启动一次,达不到测试目的,所以必须通过系统来启动小飞机程序。怎么启动?

a.先删除QTP引导;b.(非录制状态下)在录制好的脚本login条目drop菜单下选择Step Generator,并按下图设置好(在value中添加小飞机程序exe所在目录:C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe)

并将该启动步骤run移动到合适位置:

(#1)参数化

然后在录制好的脚本中对Agent Name、Fly from、Fly to中的value值<#>,从而实现参数化。

参数化后运行,发现能正常运行多次了:

(#2)加入文本验证和图片验证

验证用户名是否有test3,验证登陆界面是否有小飞机图片。

启动小飞机,调整合适的位置,点击record,insert-check point-text check point/ bitmap checkpoint。然后stop并退出小飞机程序(注意:测试case在运行的时候,不能有多余的小飞机程序在运行,否则会报错),然后调整添加的验证点到合适的位置,显然,这两个验证点是在小飞机程序启动之后,登陆点击OK之前。

(#3)设置判断语句

要求:将用户名参数赋值给x,设置判断语句,当x=test2时,则点击"cancel"按钮,并重新开始用下一个用户名进行登录,否则继续运行脚本。

设置判断语句,直接修改脚本即可,在脚本中添加判断语句,按照要求,则脚本如下:

  1: SystemUtil.Run "C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe"
  2: Dialog("Login").WinEdit("Agent Name:").Set DataTable("username", dtGlobalSheet)
  3: Dialog("Login").WinEdit("Password:").SetSecure "56838ed991838e58c724bf18afee6d6ae0f587fb"
  4: Dialog("Login").Static("Static").Check CheckPoint("Static")
  5: Dialog("Login").WinEdit("Agent Name:").Check CheckPoint("Agent Name:")
  6: Dim x
  7: x = DataTable("username",dtGlobalSheet)
  8: If(x="test2") Then
  9: Dialog("Login").WinButton("Cancel").Click
 10: ExitAction()
 11: End If
 12: Dialog("Login").WinButton("OK").Click
 13: Window("Flight Reservation").ActiveX("MaskEdBox").Type ""
 14: Window("Flight Reservation").WinComboBox("Fly From:").Select DataTable("Start_1", dtGlobalSheet)
 15: Window("Flight Reservation").WinComboBox("Fly To:").Select DataTable("End_1", dtGlobalSheet)
 16: Window("Flight Reservation").WinButton("FLIGHT").Click
 17: Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
 18: Window("Flight Reservation").WinEdit("Name:").Set "test"
 19: Window("Flight Reservation").WinEdit("Tickets:").Set ""
 20: Window("Flight Reservation").WinRadioButton("First").Set
 21: Window("Flight Reservation").WinButton("Insert Order").Click
 22: Window("Flight Reservation").Close

注意 line 10:QTP的退出函数:

1、ExitAction() 退出当前操作,无论其本地(操作)循环属性是什么。
2、ExitActionIteration() 退出操作的当前循环。

3、ExitComponent()退出当前组件并继续业务流程测试中的下一个组件,无论组件的循环设置是什么。

4、ExitComponentIteration() 退出当前组件循环并继续该组件的下一次循环,或者,如果当前组件没有其他循环,则继续业务流程测试中的下一个组件。

5、ExitGlobalIteration() 退出当前的全局循环,并使用全局数据表的下一行开始下一次循环。

6、ExitRun() 退出测试,无论其全局循环属性是什么。

7、ExitTest() 退出整个业务流程测试,无论运行时循环设置是什么。

8、ExitTestIteration() 退出业务流程测试的当前循环并继续下一次循环,或者如果没有其他运行时参数循环,则退出测试运行。

3.QTP脚本的编写

刚才我们主要通过record录制脚本的。如果要手动编写脚本,除了掌握一点基本的语法外,还要学会添加对象库,不然手写的脚本不能生效,运行时会提示不能找到控件。

Resourse-Object Repository

启动小飞机,点击add+,点击小飞机界面后弹窗选择All object types。

添加完成后如下图:

其他对象库,重复以上步骤添加即可。

参考文献:

1.QTP的退出函数:http://blog.sina.com.cn/s/blog_670b6d8801016e1r.html

QTP入门——玩玩小飞机的更多相关文章

  1. Webpack 速成

    前言 如果你已经对Webpack精通了或者至少一直在工作中使用它,请关闭当前浏览器标签,无视这篇文章. 这篇文章本意是写给我自己看的,作为一篇Cookbook供快速查询和上手用.原因是虽然工作中会涉及 ...

  2. webpack简单原理及用法

    前言 如果你已经对Webpack精通了或者至少一直在工作中使用它,请关闭当前浏览器标签,无视这篇文章. 这篇文章本意是写给我自己看的,作为一篇Cookbook供快速查询和上手用.原因是虽然工作中会涉及 ...

  3. qtp学习入门

    qtp的学习,初始入门是简单的,推荐田艳琴的<QTP从实践到精通>这边书,看过后,一周就可以入门,并能够自行编写脚本,但是想要进入更深一层,则需要更广阔的知识!这条路任重道远,你我共勉

  4. selenuim,qtp,loadrunner,jmeter有何区别,想学个脚本语言python和测试工具应该从哪里入门呢。

    selenium和qtp是 功能的自动化测试,loadrunner和jmeter是性能的自动化测试 selenium要求代码能力比较高,适合用python,QTP一般用VBS,loadrunner一般 ...

  5. hp quicktestprofession ver-10.0(QTP)的入门使用指南

    ---恢复内容开始--- SQA(software quality assurance) tool hp quicktestprofession ver-10.0(QTP) environment w ...

  6. Webpack+React+ES6开发模式入门指南

    React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了Reac ...

  7. 2013 duilib入门简明教程 -- 界面布局(9)

        上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayou ...

  8. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  9. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

随机推荐

  1. HW2018校招软件类笔试题

    一. 1.题目 输入一个字符串,输出字符串中最长的数字串.如果有多个数字串长度相等且都是最长的,则按照字符串顺序输出最后一个最长的数字串. 2.解答 [code] import java.util.* ...

  2. MapReduce实现ReduceSideJoin操作

    本文转载于:http://blog.csdn.net/xyilu/article/details/8996204 一.准备两张表以及对应的数据 (1)m_ys_lab_jointest_a(以下简称表 ...

  3. mysql 开发基础系列16 视图

    一. 什么是视图视图是一种虚拟存在的表,行和列数据来自,定义视图的查询中使用的表,并且是在使用视图时动态生成的.优势有: 简单: 使用视图的用户完全不需要关心后面对应的表的结构,关联条件,筛选条件. ...

  4. 刷完500道BAT面试题,我能去面试大厂了吗?

    面试之前先刷几篇面经,或者做几道热门面试题,想必是大家很熟悉的一种复习方式了,就像我们当年经常做五年高考三年模拟一样.但是可不要把面试题和面经当成你的主要复习方式,它只是锦上添花,绝非雪中送炭! 壹面 ...

  5. EntityFramework中对象的状态管理(笔记)

    刚开始接触EF框架的时候总是不明白: 为什么查询出来的对象 Remove().再 SaveChanges()就会把数据删除.而自己 new 一个Person()对象,然后 Remove()不行? 为什 ...

  6. spring3.0框架检测方法运行时间测试(转)

    主要利用了Spring AOP 技术,对想要统计的方法进行横切处理,方法执行前开始计时,方法执行后停止计时,得到计时方法就是该方法本次消耗时间. 步骤: 首先编写自己的Interceptor类来实现M ...

  7. JVM读书笔记之垃圾收集与内存分配

    1 概述 说起垃圾收集( Garbage Collection , GC ) ,大部分人都把这项技术当做 Java 语言的伴生产物.事实上, GC 的历史远远比 Java 久远,1960 年诞生于 M ...

  8. 【原创】浅说windows下的中断请求级IRQL

    一 中断分类 根据中断源不同,可以将中断分为 硬件中断:硬件上产生的中断,可以来自处理器的内部和外部.处理器的外部中断可以来自各种PIN信号接口和Local APIC的LINT0和LINT1引脚,以及 ...

  9. curl模拟post json或post xml文件

    转自: https://www.cnblogs.com/xiaochina/p/9750851.html 问题描述: Linux用命令模拟接口,对接口判断!post文件xml/json 问题解决: c ...

  10. 动态代理实现AOP

    代理 代理顾名思义:代为处理.不是对目标对象的直接操作,而是通过代理对目标对象进行包装,此时可以在目标对象的基础上添加额外的操作以满足业务需求.图示 分类:动态代理.静态代理. 代理三要素:共同接口. ...