【IT168 技术文章】
介绍
对于 SOA 的功能测试我们要分三层的测试:第一层是用 RFT(Rational Functional Tester)进行 UI 界面层的测试;第二层和第三层是用 Junit 进行 Business Process 层和 Service 层的测试。性能测试方面,用 RPTA(Rational Performance Tester)进行 UI 界面层的测试,而 RPT for SOA 用 Business Process 层和 Service 层的性能测试
UI 界面层的自动化测试用例
(1)用 RFT 来录制的 UI 层的测试用例脚本。
使用 RFT 开发自动化测试脚本的过程大致是:录制对象映射,使用对象映射对 GUI 对象进行操作从而完成自动化测试。
图 3.1 RFT 流程图
(2)使用RFTUI测试框架来编写测试脚本。
有了这套框架可以为你的自动化测试项目提供以下帮助:加速脚本编写;
快速调试以及易于维护;
代码重用;
很好的组织脚本文件;
帮助协作;
从他人经验得到益处;
这套框架由以下三个部分组成:通过Appobjects,Tasks以及Testcases来实现三层架构;ibm工具包;以及配套的非常好的实践。
Appobjects用于存储关于应用程序GUI元素的信息。在appobjects里面你将写一些getter方法,这些getter方法返回对象给调用者,这些对象将用于查询和操作GUI元素。一般,这些getter方法将在tasks层调用。
Tasks用于写一些可重用的方法,这些方法将对应用程序执行一些操作。如果需要操作和查询复杂的特定于某应用程序的控件,也可以写在tasks的方法中。Tasks包里的方法将被testcases调用。
Testcases便是最终的测试用例。它们将操作应用程序、验证其状态以及记录下结果。
(3)使用RPT(RationalPerformanceTester)来录制自动化测试用例脚本。
RationalPerformanceTester(简称RPT)是IBM基于Eclipse平台及开源的测试及监控框架Hyades,开发出来的最新性能测试解决方案,总体架构如图一所示。它可以有效地帮助测试人员和性能工程师验证系统的性能,识别和解决各种性能问题。它适用于性能测试人员和性能优化人员,用于开发团队在部署基于HTTP和HTTPs通信协议的Web应用程序前,验证其可扩展性、性能和可靠性。
BusinessProcess和Service层自动化测试用例
在BusinessProcess和Service层,业务接口通常以SCA或WebService的接口暴露出来。在功能测试阶段,有很多编写测试用例的工具,这里我们使用JUnit来编写测试用例脚本。JUnit是一个易用的,灵活的,开源的,测试平台。就像所有其他项目一样,它有很多优点,但也有不足之处。通过使用无需人工干预的JUnit自动测试平台,我们很容易累积起大量的JUnit测试程序从而保证以往的错误不会重现。另外,JUnit便于和编译单元(如,Ant)以及IDE单元(如,Eclipse)集成。JUnit中有两个基本对象,TestCase和TestSuite。TestCase通过提供一组方法来实现一系列测试。例如,setup()方法用来在每项测试开始前建立测试所需的测试环境,而teardown()方法用来在测试后销毁该环境。TestSuite是由几个TestCase或其他的TestSuite构成的。你可以很容易的构成一个树形测试,每个测试都由持有另外一些测试的TestSuite来构成。被加入到TestSuite中的测试在一个线程上依次被执行。
在性能测试阶段,我们使用RPTforSOA(RationalPerformanceTesterforSOA)来编写调用服务的脚本。
RPTforSOAExtension根据WSDL进行语法解析,生成参数输入界面。测试人员可输入测试数据,RPTRecorder会捕获到进行WebService通信的协议内容,并记录到脚本中(如图3.2)。
图3.2RPTforSOA界面图
自动化测试用例执行脚本介绍
本文的第二部分介绍了测试 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?
|--10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error:?The previous line is longer than the max of 90 characters ---------|
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"))
|--10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error:?The previous line is longer than the max of 90 characters ---------|
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 的自动化测试。