读《实战GUI产品的自动化测试》:第一步——了解自动化测试,简单RFT的录制回放实例
1、了解自动化测试,什么是自动化测试?(可以参数百度百科“自动化测试”)
2、了解自动化测试
* 自动化测试如何改善产品的质量
* 自动化测试无法完全替代手工测试
* 自动化测试无法发现新的问题——适合用来回归测试
* 自动化测试覆盖率并非越大越好——从产品测试的需求入手,定制自动化测试策略,可复用的,无改动的模块可以使用自动化测试。
* 自动化测试是需要成本的—— 因为自动化测试的投入也是很大的。这里面需要考虑到自动化与手工的投入与产出比。
3、如何进行自动化测试?
自动化测试最主要的三个问题(针对GUI软件C/S架构):
第一个:如何获取要操作的GUI元素。
第二个:如何操作GUI元素。
第三个: 如何设置验证点与如何验证。
另外,B/S架构的自动化测试,利用HTML语言与DOM模型结合,可以实现GUI元素的操作。
4、安装RFT后,动手做个小实例。了解RFT的工具原理。
第一步: 安装RFT工具。
第二步: 认识RFT工具。找到“配置”——》“配置应用程序进行测试”,这个菜单进行配置,需要测试的软件(这里使用自带小DEMON)。
第三步: 实践RFT工具的录制、回放功能。
下面转载一个实例过程:
Rational Functional Tester(简称 RFT)是 IBM 提供的强大的自动化功能和回归测试工具,至于其具体如何强大本文就不赘述了,您可以参考文末参考资料里给出的 RFT 的产品专题。现身说法,Lotus Notes 的大量的自动化测试脚本都是建立在 RFT 之上,包括功能测试、性能测试和本地化测试。对于我们来说,RFT 是一个值得信赖的工具。RFT 的特性很多,以下仅列出我们所关注的一部分关键特性:
- 支持多种应用程序,包括 Win32 Native、Eclipse、.Net, 浏览器和其他一些应用
- 支持使用 Java 和 VB.NET 进行脚本开发
- 支持操作的录制和回放
- 和 Eclipse 紧密集成,支持方便的开发和调试
- 通过插件可以和 ClearCase 紧密集成
- 易于扩展,可以灵活的适应被测程序的需求
下图展示了 RFT 的使用界面,如果您曾经使用过 Eclipse,您将会对此感到非常亲切。
图 3. RFT 使用界面
在 RFT 的众多特性中,录制和回放是非常值得一提的功能,测试人员可以直接通过录制屏幕操作来生成测试脚本,然后通过回放来执行测试。有经验的测试人员也可以通过它来快速生成有用的代码片段。
下面让我们来看一看如何使用 RFT 录制功能来生成上一章中的测试用例的脚本:
- 运行我们的 CD 订购程序:C:\Program Files\IBM\SDP\FunctionalTester\FTSamples\ ClassicsJavaA.jar。实际上,这是 RFT 自带的一个示例程序。(RFT 在安装后会对系统 JVM 进行配置,所以我们不再需要对普通的 SWT 程序安装额外插件,直接运行就可以了)
- 在一个空白的 RFT 测试脚本中,点击 "Script->Insert Recording" 菜单,RFT 将弹出“Recording”对话框,启动脚本录制。
- 手工操作我们的 CD 订购程序,选择条目,点击“Place order”按钮,然后点击 Cancel 关闭弹出的“Member Logon”对话框。
- 执行完毕后,在 Recording 对话框中点击停止按钮,录制就会终止。RFT 会生成测试用例步骤所对应的代码。如图 4 所示。
图 4. RFT 录制生成的测试脚本
您可以通过点击“Script->Run”菜单来运行新生成的脚本,一切都很简单。
如果您足够细心,就能够在图 4 中发现更多的信息。RFT 在生成脚本的同时,会把从应用程序捕获的 UI 信息保存在映射文件(object map)里面,比如 tree2 和 placeOrder。而在生成的脚本中将直接使用对象上的方法,这些方法在底层将会最终映射到具体的鼠标和键盘事件。
图 5 展示了 RFT 本身的录制流程如,对于每个脚本,都有独立的映射文件。RFT 会从映射文件里面查找,如果找不到当前测试对象,会把测试对象的信息加入到映射文件里面。
图 5. 录制流程
如果您更细心的话,您会发现 RFT 的录制完成了捕获和操作的功能,而没有生成验证相关的代码,因为这些需要您随后自己补齐。如果您对如何更高效的做验证感兴趣的话,欢迎关注我们的后续文章。
本地生成的脚本如下:
package baidu;
import resources.baidu.testHelper;
import com.rational.test.ft.*;
import com.rational.test.ft.object.interfaces.*;
import com.rational.test.ft.object.interfaces.SAP.*;
import com.rational.test.ft.object.interfaces.WPF.*;
import com.rational.test.ft.object.interfaces.dojo.*;
import com.rational.test.ft.object.interfaces.siebel.*;
import com.rational.test.ft.object.interfaces.flex.*;
import com.rational.test.ft.object.interfaces.generichtmlsubdomain.*;
import com.rational.test.ft.script.*;
import com.rational.test.ft.value.*;
import com.rational.test.ft.vp.*;
import com.ibm.rational.test.ft.object.interfaces.sapwebportal.*;
/**
* Description : Functional Test Script
* @author lenovo
*/
public class test extends testHelper
{
/**
* Script Name : <b>test</b>
* Generated : <b>2014-10-18 上午2:01:44</b>
* Description : Functional Test Script
* Original Host : WinNT Version 6.1 Build 7601 (S)
*
* @since 2014/10/18
* @author lenovo
*/
public void testMain(Object[] args)
{
startApp("ClassicsJavaA"); // Frame: ClassicsCD
tree2().click(atPath("Composers->Haydn->Location(PLUS_MINUS)"));
tree2().click(atPath("Composers->Haydn->Location(PLUS_MINUS)"));
tree2().click(atPath("Composers->Haydn->Location(PLUS_MINUS)"));
tree2().click(atPath("Composers->Haydn->Symphonies Nos. 94 & 98"));
tree2().click(atPath("Composers->Haydn->Symphonies Nos. 99 & 101"));
tree2().click(atPath("Composers->Schubert->Location(PLUS_MINUS)"));
tree2().click(atPath("Composers->Schubert->Die schone Mullerin, Op. 25"));
placeOrder().click(); // Frame: Member Logon
memberLogon().close(); // Frame: ClassicsCD
classicsCD(ANY,MAY_EXIT).click(atPoint(611,5));
}
}
读《实战GUI产品的自动化测试》:第一步——了解自动化测试,简单RFT的录制回放实例的更多相关文章
- 读《实战 GUI 产品的自动化测试》之:第四步,高阶技巧
转自:http://www.ibm.com/developerworks/cn/rational/r-cn-guiautotesting4/ 定义测试控件库 本系列前几篇文章对 IBM 框架做了介绍, ...
- 读《实战 GUI 产品的自动化测试》之:第二步,构建利于维护的自动化测试系统
转载自:http://www.ibm.com/developerworks/cn/rational/r-cn-guiautotesting2/ 基石——IBM 框架简介 Rational Functi ...
- AI换脸实战教学(FaceSwap的使用)---------第一步Extration:提取人脸。
市面上有多款AI换脸的方法,笔者这里节选了Github那年很火的开源项目FaceSwap: (很早就实践了,但是忘记记录啦hhh,请勿用于不正当用途哦) 做了一篇详细教学,包括配置,参数设置,换脸效果 ...
- [转]RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第一篇【安装】
前言:关于RobotFrameWork+APPIUM实现对安卓APK的自动化测试的文章都是取自于乐于分享知识于网络的好心人们,所以我也希望我的知识可以分享给大家. 首先我们先罗列一下我们要安装的软件 ...
- RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第一篇【安装】
文章来源http://blog.csdn.net/deadgrape/article/details/50563119 前言:关于RobotFrameWork+APPIUM实现对安卓APK的自动化测试 ...
- Scala的第一步
第一步:学习使用Scala解释器 开始Scala最简单的方法是使用Scala解释器,它是一个编写Scala表达式和程序的交互式“shell”.在使用Scala之前需要安装Scala,可以参考 Firs ...
- 重制AdvanceWars第一步 -- 搞定地图
首先来聊下高级战争吧Advance Wars,由任天堂旗下的Intelligent Systems开发的战棋游戏.初作诞生于GBA上,后来继续跟进了高战2黑洞崛,而后在下一代掌机DS上也出了三代续作高 ...
- 高德携手阿里云发布“LBS云”,账户打通只是第一步
位置.游戏.视频,是公认的基于云计算的三大移动端应用方向.而今,LBS云有了更多进展,在高价值应用与云平台之间实现了资源打通和融合,高德迈出了实质性的一步. 高德地图副总裁郄建军(左)与阿里云业务总经 ...
- linux系统性能调优第一步——性能分析(vmstat)
linux系统性能调优第一步--性能分析(vmstat) 分类: LINUX 性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对linux性能分析工具vmstat的用法和实践进行详细介 ...
随机推荐
- 编程算法 - n个骰子的点数(递归) 代码(C)
n个骰子的点数(递归) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 把n个骰子仍在地上, 全部骰子朝上一面的点数之和为s. 输入n, 打印出 ...
- 使用Charles进行网络抓包
一.安装Charles 二.使用 1.http抓包 1.1 现在我们默认是在进行iOS开发,首先确保iPhone和Mac是在同一个局域网下(连同一个WiFi).然后查看Mac的IP地址(打开网络偏好设 ...
- 简单区分iphone和ipad的宏定义
在公共头文件里作例如以下定义: #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 使用时: if( IS_I ...
- scikit-learn:3. Model selection and evaluation
參考:http://scikit-learn.org/stable/model_selection.html 有待翻译,敬请期待: 3.1. Cross-validation: evaluating ...
- 2016/1/21 练习 创建 接口interface 应用implements 类class 并实例化调用
package testinterface; public interface ICpu { //电压 public boolean dianya(); //控制 public void kongzh ...
- go15---select
package main import ( "fmt" ) //go语言提供了一个结构或者形式来帮助处理多个channel的发送和接收问题,这个结构叫做select, //sele ...
- YTU 2633: P3 数钱是件愉快的事
2633: P3 数钱是件愉快的事 时间限制: 1 Sec 内存限制: 128 MB 提交: 387 解决: 215 题目描述 超市收银员的钱盒里,各种钞票总是按照面额分类整理,这样做可以提高效率 ...
- 就是这个foxmail有时出现记事同步不了
昨天和妈妈商量还是要打算再次买一块正版电池,虽然她现在有点不情愿,但是过一个月再说,然后就是他的号码超出流量6M,由于是2G的流量,按照每M是一元,所以就是扣了6元,然后他的套餐里面显示还有94M也不 ...
- 【HDU 1588】 Gauss Fibonacci
[题目链接] 点击打开链接 [算法] 要求 f(g(0)) + f(g(1)) + f(g(2)) + ... + f(g(n-1)) 因为g(i) = k * i + b 所以原式 = f(b) + ...
- POJ 3294 UVA 11107 Life Forms 后缀数组
相同的题目,输出格式有区别. 给定n个字符串,求最长的子串,使得它同时出现在一半以上的串中. 不熟悉后缀数组的童鞋建议先去看一看如何用后缀数组计算两个字符串的最长公共子串 Ural1517 这道题的思 ...