本系列教程的第 3 部分将讨论有效而可靠的单元测试,学习如何将测试框架用于需要人工交互的测试流程。能够包括人工任务意味着您可以真正地执行对 Business Process Execution Language (BPEL) 流程和人员查询的完整测试。
在本系列教程的前两篇文章中,我们介绍了对 Service Component Architecture (SCA) 组件执行重复测试的方法,其中包括使用 Business Process Execution Language (BPEL) 实现业务流程的组件。 我们的方法利用了 JUnit 开放源代码框架和 Cactus(其服务器端扩展)。在本部分中,我们将介绍测试使用人工任务的业务流程的方法。首先介绍包含内联人工任务的简单业务流程,然后在测试此流程 时列出前两篇文章中介绍的适用技术。所有这些需要设置一种场景来演示如何处理人工任务,我们的方法是先前技术的扩展。
|
本文与前两篇文章一个重要相同点是通过把有效负载和预期结果外化到 XML 文件来简化测试的创建。我们将通过分析图 1 所示的简单流程来说明此情况。
图 1. 带有内联人工任务的 BPEL 流程
此流程表示一个简化的档案检索流程,该流程在收到检索请求并得到确认后开始,并通过调用通知服务完成。实际的检索工作需要人工干预,这表示为 Retrieve 人工任务;我们可以设想此人工任务可能需要在长期存储库中对纸质文件进行物理检索,或需要从磁带库中装入磁带。如何处理此人工任务是本文的重点内容——但是,在了解这些人工任务之前,让我们先总体了解一下测试此流程的方法。
我们的测试需要使用各种不同的输入值启动流程,然后根据验证和人工任务的结果确认使用适当的值完成了通知。我们的测试计划包括表 1 所示的项。
表 1. 示例测试计划
测试 ID | 输入请求 | 任务 | 通知结果 |
---|---|---|---|
1 | 有效请求 | 人工任务成功 | 成功的通知 |
2 | 有效请求 | 人工任务报告检索不可能 | 失败的通知和原因 |
3 | 无效请求 | 无人工任务 | 验证失败的通知 |
前两篇文章介绍了定义输入请求数据和验证预期通知请求的一些技术。让我们对这些技术简单地总结一下。
图 2 显示了启动 Archive Retrieval 流程的测试规范;使用 InitiationRequest.xml 有效负载文件中定义的有效负载调用 initiateRetrieval 方法。
图 2. 示例测试规范
我们可以创建此请求的变体来执行测试计划中定义的每个测试。
BPEL 流程将通过调用外部服务 notifyCustomer 完成。此流程成功的一个主要条件是将预期值提交到此服务;对于某些测试,我们希望看到有效负载指示成功的检索,而对于其他测试,我们希望看到有效负载指示 特定的失败条件。模拟对象用于验证预期值正在生成。我们将创建提供 notifyCustomer 方法的 Customer Communication 组件实现。模拟对象的一个额外功能是控制器接口,它使测试框架能够查询是否使用预期数据值调用了模拟对象。在图 3 显示的测试模块的组装关系图中,您可以看到,模拟控制器和档案检索接口是作为独立引用提供的,以供我们测试使用。然后我们可以创建测试规范,如图 4 所示。
图 3. JUnit 模块组装
图 4. 模拟服务调用确认
该测试包含模拟对象从业务流程接收的预期通知数据的有效负载;仅当业务流程生成此预期数据时,整个测试才能成功。
图 5 显示了我们介绍的测试规范、流程和模拟对象之间的关系。还突出显示了其余的问题:人工任务。
图 5. 测试和模拟对象
若要运行测试,则需要启动业务流程,人工任务将在 Retrieve 步骤生成,并且不再需要执行其他步骤。我们需要声明和完成 人工任务,以便流程继续到 notifyCustomer,因此,需要为 CheckNotification 步骤准备 MockCustomerCommunication 对象。在本文接下来的部分中,我们将介绍声明和完成人工任务的技术。
本文提供的下载文件中包括 Project Interchange 文件中的一组项目。此文件包括以下项目:
表 2. 要导入的项目
项目 | 类型 | 内容 |
---|---|---|
L_Archive | SCA 库 | 档案应用程序组件的接口。作为应用程序的一部分提供,用于 JUnit 测试。 |
MP_ArchiveRetrieval | SCA 模块 | 档案应用程序流程模块。包含我们要测试的 BPEL 流程。 |
J_ScaUtilities | Java 库 | 应用程序和测试都需要使用的工具。 |
LT_ScaTest | SCA 库 | 单元测试和模拟对象使用的接口,不用于应用程序。 |
LT_ScaJunitTest | SCA 库 | JUnit SCA 测试执行代码。仅供 JUnit 测试使用。 |
MT_TestArchiveRetrieval | SCA 模块 | 提供 JUnit 测试的模块 |
MT_TestArchiveRetrievalJUnitWeb | J2EE Web 项目 | JUnit 测试代码、测试定义和有效负载数据,MT_TestArchiveRetrieval 的一部分。 |
MT_MockCustomerCommunication | SCA 模块 | 模拟服务的实现,该服务将发送到检索请求结果的客户通知。 |
将这些项目导入到 WebSphere® Integration Developer,并在本文的后续内容中继续对它们进行检查(假设您运行该测试并使用 Business Process Explorer 探索其效果)。
使用人工任务需要您启用 WebSphere 安全性,这样 WebSphere Process Server 可以标识不同的人工任务,从而使人工任务能够正确分配。如果您还没有启用 WebSphere 安全性,并希望完成这些示例,那么请按照下面在测试环境中启用安全性部分中的描述启用安全性。如果已启用了安全性,那么您需要为测试执行提供合适的用户;该部分中还描述了一组适当的用户,本文提供的下载资料中包括示例 Custom Registry 文件、archiveUsers.props 和 archiveGroups.props。
启动 WebSphere Integration Developer 测试服务