在敏捷世界中使用 Rational 工具执行自动化的功能测试
bzsb6629
8年前
<p>在本教程中,将学习如何自动化一个大型、多组件系统的功能测试和系统回归测试。本教程还将了解一些为了向测试工具增添自动化功能而创建的自定义工件。</p> <p>企业需要随着瞬息万变的世界而进行调整,他们的 IT 系统也必须针对不断变化的需求和技术进行调整。大型 IT 系统可能有许多组件,每个部件可能由不同的团队开发。这些团队拥有不断变化的需求、时间表和优先级。</p> <p>在任何不断演变的大型系统中,新功能和对现有功能的更改都会导致难以确保现有功能仍然有效且保持不受影响。一种标准做法是在部署新版本时对已有功能执行回归测试。敏捷开发要求代码也必须通过每轮冲刺结束时的回归测试,即使没有计划性的正式生产发布。在某些情况下,功能测试的早期阶段通过了测试条件,但在测试阶段快结束重新运行它们的时候可能出现失败。出现这种情况的一些原因是,对相关功能的错误修复引入了不必要的问题,或者在开发周期的后期发布了影响现有功能的新功能。</p> <p>回归测试非常重要。您执行回归测试是为了:</p> <ul> <li>确认来自以前版本的现有功能的有效性。</li> <li>确保当前版本中引入的所有功能是完整的。</li> </ul> <p>在您拥有累积了数百个测试案例的复杂系统时,每次都手动重新运行旧测试案例不但不切实际,也不经济。另外,随着测试团队成员不断变化,新团队成员可能无法充分理解给定测试案例的深入细节,每次运行测试时需要手动验证结果或分析问题。</p> <h2><strong>系统描述</strong></h2> <p>在本教程中,将了解我们为 IBM 数字营销部门创建和测试的一个系统。它是一个针对联系人和企业的记录系统。如图 1 所示,IBM InfoSphere® Master Data Management (MDM) 的一个实例存储数据。数据通过 IBM 信息总线(企业服务总线)或 IBM InfoSphere DataStage® ETL 作业传入系统中,这些作业直接从源系统数据库读取数据或处理平面文件。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/3f4251eca060b9c011a326fc104f4527.png"></p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/6d32330cb068f7123cc2dd56caba6fbb.png" alt="在敏捷世界中使用 Rational 工具执行自动化的功能测试" width="550" height="302"></p> <p>功能和系统测试在 IBM Rational® Performance Tester 中运行。Rational Quality Manager 将会编排 Rational Performance Tester 测试。自动化的功能和系统回归测试可以验证所有现有组件和功能都能工作正常,而且它们能够协同工作。自动化回归测试,可以让测试团队将精力集中在新功能和组件的测试上。</p> <h2><strong>IBM 信息总线</strong></h2> <p>IBM 信息总线(也称为企业服务总线或 ESB)是一个直通式中间件应用程序,提供了一种可靠的集成机制,在不同来源和目标系统间路由和转换消息协议和格式。ESB 提供了实时和批量数据传输模式,能在接口间保持数据完整性。</p> <ul> <li>源系统发送由系统处理的 MQ 请求。响应返回给源系统。请求/响应消息格式和消息传输协议对所有用户都相同。</li> <li>ESB 为 InfoSphere MDM 提供转换和集成服务。ESB 将传入的通用代码值(比如国家名称和语言)转换为 MDM 需要的代码,然后将 MDM 响应代码转换为通用代码值。转换过程中还会插入特定于 MDM 的元素,并针对某种模式来验证结果消息。</li> </ul> <h2><strong>InfoSphere DataStage</strong></h2> <p>InfoSphere DataStage 从异构的来源提取数据,获取数据并转换它们,并采用可被 MDM 使用的格式向 MDM 提供 XML 数据。IBM InfoSphere DataStage 使用一个 IBM PureData®(Netezza 设备)将数据临时存储在一个暂存区中,以便执行 ETL 处理和创建 XML。</p> <p>DataStage 执行系统中的多个不同功能:</p> <ul> <li>数据清理 — 系统中的一些数据直接来自任意格式的最终用户输入,可能很荒谬 (name = ‘Mickey Mouse')、粗俗或晦涩难懂 (name = ‘Mike123@#$')。DataStage 中实现的一个清理服务运行一系列清理规则来识别不良数据。清理服务可在系统消息流中的多个位置实现,以确保所有数据都得到清理。</li> <li>源系统提取 — 不是所有源数据都通过 MQ 请求进入系统。DataStage 会直接检查源系统数据库中的更改,生成 XML 并通过 MQ 或平面文件将该 XML 发送到 MDM。</li> <li>平面文件处理 — 一些源系统通过平面文件发送数据。DataStage 会处理这些文件,生成 XML,并将该 XML 放入 MQ 队列,XML 会在队列中被转换并发送给 MDM 供处理。</li> </ul> <h2><strong>InfoSphere MDM</strong></h2> <p>InfoSphere MDM 是该项目解决方案的核心组件。MDM 从多个来源接收新联系人记录,并对现有联系人中的记录进行更新,然后使用具有特定于项目的扩展的 MDM 将数据持久保存到 DB2® 数据库中。概率匹配引擎执行可疑副本处理,以便将一个联系人的多个副本(或许来自不同来源)折叠到一条金级记录中。MDM 拥有以下子组件:</p> <ul> <li>MDM Server Advanced Edition — MDM Server Advanced Edition 组件充当一个主联系人数据存储,提供并管理要用于企业中不同应用程序的联系人记录的可用副本。它获取经过 DataStage 转换和 QualityStage® 标准化的源数据,向其他需要直接与 MDM 服务器交互的应用程序提供数据服务。MDM Server 提供行业标准的接口,包括基于 Java 的远程方法调用 (RMI)、JMS 消息服务和基于 SOAP 的 Web 服务。这些接口为各种应用程序在未来直接与 MDM Server 交互提供了基础。MDM Server 使用概率匹配引擎 (PME)。</li> <li>MDM 批处理器 — MDM Server 的一个用于初始负载和增量负载的组件。存在的一些 DataStage 作业专门用于以平面文件格式准备批量 MDM 请求,已通过批处理器处理。</li> <li>MDM 数据库 — 用于存储数据的 MDM 服务器的 DB2 数据库。</li> <li>MDM DSUI — 这是用于例行数据维护的数据管理用户界面。</li> </ul> <h2><strong>回归测试自动化</strong></h2> <p>IBM Rational 测试工具套件帮助您解决与功能和系统回归测试相关的挑战。这些工具还有利于减少回归测试阶段的总执行时间。减少的这些时间使测试团队能够根据需要重新运行回归测试案例,而不会影响测试周期中投入的成本或时间。</p> <p>本节将介绍一些用于为多个版本构建稳健且高效的功能和系统回归测试桶的技术。还将探索我们团队在尝试全面自动化这些测试案例时面临的一些挑战,以及我们如何解决这些问题。</p> <p>测试环境包含以下工具:</p> <ul> <li>Rational Service Tester</li> <li>Rational Performance Tester</li> <li>Rational Quality Manager</li> <li>Rational Team Concert™</li> </ul> <h3><strong>Rational Service Tester 和 Rational Performance Tester</strong></h3> <p>Rational Service Tester 允许通过 HTTP、JMS 和 MQ 协议对后端服务执行自动化测试。它通常用于应用程序的功能验证测试 (FVT)。它还包含对服务执行负载测试和执行计划测试的功能。Rational Performance Tester 提供了性能和负载测试功能,而且借助对这些功能的自然扩展,提供了与 Rational Service Tester 类似的自动化服务测试支持。</p> <p>尽管 Rational Service Tester 和 Rational Performance Tester 有不同的功能,但它们都是基于 Eclipse 的工具。出于我们的目的,二者可以交替使用,所以本教程中将混合称呼它们。Rational Service Tester 和 Rational Performance Tester 允许向被测试系统发送一系列消息,并验证响应。一些测试只能在 Rational Service Tester 或 Rational Performance Tester 上运行,但这些区别不属于我们的介绍范畴。</p> <h3><strong>Rational Quality Manager</strong></h3> <p>Rational Quality Manager 基于 Open Source Jazz™ 项目,是一个基于 Web 的协作式质量管理解决方案。它全面支持测试规划、手动测试、报告、状态跟踪,还支持不同职位上的测试团队成员,包括测试架构师、测试主管、测试人员等。这是通过它与其他 IBM Rational 测试工具(比如 Rational Service Tester 和 Rational Performance Tester)交互的能力来实现的。</p> <h3><strong>Rational Team Concert</strong></h3> <p>Rational Team Concert 是一个变更配置管理工具,能够执行迭代规划、流程定义、变更管理、缺陷跟踪、来源控制、报告等。该项目中的所有 Rational Service Tester 和 Rational Performance Tester 测试案例都使用 Rational Team Concert 进行维护。</p> <h2><strong>创建回归测试桶</strong></h2> <p>在 Rational Quality Manager 中,可以为测试创建两种主要的实体。第一种是单个测试案例的定义,最终指向 Rational Service Tester 或 Rational Performance Tester 中定义的可执行的测试案例。在 Rational Quality Manager 中执行此测试案例会触发运行 Rational Service Tester 的远程机器上的 Rational Service Tester 中定义的链接测试案例。第二种实体是一个测试套件的定义,测试套件是 Rational Quality Manager 中已定义的测试案例的松散耦合集合。</p> <p>回归测试桶被定义为 Rational Quality Manager 测试套件,在该套件中,可按功能将一组已有的 Rational Quality Manager 测试案例松散耦合在一起并执行。组成一个测试套件的测试案例没有排他性,这意味着基于某个给定的 Rational Quality Manager 测试案例涵盖的功能范围和它在给定回归测试桶中的相关性,它可以包含在多个测试套件中。下面展示了此概念。</p> <p>我们创建了不同的 Rational Quality Manager 测试套件来测试 MDM 中的重要功能部分。还有一些针对 MQ 和 ETL 功能的不同测试套件。如果某个特定的版本仅包含 MDM 功能或一项 ETL 更改,可以选择运行一个测试套件子集。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/3743f6a6c7cd79b9e06ec696383ffc37.png"></p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/9841b39cb343139c7e8aa251f8580126.png" alt="在敏捷世界中使用 Rational 工具执行自动化的功能测试" width="450" height="380"></p> <h2><strong>Rational Quality Manager — Rational Service Tester 连接</strong></h2> <p>定义一个测试套件后,Rational Quality Manager 服务器可在任何安装了带 Rational Quality Manager 适配器的 Rational Service Tester 的机器上运行该测试套件。您可以在多个不同的机器上启用一个适配器。Rational Quality Manager 拆分测试套件中的测试案例,并在所有适配器上并行运行它们。在每台机器上,会从 Rational Team Concert 提取测试案例的最新版本。在我们的设置中,一个专门的 Linux 云映像运行用于回归测试 Rational Performance Tester。有时会使用各个测试人员笔记本电脑上的适配器,以便并行运行测试案例。因为一台机器上仅能运行一个 Rational Performance Tester 实例,所以如果使用测试人员笔记本电脑执行回归测试,那么在该回归测试运行期间,测试人员无法运行其他 Rational Performance Tester 测试案例。</p> <p>此过程包含两步。首先,在 Rational Service Tester 内配置一个 Rational Quality Manager 适配器。在 Rational Service Tester 中,选择 <strong>Windows > Preference > Quality Manager Adapter</strong> 。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/a51247a48687cabe93ce535ebe6e664a.jpg"></p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/cf585f4ee05e9074d39d9c131bbdde36.jpg" alt="在敏捷世界中使用 Rational 工具执行自动化的功能测试" width="550" height="560"></p> <p>如果来自多个 Rational Service Tester 安装的适配器被附加到您的项目区域,请确保适配器名称在环境中是唯一的。在 Rational Quality Manager 中运行一个测试案例时,适配器名称有助于确保测试案例在想要的 Rational Service Tester 实例上执行。</p> <p>可通过两种方式启动适配器。要从 Rational Performance Tester 启动适配器,请打开 Rational Quality Manager 适配器视图( <strong>Window > Show View > Other</strong> ,然后搜索 Quality Manager)并单击 <strong>Connect to Rational Quality Manager</strong> 图标。在 Rational Quality Manager 运行测试案例时,此视图中将显示日志消息。Rational Performance Tester 也会在测试案例运行时打开视图。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/b50f558555feb66fe124b3b7c0aa55a0.jpg"></p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/58153477bc3f1aef3c868d3f2f97d3e9.jpg" alt="在敏捷世界中使用 Rational 工具执行自动化的功能测试" width="550" height="276"></p> <p>运行适配器的第二种方式是无头模式,其中 Rational Performance Tester GUI 未运行。适配器在后台静默地运行。要启动适配器,请在该适配器所在的目录中(SDPShared 目录下)打开一个 DOS 窗口(或 Linux 终端)。在我们的测试机器上,适配器位于 C:\RationalPerformanceTester85\RationalPerformanceTester-RationalService Tester_RationalQualityManagerAdapter 目录中。更新 config\adapter.config 中的配置文件。要启动或停止适配器,可输入 cd 转到 bin 目录,并使用命令 Rational Quality ManagerAdapter.bat [START | STOP | STATUS] 。</p> <p>我们拥有观察证据表明,适配器在无头模式下的运行效率比在 Rational Performance Tester 或 Rational Service Tester 中运行时要高,尤其是在运行大量测试案例时。我们的理论是,Rational Performance Tester/Rational Service Tester 适配器需要打开更多的窗口,因而需要使用更多的资源,最终会导致适配器挂起。</p> <h2><strong>运行测试套件</strong></h2> <p>要在 Rational Quality Manager 中执行测试套件:</p> <ul> <li>打开您想要在 Rational Quality Manager Web 客户端上运行的测试套件。</li> <li>单击页面顶部的 Run Test Suite 图标(图 4 中带圆圈的图标)。</li> <li>在打开的窗口中,选择套件中要运行的测试案例或全部案例,选择一个活动的 Rational Quality Manager 适配器来运行该测试套件。可以选择对一个 Rational Service Tester 安装或多个 Rational Service Tester 安装运行套件中的所有测试案例。</li> <li>您可以计划 Rational Quality Manager 中的测试套件执行时间。在正常工作时段执行其他测试活动、代码部署、维护等,在下班时间运行回归测试案例,这样做很有帮助。</li> <li>选择是否允许将之前的测试的执行变量传递给后续步骤。也可以选择在任何一个测试案例发生故障时停止运行测试套件,或者继续执行整个测试套件。对于典型的测试套件,首选方法是运行所有选定的测试案例是首选,即使某个测试案例失败。</li> </ul> <p><img src="https://simg.open-open.com/show/eefdbcfafb802acc85187987009b5401.jpg"></p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/8d73943f084f6a154fc971718b18838f.jpg" alt="在敏捷世界中使用 Rational 工具执行自动化的功能测试" width="550" height="252"></p> <h2><strong>测试结果和故障排除</strong></h2> <p>在测试套件执行过程中,Rational Quality Manager 会显示测试套件中各个测试案例的进度。如果有必要,可以在执行中期中断该过程。在执行结束时,会看到每个测试案例的状态(Pass 或 Fail)(假设它被配置为运行所有测试案例,即使部分测试案例失败)。</p> <h2><strong>回归测试环境配置</strong></h2> <p>现在您已经了解了准备和设置 Rational Quality Manager 测试套件、测试案例、Rational Service Tester 和 Rational Performance Tester 测试案例的步骤,可以继续对回归测试环境进行物理配置,如图 6 所示。要说明的一些细节:</p> <ul> <li>一位测试团队成员连接到公司网络,并通过 Web 接口访问 Rational Quality Manager。</li> <li>Rational Quality Manager 服务器可在网络中的任何地方运行。</li> <li>包含 Rational Service Tester 和 Rational Performance Tester 测试案例的 Rational Team Concert 存储库可在网络中的任何地方运行。</li> <li>Rational Service Tester 或 Rational Performance 配置了 Rational Quality Manager 适配器来连接到 Rational Quality Manager 服务器实例。</li> <li>运行该系统的应用程序测试服务器在同一个网络中测试。</li> </ul> <p style="text-align: center;"><img src="https://simg.open-open.com/show/b0d3c77a55ed3cfde8eed0d3ce3eb7c0.png"></p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/82a51a211c1a32c75b53dab21359a54b.png" alt="在敏捷世界中使用 Rational 工具执行自动化的功能测试" width="550" height="258"></p> <h2><strong>自定义 Rational Service Tester 和 Rational Performance Tester</strong></h2> <p>Rational Service Tester 的功能能满足许多种类的测试需求。但是,没有任何软件产品敢声称不扩展它就能解决所有问题。我们需要能够执行以下操作来全面自动化测试:</p> <ul> <li>调用 RMI 服务</li> <li>从 JMS 来源读取消息</li> <li>运行 SQL 命令</li> </ul> <p>幸运的是,Rational Service Tester 提供了一种扩展其现成功能的途径,以帮助我们解决这些挑战。尽管这些问题可以使用测试案例中的手动步骤进行解决,但这会阻碍我们实现功能和系统回归测试工作的全面自动化。</p> <p>RMI Test Harness</p> <p>Rational Service Tester 支持使用 HTTP、JMS/WebSphere® MQ 和 Microsoft .NET 协议来调用测试的应用程序。但是,我们的应用程序的 MDM 部署是仅针对 RMI 接口而配置和设置的,尽管 MDM 支持服务和 JMS 接口。此做法基于之前根据系统的需求和为了降低复杂性而制定的架构决策。</p> <p>为了使 Rational Service Tester 能够测试基于 RMI 的应用程序,我们开发了一个 RMI Test Harness servlet Web 应用程序。该应用程序充当着一个直通应用程序,在 Rational Service Tester 与 MDM 之间交换请求和响应消息。每个 Rational Service Tester/Rational Performance Tester 测试步骤都在 Transport 选项卡上有一个参数,表示指向接收测试服务器的 HTTP URL。为了使用 RMI Test Harness,Rational Service Tester 测试步骤使用了 Transport 选项卡中的测试工具的 URL。RMI Test Harness 处理 JNDI 查找,设置与 MDM 的 RMI 连接,并添加 MDM 需要的安全性,然后才将 XML 请求发送到 MDM。RMI Test Harness 通过 MDM 应用程序以 WAR 文件的形式部署在 WAS 服务器上。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/f65561d375cd0b03a362f4be31438cd0.png"></p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/7b4d77afc9cf4dd5c567e9fd22d83479.png" alt="在敏捷世界中使用 Rational 工具执行自动化的功能测试" width="550" height="268"></p> <p>JMS 通知工具</p> <p>我们有一种独特的情形,其中的一个被测试的服务有一个用于发送请求和响应的 RMI 接口,但它也在某些情况下生成 JMS 通知。作为自动化测试案例的一部分,我们需要读取并验证这些 JMS 消息。Rational Service Tester 支持使用 JMS 发送请求/响应,但是没有封装读取 JMS 消息的功能。为了测试此功能,开发了一个基于 servlet 的 Web 应用程序来读取和解析 IBM WebSphere MQ 消息。我们使用了 Rational Service Tester 的内置功能来对消息本身执行自动化验证,然后通过 MDM 将 JMS Test Harness 以 WAR 文件形式部署在 WAS 服务器上。</p> <p>要在 Rational Service Tester 中测试 JMS 消息,需要使用 Transport 选项卡中输入的 JMS Test Harness URL 来执行一个自定义的 Rational Service Tester 步骤。向 Rational Service Tester 步骤提供一个消息标识符在队列中搜索特定消息。JMS Test Harness 与相应的 MQ 队列建立连接,并在队列中的消息的 XML 有效负载中搜索该消息标识符。如果队列中的一条消息包含该标识符,则会将它返回给 Rational Service Tester 测试进行验证。该工具可计算包含该消息标识符的队列中的消息数量(可选)。</p> <p>SQL 调用</p> <p>测试案例中的一个步骤是创建一个需要测试的数据条件。这会创建一种需要修改应用程序数据库的情形。该过程是使用 Rational Service Tester 的 Java 扩展来实现的。</p> <p>该 Java 扩展程序建立一条从运行 Rational Service Tester 的机器到 DB2 的连接。它将 SQL 语句发送到 DB2 来运行,然后抓取结果集。测试案例需要提供 SQL 语句并调用这个 Java 扩展程序。</p> <h2><strong>结束语</strong></h2> <p>本教程演示了使用 Rational 套件来自动化动态敏捷世界中的复杂业务应用程序的回归和系统测试的方法。通过集成 Rational 产品并扩展它包含的功能,能够灵活地自动化现有功能的 SVT 测试,使您能集中精力创建新功能。</p> <p> </p> <p>来自:http://www.ibm.com/developerworks/cn/devops/d-auto-func-testing-agile-trs/index.html?ca=drs-</p> <p> </p>