读《实战GUI产品的自动化测试》:第一步——了解自动化测试,简单RFT的录制回放实例

时间:2022-02-13 22:56:44

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 使用界面

读《实战GUI产品的自动化测试》:第一步——了解自动化测试,简单RFT的录制回放实例

在 RFT 的众多特性中,录制和回放是非常值得一提的功能,测试人员可以直接通过录制屏幕操作来生成测试脚本,然后通过回放来执行测试。有经验的测试人员也可以通过它来快速生成有用的代码片段。

下面让我们来看一看如何使用 RFT 录制功能来生成上一章中的测试用例的脚本:

  1. 运行我们的 CD 订购程序:C:\Program Files\IBM\SDP\FunctionalTester\FTSamples\ ClassicsJavaA.jar。实际上,这是 RFT 自带的一个示例程序。(RFT 在安装后会对系统 JVM 进行配置,所以我们不再需要对普通的 SWT 程序安装额外插件,直接运行就可以了)
  2. 在一个空白的 RFT 测试脚本中,点击 "Script->Insert Recording" 菜单,RFT 将弹出“Recording”对话框,启动脚本录制。
  3. 手工操作我们的 CD 订购程序,选择条目,点击“Place order”按钮,然后点击 Cancel 关闭弹出的“Member Logon”对话框。
  4. 执行完毕后,在 Recording 对话框中点击停止按钮,录制就会终止。RFT 会生成测试用例步骤所对应的代码。如图 4 所示。
图 4. RFT 录制生成的测试脚本

读《实战GUI产品的自动化测试》:第一步——了解自动化测试,简单RFT的录制回放实例

您可以通过点击“Script->Run”菜单来运行新生成的脚本,一切都很简单。

如果您足够细心,就能够在图 4 中发现更多的信息。RFT 在生成脚本的同时,会把从应用程序捕获的 UI 信息保存在映射文件(object map)里面,比如 tree2 和 placeOrder。而在生成的脚本中将直接使用对象上的方法,这些方法在底层将会最终映射到具体的鼠标和键盘事件。

图 5 展示了 RFT 本身的录制流程如,对于每个脚本,都有独立的映射文件。RFT 会从映射文件里面查找,如果找不到当前测试对象,会把测试对象的信息加入到映射文件里面。

图 5. 录制流程

读《实战GUI产品的自动化测试》:第一步——了解自动化测试,简单RFT的录制回放实例

如果您更细心的话,您会发现 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));
}
}