对于 SOA 的功能测试我们要分三层的测试:第一层是用 RFT(Rational Functional Tester)进行 UI 界面层的测试;第二层和第三层是用 Junit 进行 Business Process 层和 Service 层的测试。性能测试方面,用 RPT(Rational Performance Tester)进行 UI 界面层的测试,而 RPT for SOA 用 Business Process 层和 Service 层的性能测试
(1)用 RFT 来录制的 UI 层的测试用例脚本。
使用 RFT 开发自动化测试脚本的过程大致是:录制对象映射,使用对象映射对 GUI 对象进行操作从而完成自动化测试。
图 3.1 RFT 流程图
(2)使用 RFT UI 测试框架来编写测试脚本。
有了这套框架可以为你的自动化测试项目提供以下帮助:
- 加速脚本编写;
- 快速调试以及易于维护;
- 代码重用;
- 很好的组织脚本文件;
- 帮助协作;
- 从他人经验得到益处;
这套框架由以下三个部分组成:通过 Appobjects,Tasks 以及 Testcases 来实现三层架构;ibm 工具包;以及配套的最佳实践。
Appobjects 用于存储关于应用程序 GUI 元素的信息。在 appobjects 里面你将写一些 getter 方法,这些 getter 方法返回对象给调用者,这些对象将用于查询和操作 GUI 元素。一般,这些 getter 方法将在 tasks 层调用。
Tasks 用于写一些可重用的方法,这些方法将对应用程序执行一些操作。如果需要操作和查询复杂的特定于某应用程序的控件,也可以写在 tasks 的方法中。Tasks 包里的方法将被 testcases 调用。
Testcases 便是最终的测试用例。它们将操作应用程序、验证其状态以及记录下结果。
(3)使用 RPT ( Rational Performance Tester) 来录制自动化测试用例脚本。
Rational Performance Tester(简称 RPT)是 IBM 基于 Eclipse 平台及开源的测试及监控框架 Hyades,开发出来的最新性能测试解决方案,总体架构如图一所示。它可以有效地帮助测试人员和性能工程师验证系统的性能,识别和解决各种性能问题。它适用于性能测试人员和性能优化人员,用于开发团队在部署基于 HTTP 和 HTTPs 通信协议的 Web 应用程序前,验证其可扩展性、性能和可靠性。
Business Process 和 Service 层自动化测试用例
在 Business Process 和 Service 层,业务接口通常以 SCA 或 Web Service 的接口暴露出来。在功能测试阶段,有很多编写测试用例的工具,这里我们使用 JUnit 来编写测试用例脚本。JUnit 是一个易用的,灵活的,开源的,测试平台。就像所有其他项目一样,它有很多优点,但也有不足之处。通过使用无需人工干预的 JUnit 自动测试平台,我们很容易累积起大量的 JUnit 测试程序从而保证以往的错误不会重现。另外,JUnit 便于和编译单元(如,Ant)以及 IDE 单元(如,Eclipse)集成。JUnit 中有两个基本对象,TestCase 和 TestSuite。TestCase 通过提供一组方法来实现一系列测试。例如,setup() 方法用来在每项测试开始前建立测试所需的测试环境,而 teardown() 方法用来在测试后销毁该环境。TestSuite 是由几个 TestCase 或其他的 TestSuite 构成的。你可以很容易的构成一个树形测试,每个测试都由持有另外一些测试的 TestSuite 来构成。被加入到 TestSuite 中的测试在一个线程上依次被执行。
在性能测试阶段,我们使用 RPT for SOA(Rational Performance Tester for SOA)来编写调用服务的脚本。
RPT for SOA Extension 根据 WSDL 进行语法解析,生成参数输入界面。测试人员可输入测试数据,RPT Recorder 会捕获到进行 Web Service 通信的协议内容,并记录到脚本中(如图 3.2)。
图 3.2 RPT for SOA 界面图
本文的第二部分介绍了测试 build 的自动卸载和安装部署。本部分介绍在新的 build 自动安装部署完成后,自动执行测试用例并将测试结果发给相关人员。
若要实现测试用例的自动执行,需要在第二部分中的 buildToTest.py 文件中添加四个重要任务:
-
判断 Build 是否安装成功
系统获取服务器 profile 下的 \config\cells\localhostNode03Cell\applications 中已安装的 ear 文件,判断是否所有应该安装的 ear 文件都在其中,并且判断这些文件的 Date Modified 时间是否是当天。若从该文件夹下查询到所有的 ear 文件,说明新 Build 已成功安装。
-
执行测试用例并且获取测试结果
在测试用例完成后,编写一个 Servlet 调用本 Junit 编写的测试用例。系统通过
sock=urllib.urlopen(" http://localhost:9082/cbs.service.test.web/CBSServiceTestRunner? suite=com.ibm.cbs.service.test.suite.CBSServiceSuite& xsl=cactus-report.xsl")
测试用例被执行并且将结果按照 cactus-report.xsl 的格式组织。获取测试结果后,系统将结果写入 ServletTestRunner.xml 文件中。
htmlSource = sock.read() sock.close() resultfile=open(top_dir+'/BuildScript-CMI-Service/ftp/'+currentTime+ '/ServletTestRunner.xml', 'w') resultfile.write(htmlSource) resultfile.close() -
发送邮件
系统调用 sendEmail.bat 将测试结果发送给相关人员。
os.putenv('bvt_ir','OK') sendEmail = os.system(os.path.join(top_dir, "BuildScript-CMI-Service", "sendEmail.bat"))
sendEmail.bat:
call C:\Apache\apache-ant-1.6.2\bin\ant.bat -Dbvt.ir=%bvt_ir% -logfile sendEmail.log -buildfile C:\BuildScript-CMIV1R3\BuildScript-CMI-Service\otherTargets.xml send-mail
-
若 Build 并未安装成功,则发送错误信息邮件给相关人员。
call C:\Apache\apache-ant-1.6.2\bin\ant.bat -logfile sendErrorEmail.log -buildfile C:\BuildScript-new\ICMS-CBS_Merge-Service\otherTargets.xml send-error-mail
otherTargets.xml 中定义了 send-mail 和 send-error-mail 的格式和内容
<target name="send-mail"> <tstamp> <format property="build.time" pattern="yyyyMMddHH" locale="en"/> </tstamp> <mail mailhost="xxx.xxx.xxx.xxx" subject="Daily Build Announcement For CMIV1R3 ${build.time}" tolist="xxx@cn.ibm.com,xxx@cn.ibm.com,xxx@cn.ibm.com" messagemimetype="text/plain"> <from address="xxxx@cn.ibm.com"/> <replyto address="xxxx@cn.ibm.com"/> <message>Hi All, The build summary is as below, Ear Name Build Status BVT Status xxx.xxx.xxx.xxx.ear Okey ${bvt.ir} xxx.xxx.xxx.xxx.ear Okey ${bvt.ir} ….. Pls. kindly find the daily build and bvt results as below, http://xxx.xxx.xxx.xxx/ICMS/CMIV1R3/${build.time} http:// xxx.xxx.xxx.xxx /ICMS/CMIV1R3/${build.time}/ServletTestRunner.xml Best Regards </message> </mail> </target>
ServletTestRunner.xml 中统计了测试结果 :
图 3.3 Service 层功能测试结果
测试结果中统计了测试用例的数目,执行失败的用例数目,成功执行的测试用例的百分比,和执行用例所消耗的时间。测试人员可以根据总结报告查询执行失败的测试用例。
本文介绍了 SOA 的自动化测试的框架。这个自动执行测试用例的框架也可以调用其它语言脚本编写的测试用例。此框架大量节约了测试人员的时间,实现了 SOA 的自动化测试。
学习
-
本系列的 第 1 部分 :通过本文您将了解组合业务服务的概念以及如何自动化的将 WPS、WAS 等应用中间件和 Rational Performance Tester for SOA quality,Rational Function Tester 等测试工具整合成一套完整的测试环境。
-
本系列的 第 2 部分 :在本系列的上一篇文章中,我们介绍了如何实现 SOA 测试环境的自动化安装 。本文中,我们将介绍如何自动地每天定时安装新的待测 SOA 组件。
-
“WebSphere Application Server 配置模型 ”(Information home: IBM WebSphere Application Server) 说明了各个配置对象之间的关系。
-
“What is Tcl/Java?”简单介绍了 Rcl 与 Jacl,及相关的开源项目。
-
“ 响应文件安装基础 ”(DB2 信息中心 ) 详细讲解了 DB2 响应文件涉及的各种配置内容。
-
“Silently installing WebSphere Process Server or the Client” (Information home: IBM WebSphere Process Server) 对 WPS 响应文件模板的解释。
-
“Configuring a JDBC provider using scripting”和“Configuring new data sources using scripting” (Information home: IBM WebSphere Application Server) 讲解如何通过脚本编制来配置数据访问。
- IBM developerWorks SOA and Web services 专区 提供了大量的文章,以及关于如何开发 Web 服务应用程序的初级、中级和高级教程。
- 使用 IBM SOA Sandbox 进行试验!通过 IBM SOA 进行实际的亲手实践来提高您的 SOA 技能。
- IBM SOA 网站 提供 SOA 的概述,并介绍 IBM 是如何帮助您实现 SOA 的。
- 了解关于 developerWorks 技术事件和网络广播 的最新消息。请特别关注以下 SOA 和 Web 服务技术讲座:
- 访问 Safari 书店 ,浏览有关这些技术主题以及其他方面的书籍。
- 查看快速的 Web 服务按需演示 。
- 获取 SOA and Webservices 专区的 RSS。(了解关于 RSS 的更多信息。)
获得产品和技术
- 使用 IBM 试用软件 开发您的下一个项目,可下载或索取 DVD 光盘。
讨论
- 参与 developerWorks Blog,从而加入到 developerWorks 社区中来,其中包括以下与 SOA 和 Web 服务相关的 Blogs:
- Sandy Carter 的 Service Oriented Architecture -- Off the Record
- Ali Arsanjani 的 Best Practices in Service-Oriented Architecture
- Bobby Woolf 的 WebSphere SOA and J2EE in Practice
- Eoin Lane 博士的 Building SOA applications with patterns
- Kerrie Holley 的 Client Insights, Concerns and Perspectives on SOA
- Simon Johnston 的 Service-Oriented Architecture and Business-Level Tooling
- Sanjay Bose 的 SOA, ESB and Beyond

