调试 JEE 企业级应用 - 使用 WebSphere Integration Developer 集成测试客户端

来源:百度文库 编辑:神马文学网 时间:2024/04/16 05:23:32
叶 林, 软件工程师, IBM
叶林,现从事 WebSphere Business Modeler 的测试工作。专注于商业建模,流程分析方向。
李 伟, 软件工程师, IBM
李伟,来自 Websphere BPM Tooling 组,从事 BPM 相关产品的功能测试、系统测试、自动化测试。
时 玉雪, 测试工程师, IBM
时玉雪, WID自动化测试工程师,喜欢读书和园艺。
简介: SOA 是一种面向企业级服务的系统架构。本文先讨论怎样针对企业级应用测试需求选用适合的工具。然后再讲述如何使用WID( WebSphere Integration Developer) 集成测试客户端 TestClient 调试基于 SOA 架构的JEE 企业级应用,以及它带来的好处:模拟组件接口,逐级细化调试,并保存过程跟踪文件,重用历史数据。
标记本文!
发布日期: 2010 年 5 月 06 日
访问情况 56 次浏览
建议: 0 (添加评论)
平均分 (共 0 个评分 )
当今 JEE 企业级应用开发的发展快速。需要对开发出来的企业级应用进行调试, 这种需求促生出各种新兴调试工具。用户需要根据调试的模块的自身特性,选择合适的工具,达到预期的效果。
在介绍各种小工具之前,先回忆一下 JEE 体系结构中包括的四个容器:Web 容器,EJB 容器,Applet 容器和 Application Client 容器。JEE 企业级应用所有的实现都运行其中。
相应的测试工具也就主要针对,1)普通运行于客户端的 Java 代码, 2)GUI 界面代码调试 3) 数据库操作代码调试, 4)

普通的运行于客户端的 Java 代码的调试可以选择 JUnit。
JUnit 是最基本的,对 Java 程序进行白盒测试的工具。JUnit4 以前的版本,所有测试用例必须继承 TestCase类;而在 JUnit4 以后,利用了 JDK5 的 annotation 机制,只要在方法体前面使用 @test表明该方法是测试方法。这使得测试代码的编写更加简单。
JUnit 和 Ant 相结合,集成到开发的构建过程中。先根据软件功能编写测试用例,然后将测试用例的执行集成到 Ant 构建文件中。这样 Ant 在构建企业级应用的时候同时自动运行测试用例并生成测试报告。
项目地址http://www.junit.org
Web 界面是 JEE 企业级应用的门户,对界面程序的调试可以采用 FireBug。
Firebug 是 Firefox 下的一个插件 , 能够调试所有网站语言 , 如 HTML,CSS, JavaScript。在各种浏览器下都能使用 (IE,Firefox,Opera, Safari)。
项目地址http://getfirebug.com/releases/
RFT 是 IBM 的自动化集成测试工具,它能捕获编辑图形界面元素,录制定制回放测试场景,生成验证点。它的功能当然远不止于此。不在本文讨论范围之内。
项目地址http://download.boulder.ibm.com/ibmdl/pub/software/rationalsdp/rft/61/
数据库是 JEE 企业级应用中不可或缺的一部分,所以对数据库操作的代码调试也很重要。数据库操作代码的测试,可以选择 DbUnit。
DbUnit 是针对数据库操作的单元测试开源框架,是对 JUnit 的一个扩展。它主要是帮助开发人员将数据库保持在一个稳定的状态,确保测试用例的正确执行。测试用例都继续 DbUnit 提供的 DatabaseTestCase 类。
Public class CommonDB extends DatabaseTestCase{ // 获取数据库连接 Protected IDatabaseConnection getConnection(){} // 测试前设置数据库状态 Protected DatabaseOperation getSetUpOperation(){} // 测试后设置数据库状态 Protected DatabaseOperation getTearDownOperation(){} }
项目地址http://dbunit.sourceforge.net
服务器内的组件(包括 Servlet, JSP, EJB)的测试。一般有两种策略。一种是 in-Containner,直接在服务器容器内进行测试,另外一种是 mock object,模拟对象测试。
如果需要 in-Containner,可以使用 Cactus。
Cactus 也是对 JUnit 的扩展。专门针对服务器内不同组件容器,分别提供了三种类型用例 ServletTestCase, JspTestCase 和 FilterTestCase。 Cactus 的脚本可以直接运行在服务器上。
项目地址http://jakarta.apache.org/cactus
如果只需要模拟对象,可以选择 EasyMock, 它提供对接口和类的模拟。
项目地址http://www.easymock.org
如果 JEE 企业级应用是基于 Struts 框架的,那么可以使用 StrutsTestSuite 进行测试。StrutsTestSuite 顾名思义,提供了丰富的基于 Struts 框架的测试类。
如果是 Client/Server 框架的 JEE 企业级应用的系统测试,可以使用 JMeter。
JMeter 是纯 Java 桌面应用。功能比较强大,还能测试基于静态和动态资源应用的性能。
项目地址http://prdownloads.sourceforge.net/JMeter
上面介绍的各种工具可以相互结合着使用,达到各种需要的效果。
回页首
WID (WebSphere Integration Developer) 是 WebSphere 系列产品 JEE 开发的 IDE (Integrated Development Enviroment)。
JEE 企业级应用如果在 WID 平台上开发,那么天然便利的,可以选择 WID 自带的 TestClient工具包进行调试。选择第三方自动化测试工具,例如RFT,虽然也可以组织测试用例的效果,但是应用代码和调试代码运行在两套不同的平台上,开发人员需要在两种语境中切换以定位问题,影响工作效率。
WID 符合 SOA( 面向服务的软件架构 ) 概念,强调 WebService组件自描述、模块化和组件拼装。因为当今的企业级应用不是一个一个独立的应用系统,而是多个彼此连接,相互通过不同集成层次进行交互的应用系统,同时这些应用系统又和其他企业的相关应用系统连接,从而构成一个结构负责的发布式企业应用系统。其中,连接企业内部各种应用系统的技术称为 EAI,即企业技术集成。连接企业间各种应用系统的技术称为 B2BI。
构成企业级应用的各个模块,有些是由第三方开发的,只能得到接口信息,无法获取源代码,无法真正为这些模块建立运行环境。所以相对于前面所述的各种企业级应用调试小工具,WID TestClient 工具包主要侧重于模拟组件,用来测试组件。WID TestClient还能记录执行过程,重用历史数据。此外 WID TestClient 扩展自 JUnit, 能对测试用例进行有粒度的打包封装,批量运行。WIDTestClient 强调的是模拟企业级应用各个组件,强调对测试用例的组织维护和重用。具体到对数据库应用代码或者对 web 页面代码的调测debug,还需要结合前面所述的其他调试工具,例如 DBUnit 等开展。
回页首
WID 产品自带有企业级应用示例 HelloWorld。下面介绍如何使用 WID TestClient 来调测 HelloWorld。
HelloWorld 获取:
WID 界面菜单 Windows > Samples and Tutorials > IBM WebSphere Integrarion Developer
选择点击 Hello World Part 2 > Import > complete artifacts
环境要求:
需要事先安装 WID 以及它的集成测试环境 UTE
模拟器是 WID TestClient 实现对 SOA 组件进行模拟的一个工具。
开发人员在 JEE 企业级应用的调试过程中有三个理由要使用到 emulator:
首先在协同开发阶段,各个相互依赖的模块开发进度不同。不能等待所有模块都完成才开始测试。
其次构成企业级应用的各个模块,有些是由第三方开发的,只能得到接口信息,无法获取源代码,无法真正为这些模块建立运行环境
最后即便所有的模块都开发完成,并且开放访问,emulate 也是必要的。它更加快捷,提供良好的交互。
在 HelloWorld 示例中, HelloWorldMediation Module 调用了 HelloService Module。假设 HelloService Module 没有开发完成,需要被模拟。
下面分 7 个步骤演示如何调测 HelloWorldMediation,如何模拟 HelloService。
部署 HelloWorldMediation
指定被测组件和需要输入的数据
模拟 HelloService, 为它新建一个名叫 emulHelloServiceProg 的模拟器
编码实现模拟器 emulHelloServiceProg
开启模拟器,执行 HelloWorldMeidationExport 调测用例
关闭模拟器,部署真实的 HelloService, 再次执行 HelloWorldMeidationExport 调测用例
保存历史数据
部署 HelloWorldMediation
运行 WID ,导入 HelloWorld Sample 工程
菜单 Windows > Samples and Tutorials > IBM WebSphere Integration Developer
选择点击 Hello World Part 2 > Import > complete artifacts
启动 Server
菜单 Windows > Show View > Server > Servers
在 Server View 中,点击 WebSphere Process Server,右键选择 ‘ Start ’
部署 HelloWorldMediation
在 Server View 中,点击 WebSphere Process Server,右键选择‘ Add and remove project.. ’
只选择部署 HelloWorldMediation。不部署 HelloService,因为假设 HelloService 没有开发完成,需要被模拟。
指定具体被测组件和需要输入的数据
选择 HelloWorldMediation Module, 右键菜单 Test > Test Module
在打开的 HelloWorldMediation_test 界面中
指定被测的 component 是 HelloWorldMediationExport

Module > Component > Interface > Operation
WID 是这样在用户界面上能逐级粒度化指定被测功能的。
填入需要的数据
在 title 域填入 Mr
在 FirstName 域填入 Bill
在 LastName 域填入 Gates
此时如果直接点击界面上的(continue) 按钮执行该测试用例,会出异常。这是因为 HelloWorldMediationExport 使用到的 HelloService 没有运行在 server 上,需要被模拟。
模拟 HelloService, 为它新建一个名叫 emulHelloServiceProg 的模拟器
在打开的 HelloWorldMediation_Test 页面,点击 Configurations Tab。
点击 Component and Reference Emulators,
右键选择 Add > Component and Reference Emulator, 新建一个模拟器

在弹出的’New Component and Reference Eulator’的对话框中, 选择‘ Components ’radio button, 选择‘ HelloServiceImport ’check box,点击‘ Finish ’。
这样就指定了被模拟的对象是 HelloServiceImport 这个 Component。
WID 支持 Manual 和 Programmatic 两种方式对 HelloService 进行模拟。如果选择 Manual,测试用例执行过程中会停止在对 HelloService 的调用上,并弹出模拟界面等待用户手工输入模拟结果。但是下面我们示范的是 Programmatic 方式。

选择 ‘ Programmatic emulation ’项
点击’ New.. ’ ,在弹出的’ New Emulator ’对话框中输入 emulHelloServiceProg 给这段模拟 HellowService 的程序起名为 emulHelloServiceProg
接受所有默认设置, ‘ Next ’ >.. ‘ Next ’ > ’ Finish ’。完成后可以看到左侧的项目树上,TestClientPrj > Emulators 下新生成了一个 emulHelloServiceProg 节点

编码实现模拟器 emulHelloServiceProg
emulHelloServiceProg 程序模拟 HelloService, 实现 HelloService interface, setHello operation. 输入 name, 输出 ‘ emulated ’ +name;
点击上图右侧的 string getHello() 超链接
选择‘ Java snippet editor ’并点击 ‘ Define Emulation ’按钮
在 Java Editor 中
把 return null;
改为 return "emulated "+name;
Ctrl+s 保存结果。
开启模拟器,执行 HelloWorldMeidationExport 调测用例
在 HelloWorldMediation- test 页面, 点击 Events Tab, 点击界面上的绿色三角 continue按钮开始执行。
如果过程中弹出对话框,接受系统默认设置即可。

执行完成后,在用户界面直接可以看到执行结果输出为:
Emulated Mr Bill Gates
关闭模拟器 , 部署真正的 HelloService, 再次执行 HelloWorldMeidationExport
在 HelloWorldMeidation_Test 页面,点击 Configurations Tab。
选择左侧结构树上的 Componet and Reference Emulators > HelloServiceImport
选择右侧的’ Disable ’ Radio button
部署真正的 HelloService 应用
在 Servers View, 点击 WebSphere Process Server, 右键菜单选择 ‘ Add and Remove Projects.. ’ 添加上 HelloServiceApp.
确认 Server 上有两个应用,一个是 HelloServieApp,另外一个是 HelloWorldMediationApp.
在 HelloWorldMeidation_Test 页面,点击 Events tab,重新执行 HelloWorldMediation_Test
执行结束后,用户界面上可以看到执行结果是
Hello Mr Gill Gates.
保存历史数据
如果在 WID 中专门为调试建立一个名叫 testProject 的工程,( 我们将在下面的文章中讲述如何建立 testProject),执行结果文件,配置文件和数据文件都能被保存在 testProject 中。保存完成后项目树上 testProject 新增三个节点:

保存 execution trace (*.wbiexetrace 文件 )
直接 Ctrl+s 把 HelloWorldMediation_Test 文件保存到默认目录下。用户可以在将来多次重复执行该 execution tracey 以期望得到同样的结果,来验证 JEE 企业级应用系统功能稳定没有被修改破坏。
保存 configuration (*.testconfig 文件)
使用 programmatic emulator 来模拟 HelloService 是一种 configuration。不使用 emulator 又是另外一种 configuration。这些场景都被保存在 *.testconfig 文件中。
用户重新运行 execution trace 时,可以指定为它指派各种 configuration 进行配搭,比照运行结果。
在 HelloWorldMediation_Test 页面, 点击 Configurations Tab。
点击(save configuration)按钮把目前的配置场景命名保存为 configEmulHelloServiceProg 文件。保存 (save configuration) 按钮旁边就是导入 (load configuration) 按钮。
保存 data (*.objectpool 文件或者 *.xml 文件)
用户重新运行 execution trace 时,可以在 Data Pool 中挑选事先保存好的数据,避免手工重新输入数据,节省时间提高调试效率。
进一步使用 emulator
emulator 深入使用
Component Test Explorer 是 web 界面化的 TestClient 辅助工具。在 Server View 点击 WebSphere Process Server, 右键菜单 Launch > Component Test Explorer 可以开启这个工具。 使用 Component Test Explorer,能对 emulator 进行更加高级复杂的设置,例如添加触发规则集 rule set 等。
emulator 缺陷
programmatic emulator 的局限性是不支持复杂类型的输出。如果 operation 有多个 output,就无法直接使用 programmatic emulator。用户需要自编程封装多个 output。
前文介绍了如何利用 emulator 功能进行单个模块 HelloWorldMediation 的测试,这个章节我们将介绍利用 fine grain trace 功能对整个解决方案进行综合调试。
fine grain trace 功能允许用户对多个 component 中的调用路径、内部变量进行追踪,方便用户定位问题和解决问题。
还是以 Hello World Sample 为例阐述如何使用 fine grain trace 功能。如下图所示,sample中有这样两个 Module: HelloWorldProcess 和 HelloWorldMediation。我们在测试HelloWorldProcess Module 中的流程 HelloWorldProcess 时,可以通过 fine grain trace功能观察 HelloWorldProcess 和 HelloWorldMediation 两个 Module中的所有调用路径和相关变量值的变化。

演示分 3 步进行
选定 Trace 的范围
选定关注的变量
执行测试
选定 Trace 的范围
在测试开始之前,首先需要选定需要关心的 trace 的范围。以测试 HelloWorldProcess 为例,流程除了会调用同一 Module 内的模块,还会调用到 HelloWorldMediation Module 中的相关模块,所以我们需要将 HelloWorldMediation module 添加到测试配置中。
首先,在 Project Tree 中选中 HelloWorldProcesss Module, 选择右键菜单 Test > Test Module
并指定具体被测组件和需要输入的数据 , 选择的被测 component 是’ HelloWorldProcess ’
输入的数据是 : Gender: Male.
然后点击 Configurations Tab, 选择添加测试 Module.

接着 , 在添加新的测试 Module 的窗口中选择 HelloWorldMediation 和 HelloWorldProcess Module, 点击 Finish 结束。
我们会得到下图所示的 Fine-Grained Traces 配置 , 存在于两个不同 Module 中的两个模块 (HelloWorldProcess 和 HelloWorldMediation) 的内部调用路径及变量都可以在测试中得到观察。
添加完 Module 后,如果 Module 下 Fine-Grained Traces 是空的,我们可以通过右键菜单添加 Fine-Grained Trace

选定关注的变量
在选择好合适的 trace 范围后,我们还可以配置该范围中的模块在调用时,哪些变量会被观察。
选中 fine-grained traces 中配置的“HelloWorldProcess”模块后,窗口右边会出现变量的选择列表,点击“Select All”,选中所有的变量,从而在测试时观察所有的变量的值的变化。

执行测试
同样,切换回’ Event ’ Tab,点击界面上的按钮,启动测试。
然后登陆 BPC explorer, 执行 Human Task “HelloWorldTask”.
输入
firstName: john
lastName: green
并提交.
执行结束后,我们可以看到非常清晰的 trace 信息 , 其中包含三个 fine-grained traces 部分 , 第一个是关于 HelloWorldProcess 内部的执行路径信息,通过点击内部元素可以观察每个执行阶段内部变量的相关值。如下图,点击“AssignM”,可以从右边窗口中观察到流程执行到该节点 时相关变量的值。

另外,后面两个 fine-grained traces 部分展开后,能够分别观察到 HelloWorldMediation 模块在请求阶段和返回阶段的内部执行路径。
前文介绍了 WID TestClient 的 emulator 模拟器功能和 fine grain trace 功能。这些功能都是用以辅助单个测试用例的执行。
最后我们在 WID 中新建立一个 testProject, 对所有测试用例进行有粒度的打包封装,批量运行。
演示分 3 步进行
建立 Test Suite 和 Test case
新建多个 Test Data Table
批量执行测试用例,比较结果,保存记录
建立 Test Project, Test Suite 和 Test case
运行 WID
File > New > Others > Business Integration > Component Test Project
输入工程名 myTestProject, 点击‘ Finish ’
右键选择 myTestProject New > Component Test Suite,
输入 myTestSuite1, 点击 ‘ Finish ’
在打开的 myTestSuite1 编辑器页面中 , 点击 Test Cases Tab, 点击 按钮添加 Testcase

在弹出的 Select a test pattern 对话框中,选择 Operation-level testing, 选择‘ Next ’
在弹出的 Select the Operations to be Tested 对话框中,
选择 HelloWorldMediation > HelloWorldMediation > HelloWorld > callHello 作为被测对象。 目前只指定一个被测对象 callHello,也可以批量指定被测对象。

点击完成后可以看到 test_callHello 被添加到 myTestSuite 的 Test Cases 列表中了。
建立 Test Data Table
在 Test Data Table 页面中添加定制 myDataTable1
菜单 Window > Show View > Other > Test > Test Data Table
在 Test Data Table View 中,点击右上方的 ‘ Add Variation ’
在弹出的 Add a Test Variation 对话框中输入自定义的数据表名称 myDataTable1
编辑 myDataTable1
输入如下 input 和 expected output.
在 In 列, 输入
‘ Mr ’
‘ Bill ’
‘ Gates ’
在 Expected 列, 输入:‘ Hello Mr Bill Gates ’
Ctrl+s 保存。
保存完成后,点击 test_callHello, 查看其右侧 Detailed Properties 域, 可以看到 myDataTable1 被添加到 Test vaiations 列表中了。

可以为 test case 编辑配置多个 data table.
执行测试用例,比较结果,保存记录
在项目树上点击 myTestProject > Test Suites > myTestSuite, 右键选择 Run Test
将会打开‘ Run myTestSuite ’ 页面
点击界面上的按钮,启动测试。
需要指出的是 myTestProject 要部署在 Server 上运行。在弹出的 Deployment Location 对话框中点击 Finish,选择默认安装的 WID UTE 即 WebSphere Process Server.
执行过程中使用了预定义的两套数据, Default 和 myDataTable1。
执行结束后,用户界面显示两组成功执行。

Ctrl+S 保存执行结果
在弹出的’ Save Test Trace ’对话框中输入名称 myTestTrace_test_callHello
把执行结果保存为 myTestTrace_test_callHello
保存完成后项目树上新增节点

用户可以在将来多次重复执行这个名为 myTestTrace_test_callHello 的 execution trace。以期望得到同样的结果,验证 JEE 企业级应用系统功能稳定没有被修改破坏。
本文附件 WID_TestClient_Guide.zip 是文中所演示的步骤执行结果。
打开 WID
File > Import > Other > Project Intechange
From zip file 指向附件工程 WID_TestClient_Guide.zip 即可。
回页首
本文演示了如何使用 WID( WebSphere Integration Developer) 集成测试客户端TestClient 调试基于 SOA 架构的 JEE 企业级应用。主要讲述了 模拟组件接口的 emulator,逐级细化调试的 finegrain trace,和批量组织测试用例的 testProject。
WebSphere Integration Developer integration test client 文档 :从这里您可以了解到如何使用 WID 的 Test Client 工具来进行 Java 或者 SOA 应用的测试。
充分利用 WebSphere Integration Developer 集成测试客户端:本文介绍您可以执行的各种功能、技巧和诀窍,帮助您从 IBM? WebSphere? Integration Developer 中的集成测试客户端获取更多知识,并向您介绍如何避免一些常见错误。
WebSphere Integration Developer 指导教程,第 1 部分:本文是通过 IBM WebSphere Integration Developer 进行应用集成的面向服务的方法系列探索中的第一部分。本文对 WebSphere Integration Developer 及其主要组件和概念进行了概述。
WebSphere BPM 专栏:为您提供最新的关于 业务流程管理方面的技术资源。
WebSphere Process Server 产品专题:这里为您总结了和 WPS 相关的资源,包括技术文章、试用版下载、最新动态等。
developerWorks WebSphere 专区 : 针对使用 WebSphere 产品的开发人员的技术信息和资源。developerWorks WebSphere 提供产品下载、how-to 信息、支持资源以及一个免费技术库,该技术库包含 2000 多篇技术文章、教程、最佳实践、IBM 红皮书和在线产品手册。无论您是初学者、专家还是介于二者之间,您都能发现使用基于开源标准的 WebSphere 软件平台构建企业级 SOA 解决方案所需的信息和资源。
叶林,现从事 WebSphere Business Modeler 的测试工作。专注于商业建模,流程分析方向。
李伟,来自 Websphere BPM Tooling 组,从事 BPM 相关产品的功能测试、系统测试、自动化测试。
时玉雪, WID自动化测试工程师,喜欢读书和园艺。