• 读《实战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 使用界面

    图 3. RFT 使用界面

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

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

    1. 运行我们的 CD 订购程序:C:Program FilesIBMSDPFunctionalTesterFTSamples 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 录制生成的测试脚本

    图 4. RFT 录制生成的测试脚本

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

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

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

    图 5. 录制流程

    图 5. 录制流程

    如果您更细心的话,您会发现 RFT 的录制完成了捕获和操作的功能,而没有生成验证相关的代码,因为这些需要您随后自己补齐。如果您对如何更高效的做验证感兴趣的话,欢迎关注我们的后续文章。

    本地生成的脚本如下:

     1 package baidu;
     2 import resources.baidu.testHelper;
     3 import com.rational.test.ft.*;
     4 import com.rational.test.ft.object.interfaces.*;
     5 import com.rational.test.ft.object.interfaces.SAP.*;
     6 import com.rational.test.ft.object.interfaces.WPF.*;
     7 import com.rational.test.ft.object.interfaces.dojo.*;
     8 import com.rational.test.ft.object.interfaces.siebel.*;
     9 import com.rational.test.ft.object.interfaces.flex.*;
    10 import com.rational.test.ft.object.interfaces.generichtmlsubdomain.*;
    11 import com.rational.test.ft.script.*;
    12 import com.rational.test.ft.value.*;
    13 import com.rational.test.ft.vp.*;
    14 import com.ibm.rational.test.ft.object.interfaces.sapwebportal.*;
    15 /**
    16  * Description   : Functional Test Script
    17  * @author lenovo
    18  */
    19 public class test extends testHelper
    20 {
    21     /**
    22      * Script Name   : <b>test</b>
    23      * Generated     : <b>2014-10-18 上午2:01:44</b>
    24      * Description   : Functional Test Script
    25      * Original Host : WinNT Version 6.1  Build 7601 (S)
    26      * 
    27      * @since  2014/10/18
    28      * @author lenovo
    29      */
    30     public void testMain(Object[] args) 
    31     {
    32         startApp("ClassicsJavaA");
    33         
    34         // Frame: ClassicsCD
    35         tree2().click(atPath("Composers->Haydn->Location(PLUS_MINUS)"));
    36         tree2().click(atPath("Composers->Haydn->Location(PLUS_MINUS)"));
    37         tree2().click(atPath("Composers->Haydn->Location(PLUS_MINUS)"));
    38         tree2().click(atPath("Composers->Haydn->Symphonies Nos. 94 & 98"));
    39         tree2().click(atPath("Composers->Haydn->Symphonies Nos. 99 & 101"));
    40         tree2().click(atPath("Composers->Schubert->Location(PLUS_MINUS)"));
    41         tree2().click(atPath("Composers->Schubert->Die schone Mullerin, Op. 25"));
    42         placeOrder().click();
    43         
    44         // Frame: Member Logon
    45         memberLogon().close();
    46         
    47         // Frame: ClassicsCD
    48         classicsCD(ANY,MAY_EXIT).click(atPoint(611,5));
    49     }
    50 }

      

  • 相关阅读:
    javascript数组/对象数组的深浅拷贝问题
    Vue packages version mismatch
    关于Echarts的使用和遇到的问题
    webpack 打包 todolist 应用
    Js正则学习笔记
    Vue项目多域名跨域
    Vuex的简单应用
    css3实现饼状图进度及环形进度条
    浏览器缓存机制
    去除滚动条
  • 原文地址:https://www.cnblogs.com/MrCandy/p/4032387.html
Copyright © 2020-2023  润新知