BPEL 设计器开发人员指南:测试和调试 BPEL 流程
由
创建,由
维护,2007 年 12月
目录
BPEL 设计器开发人员指南
测试 BPEL 流程
对部署的业务流程应用程序进行测试时,涉及使用作为远程合作伙伴服务的测试用例,这些服务会将 SOAP 消息发送到 BPEL 服务引擎运行环境。
简言之,交互流程如下所示:BPEL 服务引擎运行环境将接收 SOAP 消息,创建一个 BPEL 流程实例并开始执行该实例。一个 BPEL 流程可以包含多个运行实例。BPEL 服务引擎运行环境接收消息,并使用关联将其传送到相应的流程实例。如果尚未建立实例,则创建一个新的实例。
要测试运行部署的业务流程应用程序,您需要将测试用例配置为用作将 SOAP 消息发送到 BPEL 服务引擎运行环境的远程合作伙伴服务。
创建并运行测试用例
要获得测试结果,您必须执行以下操作:
-
添加测试用例将其绑定到 BPEL 操作。
-
设置测试属性。
-
定制测试输入。
-
运行测试程序。
在执行本部分中的上述所有步骤之前,假定您已经完成了下面的操作:
添加/绑定测试用例
添加测试用例并将其绑定到 BPEL 操作:
-
在 IDE 的“项目”选项卡中,打开复合应用程序项目以显示其“测试”文件夹。
-
右键单击“测试”,然后选择弹出菜单项“新建测试用例”。
这将启动“新建测试用例”向导。
-
在“请输入测试用例的名称”步骤中,输入测试用例的名称,然后单击“下一步”。
-
在“选择 WSDL 文档”步骤中,打开 BPEL 模块项目,选择包含要测试的操作的 .wsdl 文件,然后单击“下一步”。
-
在下一步中,选择要测试的操作,然后单击“完成”。
在项目树中的“测试”下面,将创建一个新的文件夹(采用大写字母 T 表示的图标),其中包含以下两个文件:Input.xml 和 Output.xml。
注意:如果在“文件”选项卡中查看该测试用例,则还会看到第三个文件 Concurrent.properties。
设置测试属性
设置测试属性:
-
在“项目”窗口的“复合应用程序”项目节点下面,右键单击测试用例节点并从弹出菜单中选择“属性”。
-
请按如下方式设置测试用例的属性:
-
描述:字符串
-
用户输入的文本,可帮助用户了解该测试的相关信息。
-
目标: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:记录测试的实际结果。
定制测试输入
定制测试输入:
-
在“项目”窗口中,展开 "StockServer" 节点和“Web 服务”节点。
- 右键单击 "Input.xml",然后单击“编辑”。
-
根据需要修改内容。例如,每当您看到 <value>?string?</value> 时,请在 ?string? 内单击鼠标左键,然后将其替换为任意长度的字符串。但是,请不要在这些替换字符串内包含 <(小于号)字符或 &(与号)字符,除非您在 XML 语义中使用这些字符。
-
如果您对输入结果表示满意,请单击“保存”。
-
右键单击 "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 流程调试的主要步骤如下所示:
-
启动 GlassFish 应用服务器。
- 创建测试用例。
对于示例流程,测试用例是自动创建的;对于新项目,则至少需要创建一个测试用例。
- 在“源”视图或“设计”视图中打开 BPEL 流程。
-
在代码或图中设置断点。(可选)在流程中为 XPath 表达式添加监视。
-
启动调试会话。观察“BPEL 调试器控制台”窗口以确认调试会话已启动。
-
在调试会话中,运行一个或所有测试用例。
- 在“BPEL流程执行”窗口或“设计”视图中查看 BPEL 流程的执行,在“BPEL 流程实例”窗口中查看运行的 BPEL 流程实例。
-
当实例在断点处停止时,逐步执行代码或图以检查其执行情况。,在“BPEL 变量”窗口中检查变量的值以及在“监视”窗口中观察 XPath 表达式的值。
-
完成调试会话。
启动和完成 BPEL 调试会话
在将 BPEL 调试器连接至 BPEL 服务引擎时,会启动调试会话。每次只能在 BPEL 服务引擎上运行一个调试会话。
调试会话启动后,您可以分步执行流程实例,以便在“BPEL变量”和“监视”窗口中检查流程实例变量和/或 XPath 表达式的值。可以在“设计”视图的类的调试器会话中监控 BPEL 流程的执行。正在执行的活动作为当前的执行位置突出显示在图中。“BPEL流程执行”窗口还显示了 BPEL 流程的执行。。
准备调试环境:
-
在“服务”窗口中,确保 GlassFish V2 应用服务器正在运行。如果应用服务器包含子节点并且标有绿色三角形,则表示应用服务器正在运行。
如果服务器未启动,右键单击它并从弹出菜单中选择“启动”。有关如何启动应用服务器的详细住处,请参阅 BPEL 服务引擎 部分。
-
在 BPEL 源代码中设置断点。
-
要在“源”视图中设置断点,请在要设置断点的行旁边单击鼠标左键。
-
要在图中设置断点,请切换至“设计”视图,右键单击元素,然后从弹出菜单中选择“切换断点”。
含有断点的元素上方将显示一个红色方块。
-
位于“导航”窗格“BPEL 逻辑视图”中的元素也可以使用“切换断点”弹出菜单命令。对于“导航”中包含断点的元素,将显示一个如以下屏幕快照中所示的红色小框 (ReceiveItinerary):
-
(可选)您可以为 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 变量”窗口中,可以执行以下操作:
- 查看变量结构。方法是展开树中的变量节点。
- 放大和编辑变量的值。要编辑变量的值,单击省略号按钮 (...)并在编辑窗口中输入新的值。
“监视”窗口
“监视”窗口显示了要监视的 XPath 表达式的列表。您可以在调试会话过程中或在此之前显式地添加监视。“监视”窗口显示表达式及其值。随着流程向前执行,表达式的值可能会发生变化,具体取决于流程逻辑。
“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
- 您在调试会话运行时显式地将其终止。
回到顶部