FeaturesPluginsDocs & SupportCommunityPartners

BPEL 设计器开发人员指南

测试 BPEL 流程

对部署的业务流程应用程序进行测试时,涉及使用作为远程合作伙伴服务的测试用例,这些服务会将 SOAP 消息发送到 BPEL 服务引擎运行时。

简言之,交互流程如下:BPEL 服务引擎运行时接收 SOAP 消息,创建一个 BPEL 流程实例并开始执行该实例。一个 BPEL 流程可以包含多个运行实例。BPEL 服务引擎运行时接收消息,并使用关联将其传送到相应的流程实例。如果尚未建立实例,则新建实例。

要测试和运行部署的业务流程应用程序,需配置测试用例,作为远程合作伙伴服务,将 SOAP 消息发送到 BPEL 服务引擎运行时。

创建和运行测试用例

要获得测试结果,必须执行以下操作:

  1. 添加测试用例并将其绑定到 BPEL 操作
  2. 设置测试属性
  3. 定制测试输入
  4. 运行测试程序

在执行本节上述所有步骤之前,假定已经完成以下操作:

添加/绑定测试用例

添加测试用例并将其绑定到 BPEL 操作:

  1. 在 IDE 的“项目”窗口中,打开复合应用程序项目,显示其 Test 文件夹。
  2. 右键单击 Test,然后选择弹出式菜单项“新建测试用例”。

    启动“新建测试用例”向导。

  3. 在“请输入测试用例名称”步骤中,输入测试用例名称,然后单击“下一步”按钮。
  4. 在“选择 WSDL 文档”步骤中,打开 BPEL 模块项目,选择包含要测试的操作的 .wsdl 文件,然后单击“下一步”按钮。
  5. 在下一步中,选择要测试的操作,单击“完成”按钮。

    在项目树中的 Test 文件夹下新建一个文件夹(以大写字母 T 的形式),其包含两个文件:Input.xml 和 Output.xml。Input.xml and Output.xml.


注意:如果在“文件”窗口中查看该测试用例,会看到另一个文件 Concurrent.properties

设置测试属性

设置测试属性:

  1. 在“项目”窗口的 Composite Application 项目节点下面,右键单击测试用例节点,从弹出菜单中选择“属性”。
  2. 请按照以下方式设置测试用例的属性:
    描述:string

    用户输入的文本可帮助用户了解该测试的相关信息。

    目标:URL( .wsdl 文件的 <soap:address location="THIS"> 标记)

    标识要测试的 Web 服务的位置。

    SoapAction(默认值:空)

    输入文件(只读;由系统生成)

    输入文件名称。该文件包含测试用例的输入数据。

    输出文件(只读;由系统生成)

    输出文件名称。该文件包含测试用例的输出数据。

    并发线程:integer;默认值为 1

    每个线程可以多次调用测试用例(请参阅以下属性)。因此,如果 conc=2 和 inv=3,那么将运行 6 次测试用例(两个线程,每个线程运行 3 次)。

    每个线程调用测试用例的次数:integer;默认值为 1

    每个线程调用测试用例的次数。

    测试超时(秒):integer;默认值为 30

    每个线程必须完成的时间。如果线程没有在分配时间内完成,则抛出异常。

    计算吞吐量:boolean

    如果选中此复选框,则会计算吞吐量的统计信息。示例:假如在测试中指定了2个线程,每个线程调用3次测试用例,并且假如15秒调用了 6 次测试用例,那么统计信息将报告调用一次测试用例所花费的时间平均为 2.5 秒。

    比较类型:下拉列表包括以下选项:
    • identical:将输出和实际输出视为字符流。
    • binary:将输出和实际输出视为字节流。
    • equals:将输出和实际输出视为 XML 文档。
    功能状态:下拉列表包括以下选项:

    • progress:将测试完成标记为 "success",不考虑实际结果。
    • done:记录测试的实际结果。

定制测试输入

定制测试输入:

  1. 在“项目”窗口中,展开 Test 节点和表示特定测试用例的节点。
  2. 右键单击 Input.xml,然后单击“编辑”选项。
  3. 根据需要修改内容。例如,无论在何处看到 <value>?string?</value> ,在 ?string? 内单击,并并将其替换为任意长度的字符串。但是,在这些替换字符串内,不要包含字符 <(小于号)或 &(与号),除非在 XML 语义中使用这些字符。
  4. 如果满意,请单击“保存”按钮。
  5. 右键单击 Output.xml,然后单击“编辑”,检查内容:
    • 它是一个空文件。这是一种特殊状态,在测试运行时触发特殊操作。
    • 每次运行测试时,将当前输出和 Output.xml 的内容进行比较。如果检测到任何不同,将保存在测试用例文件夹下的 Actual_yymmddhhmmss .xml 文件中。但在特殊情况下,当 Output.xml 为空时,输出内容会写入到 Output.xml 中。
    • 在首次运行后的每次运行中(假定 Output.xml 不再为空),将会保留其内容。换句话说,新结果不会覆盖以前的输出结果。

运行测试用例

运行单个测试用例:

  • 在“项目”窗口,展开 Composite Application 项目 > Test ,右键单击特定测试用例的节点,从弹出菜单中选择“运行”。

运行项目中的所有测试用例:

  • 右键单击 Composite Application 项目节点,从弹出菜单中选择“测试项目”。

查看测试用例结果

  • 第一次运行时正确地报告:测试失败。因为输出结果与空的 Output.xml 文件不匹配,该文件的空内容将被替换为第一次运行的输出结果。
  • 在 JUnit 测试结果窗口中显示测试结果,该窗口在运行测试用例时会自动打开。
  • 如果在不改变输入的情况下再次运行测试,则第二次和后续运行都会报告测试成功,因为输出结果与 Output.xml 的内容相匹配。
  • 如果改变 Input.xml 中的值并重新运行测试,那么:
    • 如果将 “feature-status” 属性设置为 progress,那么即使出现不匹配,也会指示测试成功。
    • 如果将 “feature-status” 属性设置为 done,那么出现不匹配时将指示测试失败。
  • 如果右键单击测试用例节点,在弹出菜单中单击“比较”,窗口将显示最新输出和 Output.xml 内容之间的不同。

调试 BPEL 流程

调试 BPEL 流程和调试 Java 应用程序遵循相同的一般原则。调试 BPEL 流程通常采用以下方法:在源代码中设置断点,然后在调试会话中分步执行流程。BPEL 调试器将显示 BPEL 流程的执行,并可以查看和更改变量,监控执行表达式的结果,以及使用故障断点监控抛出故障之前的变量状态。

调试 BPEL 流程的步骤

调试 BPEL 流程的主要步骤是:

  1. 确认启动了 GlassFish 应用服务器。
  2. 创建测试用例。

    对于示例流程,测试用例是自动创建的;对于新项目,则需要创建至少一个测试用例。

  3. 在“源”视图或“设计”视图中打开 BPEL 流程文件。
  4. 在代码或关系图中设置断点。(可选)在流程中为 XPath 表达式添加监视,或者添加故障的断点。
  5. 启动调试会话。观察“BPEL 调试器控制台”窗口,确认调试会话已启动。
  6. 在调试会话内,运行一个或几个测试用例。
  7. 在“设计”视图的关系图或“BPEL流程执行”窗口中查看 BPEL 流程的执行情况,在“BPEL 流程实例”窗口中查看 BPEL 流程实例的运行情况。
  8. 当实例在断点处停止时,逐步执行代码或关系图,在“局部变量”窗口中检查变量值,或在“监视”窗口中观察 XPath 表达式的值。
  9. 完成调试会话。

启动和完成 BPEL 调试会话

在将 BPEL 调试器连接至 BPEL 服务引擎时,会启动调试会话。在指定时间内使用 BPEL 服务引擎上只能运行一个调试会话。

调试会话启动后,可以分步执行流程实例,监视在“局部变量”“监视”窗口中的 BPEL 变量值和 XPath 表达式值。可以在“设计”视图关系图区域监控调试器会话内 BPEL 流程的执行情况。正在执行的活动作为当前的执行位置在关系图中高亮显示。“BPEL 流程执行” 窗口也显示 BPEL 流程的执行情况。

准备调试环境:

  1. 在“服务”窗口中,确保 GlassFish V2 应用服务器正在运行。如果应用服务器包含子节点,且其标有绿色三角形,表明应用服务器正在运行。

    如果服务器未启动,右键单击它并从弹出菜单中选择“启动”。有关如何启动应用服务器的详细信息,请参阅 BPEL 服务引擎 部分。


    应用服务器正在运行
  2. 在 IDE 的“源”视图或“设计”视图中,打开 BPEL 流程。
  3. 在 BPEL 流程中设置断点。
    • 要在“源”视图中设置断点,请在要设置断点的行旁边单击鼠标左键。在“源”视图中设置断点
      单击查看大图
    • 要在关系图中设置断点,请切换到“设计”视图,右键单击元素,然后从弹出式菜单中选择“切换断点”。在设置了断点的元素上方将显示一个红色方块。有断点标记的关系图元素
    • “导航器 BPEL 逻辑视图”中的元素也可以使用“切换断点”弹出式菜单命令。对于设置了断点的元素,“导航器”将显示一个小红色方框(ReceiveItinerary):设置了断点的导航器元素
  4. (可选)可以对 XPath 表达式添加监视。要添加监视,请复制要监视的 XPath 表达式,在主菜单中选择“运行”>“添加监视”选项,然后将该表达式粘贴到“监视表达式”字段中。单击“确定”按钮。

    注意:也可以添加代码中不存在但从调试角度来看非常有价值的 XPath 表达式。


    在源代码中设置断点

在 BPEL 引擎上启动和完成调试会话:

  • 在“项目”窗口中,右键单击要调试的复合应用程序节点,从弹出式菜单中选择“调试项目(BPEL)”。

    IDE 将在 BPEL 服务引擎上建立调试会话。观察“BPEL 调试器控制台”窗口进行确认。连接可能需要一段时间才能完成。当连接成功完成时,在“会话””窗口中包含新会话,并且在“BPEL 调试器控制台”中将显示以下消息:

    11:35:17 Connecting to localhost:3343
    11:36:19 Debug session started

    注意:“调试项目(BPEL)”命令将执行以下操作:

    • 支持使用 BPEL 服务引擎进行调试(将 BPEL 服务引擎的 DebugEnabled 属性设置为 true)。
    • 编译复合应用程序项目和添加到该项目中的所有 JBI 模块。
    • 将复合应用程序项目部署到 BPEL 服务引擎。
    • 通过将 BPEL 调试器连接到 BPEL 服务引擎来启动调试会话。

    因此,无论何时启动调试会话,都可以确定在BPEL 服务引擎中部署了 BPEL 流程的最新版本。

    现在,可以运行测试用例并监控 BPEL 流程的执行情况,直到它停止或到达断点。当流程执行时,在关系图和“BPEL流程执行窗口”中都显示当前的上下文。

    如果存在几个调试会话(您可能同时运行了一个 Java 调试会话),且要改变当前会话,请在“会话”窗口中双击该会话的名称。或者,右键单击要设置为当前会话的会话,然后选择“设置为当前会话”选项。此会话将成为当前会话,同时“BPEL 流程实例”、“监视”和“局部变量”窗口也改为显示与新当前会话有关的数据。

    当要完成调试会话时,可以打开要停止的会话的弹出菜单,在“会话”窗口选择“完成”,或者选择工具栏上的“完成调试器会话”图标。在“BPEL 调试器控制台”中将显示调试会话已完成的消息。

  • 要结束所有的调试会话,请在“会话”窗口中右键单击任何会话,然后选择“全部完成”。

使用断点调试 BPEL 流程

断点用于命令 BPEL 调试器在 BPEL 流程的指定地方停止执行。当 BPEL 流程到达断点时,将暂停执行,此时可以进入代码,“BPEL 流程实例”窗口中改变当前流程,在“BPEL 流程执行” 窗口和“设计”视图中跟踪流程实例的执行情况,在“局部变量”窗口中检查变量值,在“合作伙伴链接”窗口中检查合作伙伴链接,在“监视” 窗口中查看 XPath 表达式的值。

在抛出错误之前,也可以使用故障断点检查变量值。

要查看和组织当前在 IDE 中设置的所有断点,请选择“窗口”>“调试”> “断点”(Alt-Shift-5) ,打开“断点”窗口。可以看到每个断点所在的文件名称和所在的行。在“断点”窗口,可以通过选择或者删除“Enable”栏中的复选框来启用或者禁用断点。

在 BPEL 流程中设置断点:

  1. 在 IDE 的“源”视图或“设计”视图中,打开 BPEL 流程。
  2. 执行以下操作之一:
    • 在“源”视图中,单击要插入断点的行的左边区域。
    • 在“设计”视图中,右键单击要插入断点的元素,选择“切换断点”(Ctrl-F8)。

    在“设计”视图中,设置了断点的元素顶部将显示一个小红色方块。在“源”视图中,设置了断点的代码行的左边区域将显示一个红色方块。

  • 还有一种方法,可以在“导航器”窗口的“BPEL 逻辑”视图设置和删除断点,具体方法是在弹出菜单中选择“切换断点”。在“导航器”窗口中设置了断点的元素附近显示有一个红色方块。

一旦项目运行到断点处将暂停执行。可以使用“运行”菜单命令或者工具栏中的按钮管理后面的执行情况。

在调试会话中可以使用以下命令:

要使用这些命令,必须启动调试会话和运行测试用例。

  • Pause。 一旦用户激活这个动作,流程将继续执行直到到达可以停止的第一个元素。如果没有当前流程实例,调试器将等待任意流程实例的第一个执行事件。
  • Continue (Ctrl-F5)。 当流程到达断点或者暂停时,可以使用 Continue 命令。该动作可以使当前流程实例继续运行,直至遇到下一个断点或者实例执行结束为止。实例状态将变为“正在运行”。
  • Step Into (F7)。执行下一个 BPEL 活动。使用此命令时,当前行的指示符将向前移动,关系图中将高亮显示当前位置,并且“BPEL 调试”窗口也将相应地改变内容。如果当前活动中有任何封闭元素,流程将执行第一个封闭元素。有时在关系图上不可见,但是在“BPEL 流程执行”窗口中可以看到。例如,如果“赋值”活动内包含 <copy> 元素,那么在赋值活动中,流程将执行 Copy。
  • Step Over (F8)。 执行与当前活动相同级别的下一个 BPEL 活动。如果当前活动有任何封闭元素,它们将会一起执行,而不会暂停。
  • Step Out (Ctrl-F7)。执行比当前流程更高级别的活动。例如,“赋值”活动内部有几个 Copy 元素。如果 Copy 元素中的一个元素是当前活动,那么执行 Step Out 将直接移动到“赋值”级别的下一个元素,而无需执行全部 Copy 元素。
  • 运行到光标(F4)。运行 BPEL 流程到“导航器”窗口(BPEL 逻辑视图)或关系图(“设计”视图)中的所选位置,或者在“源”视图中的光标位置。当流程实例到达光标位置时,将暂停运行。

要在 BPEL 流程中删除断点,请执行以下操作之一:

  • 在“源”视图中,单击包含断点行的左边区域。
  • 在“断点”窗口,右键单击要删除的断点,选择“删除”选项。在弹出菜单中选择“删除全部”将删除在 IDE 中当前设置的所有断点。
  • 在“设计”视图,右键单击标有红色断点的元素,在弹出菜单中选择“切换断点选项”。

要禁用断点,请执行以下操作之一:

  • 在关系图中,单击指示断点的红色方块标记。这样只是禁用了断点,而没有完全删除断点。
  • 在“断点”窗口,清除要禁用断点的“Enabled ”复选框。

对断点执行组操作:

工具栏中包含三个对断点执行组操作的按钮。

  • 启用所选元素的断点。 启用所选元素和其封闭元素的全部断点
  • 禁用所选元素的断点。 禁用所选元素和其封闭元素的全部断点
  • 删除所选元素的断点。 删除所选元素和其封闭元素的全部断点

    如果在关系图中没有选中任何元素,流程元素将认为选择是为了操作。

监控 BPEL 流程的执行情况

当运行流程到达断点时,“设计”视图将高亮显示调试器的当前位置,并使用颜色区分 BPEL 活动的不同状态。在流程执行时,关系图中活动的颜色和图标都会实时更新以反映执行的进度。

在关系图中,使用以下符号:

  • 绿色(发光)此断点用于设置到达的活动。
  • 灰色(淡出效果)从未执行过的活动。
  • 绿色三角。正在执行的活动。
  • 蓝色三角。已经成功完成的活动。
在关系图中监控调试
单击查看大图

还可以在“BPEL 流程执行” 窗口监控当前 BPEL 流程实例的执行情况(如下所示)。

BPEL 调试器窗口

当调试会话启动时,IDE 将在编辑区域下面显示调试器窗口。“会话”、“BPEL 流程实例”、“BPEL 变量”和“BPEL 流程执行”窗口均包含在当前调试会话中运行的 BPEL 流程的相关信息。

如果未显示调试器窗口,请选择“窗口”>“调试”> “BPEL”>“窗口名称”(例如,“窗口”>“调试”> “BPEL”>“BPEL 变量”)。

“断点”和“监视”是标准的 IDE 调试器窗口。它们显示了在 IDE 中设置的所有断点和监视。

“会话”窗口

“会话”窗口列出了当前打开的所有调试会话,包括 Java 和 BPEL 调试会话。对于 BPEL 服务引擎,只能启动一个会话。但是,“会话”窗口还显示了其他打开的调试会话,如 Java 会话。在所有打开的调试会话中,只能有一个调试会话是当前会话,并且以粗体显示。其他调试器窗口,如“BPEL 流程实例”、“BPEL 流程执行”和“BPEL 变量”,仅显示与当前调试会话相关的数据。

为每个会话提供的信息包括:

  • 名称。会话名称。
  • 状态。会话的当前状态。会话可能正在启动或正在运行。
  • 语言。在此会话中调试的应用程序语言。

可以在弹出式菜单中对会话执行以下操作:

  • 设置为当前会话。将选定会话设置为当前会话。
  • 完成。完成选定会话。
  • 全部完成。完成所有调试会话。
“会话”窗口

“BPEL 流程实例”窗口

“BPEL 流程实例”窗口列出了在 BPEL 服务引擎上部署的所有 BPEL 流程实例和它们的当前运行实例。对于每个流程实例的关联设置和故障也作为子结点列了出来。

如果当前会话不是 BPEL 调试器会话,则此窗口为空。当在 BPEL 服务引擎上启动调试会话,或者 BPEL 调试器会话是当前会话时,会填充“BPEL 流程实例”窗口。

对于每个流程实例,显示的信息包括实例名称、唯一的实例 ID 和它的状态。流程实例可以处于以下某种状态:

  • 正在运行。实例当前正在 BPEL 引擎上执行。
  • 暂停。由于某种原因实例暂停执行。例如,流程实例执行到一个断点。
  • 未知。此实例状态是未知的。

当前流程实例以粗体显示。当流程实例执行到断点或者手动将其设置为当前流程实例时,它称为当前流程实例。

要使流程实例成为当前流程实例,请执行以下操作之一:

  • 双击该流程实例。
  • 右键单击该流程实例,从弹出菜单中选择“设置为当前流程实例”选项。

要终止流程实例,请执行以下操作:

  • 右键单击该流程实例,从弹出菜单中选择“终止”选项。
    将终止该流程实例并从列表中删除。

关联设置和故障信息

对于关联设置节点,在流程执行期间出现的信息。

对于每个流程实例的关联设置,显示了它包括的属性列表。显示了这些属性的类型和值信息。查找关于关联设置、属性和属性别名的更多信息,请参阅 理解关联。

在流程执行期间,还会填充故障节点。当在流程中抛出一个故障时,将添加一个该故障名称的子节点。如果有的话,提供故障数据。

“BPEL 流程实例”窗口

“局部变量”窗口

“局部变量”窗口显示局部变量结构,以及当前流程实例和当前位置的值。当前位置是指当前流程实例暂停时所在的位置。当改变当前流程实例时,“局部变量”窗口中的记录将会更新,反映新的当前流程实例和新的当前位置。

局部变量显示为树型结构。对于每个变量,提供的信息包括变量名称和值。

在“局部变量”窗口中,可以执行以下操作:

  • 查看变量结构。方法是展开树中的变量节点。
  • 查看和编辑变量值。要编辑变量值,单击省略号按钮 (...)并在编辑器窗口中输入新值。
  • 查看和修改变量的XML数据方法是单击变量的省略号(...) 按钮,在“值”栏中 XML 数据输入项。
“BPEL 变量”窗口

“监视”窗口

“监视”窗口显示要监视的 XPath 表达式的列表。可以在调试会话之前或期间显式地添加监视。“监视”窗口显示表达式及其值。根据流程逻辑,随着流程的执行,表达式的值可能改变。

要在 BPEL 流程中设置监视,请执行以下操作:

  1. (可选)确保“监视”窗口可见,否则,选择“窗口”>“调试”>“监视”(Alt-Shift-2) 来打开“监视”窗口。
  2. 如果要在 BPEL 流程中输入 XPath 表达式,请使用以下一种方法复制它:
    • 在“源”视图,复制要监视的 XPath 表达式。XPath 表达式位于 <condition>标签内。
    • 在“设计”视图,选择包含表达式的元素,在“属性”窗口的“条件”行上赋值表达式。
  3. 在“监视”窗口内右键单击,选择“新建监视”。
  4. 在“新建监视”对话框中的“监视表达式”字段,执行以下操作:
    • 粘贴已经复制的 XPath 表达式。
    • 输入符合 XPath 1.1 规则的任何有效表达式。
  5. (可选)如果需要,添加更多的监视。
  6. 确保监视会话正在运行,且在执行测试。
  7. 当流程实例执行到断点,变成暂停状态时,在“监视”窗口的“值”栏中检查被监视的表达式值。
“监视”窗口

“BPEL 流程执行”窗口

“BPEL 流程执行”窗口将显示 BPEL 调试器中的当前 BPEL 流程的执行进度。当改变当前流程实例时,将更新“BPEL 流程执行”窗口中的流程树,以反映新的当前流程实例和新的当前位置。

在“BPEL流程执行”窗口中,显示 BPEL 活动的状态用到以下颜色。

  • 绿色。活动此刻正在执行。
  • 灰色。活动尚未执行。
  • 黑色。活动已经执行。

“BPEL 流程执行”窗口显示以下信息:

  • 名称。活动名称。
  • 线程。 执行活动的线程。对于尚未执行的节点,不提供线程信息。
  • 行。包含文件路径和文件中活动的行号。
  • XPath。 显示指向活动的 XPath 表达式。

“BPEL 流程执行”窗口


注意:在“BPEL流程执行”窗口中,只能查看执行 BPEL 流程的执行进度。在此窗口中不能执行任何操作。


“BPEL 合作伙伴链接”窗口

“BPEL 合作伙伴链接”窗口列出了在 BPEL 流程中定义的所有合作伙伴链接。

对于合作伙伴链接,提供的信息包括:

  • 角色
  • 合作伙伴角色(只限于两种方法操作)
  • 断点。只可以在合作伙伴链接动态地定义端点信息。有关更多信息,请参阅 动态寻址

“合作伙伴链接”窗口

BPEL 调试器控制台消息

在 BPEL 调试器控制台中将显示以下消息:

Connecting to <host>:<port>

调试器正在尝试连接 BPEL 服务引擎。

Debug session started

调试器已成功连接 BPEL 服务引擎,并且已启动调试会话。

Unable to start a debug session :Unable to connect to <host>:<port> :Connection timed out:connect

如果显示此消息,请确保:

  • GlassFish V2 应用服务器正在运行。
  • BPEL 服务引擎已启动。
  • BPEL 服务引擎的 DebugEnabled 属性设置为 true
  • 主机名是运行要建立连接的 GlassFish V2 应用服务器的计算机的主机名(默认为 localhost)。
  • 端口值与要建立连接的 BPEL 服务引擎的 DebugPort 属性相同(默认为 3343)。

Unable to start a debug session :Already connected to <host>:<port>

已在运行一个与此特殊服务引擎连接的调试会话。

Debug session terminated :Target disconnected

调试器与服务器的连接中断。请检查服务器是否正在运行以及网络是否正常。

Stop connecting

在调试会话进行连接时显式地将其终止。

Debug session finished

在调试会话运行时显式地将其终止。

返回顶部


Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Virtual Box - full virtualizer  Open ESB - The Open Enterprise Service Bus Powered by