FeaturesPluginsDocs & SupportCommunityPartners

BPEL 设计器开发人员指南:测试和调试 BPEL 流程

目录

本页面内容适用于 NetBeans 6.0 IDE

BPEL 设计器开发人员指南

测试 BPEL 流程

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

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

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

创建并运行测试用例

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

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

在执行本部分中的上述所有步骤之前,假定您已经完成了下面的操作:

  • 创建了一个包含 WSDL 文件的 BPEL 模块项目,该文件用于对要测试的操作进行编码。
  • 成功生成了 BPEL 模块项目
  • 已将 BPEL 模块项目作为 JBI 模块,添加到复合应用程序项目中。

添加/绑定测试用例

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

  1. 在 IDE 的“项目”选项卡中,打开复合应用程序项目以显示其“测试”文件夹。
  2. 右键单击“测试”,然后选择弹出菜单项“新建测试用例”。
    这将启动“新建测试用例”向导。
  3. 在“请输入测试用例的名称”步骤中,输入测试用例的名称,然后单击“下一步”。
  4. 在“选择 WSDL 文档”步骤中,打开 BPEL 模块项目,选择包含要测试的操作的 .wsdl 文件,然后单击“下一步”。
  5. 在下一步中,选择要测试的操作,然后单击“完成”。
    在项目树中的“测试”下面,将创建一个新的文件夹(采用大写字母 T 表示的图标),其中包含以下两个文件:Input.xmlOutput.xml

注意:如果在“文件”选项卡中查看该测试用例,则还会看到第三个文件 Concurrent.properties

设置测试属性

设置测试属性:

  1. 在“项目”窗口的“复合应用程序”项目节点下面,右键单击测试用例节点并从弹出菜单中选择“属性”。
  2. 请按如下方式设置测试用例的属性:
    描述:字符串
    用户输入的文本,可帮助用户了解该测试的相关信息。
    目标:URL(来自 .wsdl 文件的 <soap:address location="THIS"> 标记)
    标识要测试的 Web 服务的位置。
    SoapAction(默认:空)
    输出文件(只读;由系统生成)
    输入文件的名称。该文件包含测试用例的输入数据。
    输出文件(只读;由系统生成)
    输出文件的名称。该文件包含测试用例的输出数据。
    并发线程数:整数;默认值为 1
    每个线程可以多次调用测试用例(请参见下一个属性)。因此,如果并发线程数为 2,每个线程的调用次数为 3,则会运行 6 次测试用例(即两个线程,每个线程运行 3 次)。
    每个线程的调用次数:整数;默认值为 1
    每个线程调用测试用例的次数。
    测试超时(秒):整数;默认值为 30
    为每个线程分配的时间。如果线程在分配的时间内没有完,则会抛出异常。
    计算吞吐量:布尔值
    如果选中此复选框,则会计算吞吐量统计信息。示例:示例:如果在测试中指定了两个线程,每个线程均调用测试三次,并且测试被调用 6 次所花费的时间为 15 秒,则统计信息会报告每次调用所花费的时间平均为 2.5 秒。
    比较类型:含有以下选项的下拉列表:
    • identical:将 Output.xml 的内容和实际输出视为字符流。
    • binary:将 Output.xml 的内容和实际输出视为字节流。
    • equals:将 Output.xml 的内容和实际输出视为 XML 文档。
    功能状态:含有以下选项的下拉列表:
    • progress:将测试完成标记为 "success",不考虑实际结果。
    • done:记录测试的实际结果。

定制测试输入

定制测试输入:

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

运行测试程序

运行单个测试用例:

  • 在“项目”窗口的“复合应用程序”项目节点下面,右键单击测试用例节点并从弹出菜单中选择“属性”。
运行项目中的所有测试用例:
  • 右键单击复合应用程序项目节点,然后选择“部署项目”。

查看测试用例结果

  • 第一次运行时将报告测试用例失败(这是正确的):产生的输出与空的 Output.xml 文件不匹配,该文件的空内容将被替换为第一次运行的输出结果。
  • 测试结果显示在 JUnit 测试结果窗口中,该窗口在运行测试用例时会自动打开。
  • 如果再次运行测试且不更改输入,则第二次和后续运行都会报告测试成功,因为输出与 Output.xml 的内容相匹配。
  • 如果在 Input.xml 中更改值并重新运行测试,那么:
    • 如果将“功能状态”属性设置为 progress,即使出现不匹配,也会指示测试成功。
    • 如果将“功能状态”属性设置为 done,则将指示测试失败。
  • 如果右键单击 "myTestcase1",然后单击弹出菜单项“比较”,窗口将显示最新输出与 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. 当实例在断点处停止时,逐步执行代码或图以检查其执行情况。,在“BPEL 变量”窗口中检查变量的值以及在“监视”窗口中观察 XPath 表达式的值。
  9. 完成调试会话。

启动和完成 BPEL 调试会话

在将 BPEL 调试器连接至 BPEL 服务引擎时,会启动调试会话。每次只能在 BPEL 服务引擎上运行一个调试会话。

调试会话启动后,您可以分步执行流程实例,以便在“BPEL变量”和“监视”窗口中检查流程实例变量和/或 XPath 表达式的值。可以在“设计”视图的类的调试器会话中监控 BPEL 流程的执行。正在执行的活动作为当前的执行位置突出显示在图中。“BPEL流程执行”窗口还显示了 BPEL 流程的执行。。

准备调试环境:

  1. 在“服务”窗口中,确保 GlassFish V2 应用服务器正在运行。如果应用服务器包含子节点并且标有绿色三角形,则表示应用服务器正在运行。
    如果服务器未启动,右键单击它并从弹出菜单中选择“启动”。有关如何启动应用服务器的详细住处,请参阅 BPEL 服务引擎 部分。

    应用服务器正在运行

  2. 在 BPEL 源代码中设置断点。
    • 要在“源”视图中设置断点,请在要设置断点的行旁边单击鼠标左键。

      在源代码中设置断点

    • 要在图中设置断点,请切换至“设计”视图,右键单击元素,然后从弹出菜单中选择“切换断点”。 含有断点的元素上方将显示一个红色方块。

      包含断点的图元素

    • 位于“导航”窗格“BPEL 逻辑视图”中的元素也可以使用“切换断点”弹出菜单命令。对于“导航”中包含断点的元素,将显示一个如以下屏幕快照中所示的红色小框 (ReceiveItinerary):

      包含断点的“导航”元素

  3. (可选)您可以为 XPath 表达式添加监视。要添加监视,请复制要监视的 XPath 表达式,从主菜单中选择“运行”>“添加监视”,然后将该表达式粘贴到“监视表达式”字段中。单击“确定”。
    注意:您也可以添加代码中不存在但从调试角度来看非常有价值的 XPath 表达式。

    在源代码中设置断点

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

  • 在“项目”窗口中,右键单击 "JavaPrj" 节点,然后从弹出菜单中选择“运行项目”。
    现在,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 流程到达断点时,它将变为暂停状态,此时您可以执行调试操作,如检查变量的值或者步入代码。

要查看和组织当前在 IDE 中设置的所有断点,请选择“窗口”>“调试”> "BPEL" >“断点”(Alt-Shift-5) 以打开“断点”窗口。

调试已到达断点的流程实例

暂停执行流程实例后,从“运行”菜单或工具栏中选择以下命令:

  • 继续 (Ctrl-F5)。运行当前流程实例,直至遇到下一个断点或者流程实例完成时为止。实例状态将变为“正在运行”。
  • 步入 (F7)。步入下一个 BPEL 活动。在进行步入时,当前行指示符或图中的位置将前移,并相应地更改“BPEL 变量”和“监视”窗口的内容。在 BPEL 语言术语中,仅支持活动粒度的步入操作,而对于更细的粒度,则不支持其步入操作。
  • 运行到光标(F4)。运行 BPEL 流程到“导航”窗口(BPEL 本地视图)中的所选位置,或者光标在“源”视图中的位置。到达光标位置时,流程实例将暂停运行。

要从 BPEL 源代码中删除断点,请将光标置于包含断点的行,然后选择“运行”>“切换断点”,或者单击包含断点的行的左旁注处。此外,也可以在图中右键单击包含断点的元素,然后从弹出菜单中选择“切换断点”。

监控 BPEL 流程的执行

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

图中使用了以下符号:

  • 绿色(发光) 活动到达的断点集。
  • 灰色(淡出效果) 从未执行的活动。
  • 绿色三角。正在执行的活动。
  • 蓝色三角。成功完成的活动。

在图中监控调试

还可以在“BPEL 流程执行”窗口监控当前 BPEL 流程实例的执行。

BPEL 调试器窗口

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

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

“调用栈”、“断点”和“监视”是标准的 IDE 调试器窗口。“调用栈”、“断点”和“监视”是标准的 IDE 调试器窗口。

“会话”窗口

“会话”窗口列出了当前在 IDE 中运行的所有调试会话,其中包括 Java 和 BPEL 调试会话。每次只能在 BPEL 服务引擎上运行一个调试会话。“会话”窗口列出了当前在 IDE 中运行的所有调试会话,其中包括 Java 和 BPEL 调试会话。实际上,仅发生 Pick 主体中的一个活动。其他调试器窗口(如“BPEL 流程实例”、“监视”和“BPEL 变量”)仅显示与当前调试会话有关的流程实例、表达式和变量。

您可以在弹出菜单中对会话执行以下操作:激活。

  • 激活。将选定会话设置为当前会话。
  • 完成。完成选定会话。
  • 全部完成。完成所有调试会话。

“会话”窗口

“BPEL 流程实例”窗口

“BPEL 流程实例”窗口列出了在当前调试会话中的 BPEL 引擎上运行的所有 BPEL 流程实例。

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

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

您可以在弹出菜单中对流程实例执行以下操作:

  • 激活。将选定会话设置为当前会话。其他 BPEL 调试器窗口中的数据将发生相应的变量。
  • 恢复。恢复暂停的流程实例。
  • 终止。终止所选流程实例。

“BPEL 流程实例”窗口

“BPEL 变量”窗口

“BPEL 变量”窗口显示了当前流程实例和当前位置的 BPEL 变量及其值的列表。当前位置是指当前流程实例暂停时所在的位置。更改当前流程实例时,将更新“BPEL 变量”窗口中的记录,以反映新的当前流程实例和新的当前位置的变量。

本地变量将显示为树型结构。为每个变量提供的信息包括变量名称和值。

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

  • 查看变量结构。方法是展开树中的变量节点。
  • 放大和编辑变量的值。要编辑变量的值,单击省略号按钮 (...)并在编辑窗口中输入新的值。

“BPEL 变量”窗口

“监视”窗口

“监视”窗口显示了要监视的 XPath 表达式的列表。您可以在调试会话过程中或在此之前显式地添加监视。“监视”窗口显示表达式及其值。随着流程向前执行,表达式的值可能会发生变化,具体取决于流程逻辑。

“监视”窗口

“BPEL 流程实例”窗口

“BPEL 流程执行”窗口将显示 BPEL 调试器中的当前 BPEL 流程的执行进程。更改当前流程实例时,将更新“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
您在调试会话运行时显式地将其终止。


回到顶部

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
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   Open ESB - The Open Enterprise Service Bus Powered by