Message Stub 用于模拟服务,并且是 SOAP 客户端的补充。本工具用于对返回单个消息的服务进行打桩。如果存在桩函数许可证,则它可以响应多个消息,并可以针对服务定义中定义的操作自动生成。
本章包含:
关于 Message Stub
Message Stub 工具可以作为段对端测试场景的一部分来调用。当特定 Message Stub 测试步骤作为测试序列的一部分来调用时,SOAtest 的本地服务器将监听其消息。它将使用该消息,然后以 Message Stub 工具的配置中所定义的方式做出反应。完成此操作后,将执行测试场景中的下一个测试。
可以将 Message Stub 工具整合到端到端的测试场景中,以便在测试套件执行流程中的所需位置调用它们,并可以触发其他测试操作。
例如,如果要验证执行包含多个步骤的业务流程工作流的贷款审批服务(包括调用经理批准服务和另一个外部信用评级服务),您可以构建具有以下测试的场景:
- 测试 1:向贷款审批服务发送请求以启动该过程。
- 测试 2:充当桩,通过 HTTP 监听传入的信用评级服务,并以该场景所需的评级进行响应(模拟信用评级服务响应)。
- 测试 3:充当桩,通过 JMS 队列使用经理批准服务,并以批准、拒绝等进行响应。
- 测试 4:从贷款过程中获得最终贷款结果的异步响应并进行验证。
- 测试 5:对关系数据库执行查询,以检查贷款申请是否已在数据库中正确审核。
- 测试 6:从数据库中移除申请数据,使其恢复到原始状态并使测试场景可重复。
可以使用数据源中的数据来参数化这些桩。
当您想要应用程序与桩而不是实际资源进行交互时,请配置您的应用程序以访问桩,该桩将部署在 http://<localhost>:9080/servlet/MessageHandler。注意,以这种形式创建和部署的每个桩都具有相同的 URL。这是可能的,因为根据测试套件的逻辑,一次只能调用一个 Message Stub 工具
您可以通过附加到它们上的 Traffic Viewer 工具来查看 Message Stub 工具的行为。
服务定义选项
在 Definition 选项卡中指定选项允许 SOAtest 使用让您更易指定响应消息的项填充 Response 选项卡。您可以指定与服务定义或 schema 相关的以下设置,定义预期的请求和输出响应:
- 服务定义:指定响应程序是否与服务定义(RAML、OpenAPI/Swagger、WSDL 或 Schema)相关联。对于纯 XML,请选择 None。当指定了服务定义,并且该工具受到了 WSDL 或 schema 的约束,则将自动向可应用的表单视图中填充合适的字段值和控件(例如,布尔值的单选按钮、数字与整数的不同控件,枚举的下拉列表)。它也防止输入无效的消息(例如,消息缺失必要值、不正确类型的值、schema 中未指定的方法/资源/响应代码等等)。编辑将受到限制,以确保消息符合相关的模式(例如,将无法对树节点进行插入、删除、重命名、复制或粘贴操作)。
- 针对 RAML 服务定义模式
- RAML URL: 特定的 RAML URL,或引用 RAML URL 的变量。
- RAML URL: 特定的 RAML URL,或引用 RAML URL 的变量。
- 针对 OpenAPI/Swagger 服务定义模式
- OpenAPI/Swagger URL:特定的 OpenAPI/Swagger URL,或引用 OpenAPI/Swagger URL 的变量。
- OpenAPI/Swagger URL:特定的 OpenAPI/Swagger URL,或引用 OpenAPI/Swagger URL 的变量。
- 针对 WSDL 服务定义模式
- WSDL URL: 说明可访问该服务的 WSDL URL。可以输入值或单击 Browse 按钮。如果没有 WSDL,则可以将该字段保留为空。
- Constrain to WSDL 确定某些工具参数包含的值是否来自 Schema 而非手动输入。如果启用该选项,则禁用掉某些参数(例如,路由器端点、SOAP 操作、SOAP 主体和头参数)并从 WSDL 中获取它们的值。如果禁用该选项,则 Refresh WSDL 按钮也将被禁用。
- WSDL Documentation: (如果可用,自动完成):说明给定 WSDL URI 的服务。
- WSDL URL: 说明可访问该服务的 WSDL URL。可以输入值或单击 Browse 按钮。如果没有 WSDL,则可以将该字段保留为空。
- 针对 Schema 服务定义模式
- Schema URL: 说明可访问该服务的模式 URL。可以输入值或单击 Browse 按钮。如果没有模式,则可以将该字段保留为空。
- Constrain to Schema: 确定某些工具参数包含的值是否来自模式而非手动输入。如果启用该选项,则禁用掉某些参数并从模式 中获取它们的值。如果禁用该选项,则 Refresh Schema 按钮也将被禁用。
- XML Message Type: 确定响应选项卡的表单输入控件是针对 SOAP 消息还是纯 XML 消息。如果选择纯 XML,则表单输入模式将直接表示消息。如果选择 SOAP,则表单输入中配置的 XML 将用 SOAP 信封包装起来,并且视图将提供 SOAP 头部分,允许在需要时配置 SOAP 头。
响应选项
Response 选项卡允许您配置希望模拟资产在接收特定请求时要传送的响应值。
该选项是否可用取决于 Views 菜单中选择的是什么选项。
文字 XML、表单 XML、脚本化 XML 和表单输入。
Literal XML, Form XML, Scripted XML, 或 Form Input 的可用选项 SOAP 客户端工具可用的选项相似。
注意,如果在表单输入或表单 JSON 视图中启用资源选择器,则可以使用它来选择响应的资源。当选择一个资源时,表单输入视图和表单 JSON 视图用合适的值和 UI 控件(例如,布尔值的单选按钮、数字和整数的不同控件等)进行填充。
- 在表单输入模式中,资源选择器将显示关联服务定义 1)将响应定义为 XML 2)指定 XML 模式的所有资源。
- 在表单 JSON 模式中,资源选择器将显示关联服务定义 1)将响应定义为 JSON 2)指定 JSON 模式的所有资源。
多响应视图
Multiple Responses 视图允许您指定用于特定请求的响应。
在 Conditions 选项卡中,您可以指定必须满足的请求条件,以便发送相关响应。可以使用 XPath 函数和/或 URL 参数为 RESTful 服务指定条件(内置支持可用于 GET 和 POST)。 Message 选项卡指定如果满足条件,将发送什么响应。
使用具有多响应的 ’Always Match’
如果出现以下情况,请启用 Always Match 选项:
- 想指定不管传入消息内容是什么桩应该 始终 返回的单个响应,或者
- 您有多个响应,所以想指定桩应该返回的 最终 响应。在这种情况下,如果先前条件都不匹配,则它将处理全部捕获的最后请求响应。例如,您可以指定“始终匹配”返回 SOAP Fault 的最终响应,SOAP Fault 表示服务处理请求失败,根据传入值返回的某些内容。
如果不止一个 XPath 或 URL 参数匹配响应,则 SOAtest 将返回列表中第一个匹配的响应(使用 Up 和 Down 按钮指定所需序列或响应)。如果为每个响应提供的 Xpath 或 URL 参数导致唯一匹配,则响应的顺序无关紧要。
脚本化 XML 视图
Scripted XML 视图允许指定复杂逻辑。有关更多详情,请查阅 Using Scripted Logic。
传输头选项
Transport Header 选项 允许指定 HTTP、JMS 或 MQ 消息数据头属性。
测试关联性选项
Test Correlation 选项允许指定 Message Stub 工具接收并处理哪些消息。将发送到桩 URL 的不同消息路由到基于此处设置的特定的 Message Stub 工具(每一个都处理不同的操作)。例如,其中一个 Message Stub 工具可能响应到客户注册消息,另一个可能响应到支付消息,而还有一个可能作为默认的“catch all”函数,当其他选项都不匹配时使用该函数。
可以通过在 Test Correlation 选项卡区域指定 Message Stub 接收的消息:
- Transport: 允许在消息中指定 HTTP 数据头、JSM 消息属性或 MQ 消息字段,这些字段将确定消息被处理过。
- Request Body: 允许您在消息中指定 XPath,这将确定是否处理该消息。
- URL Parameters (for RESTful services): 允许指定 URL 参数,这将确定是否处理该消息。URL 参数可以是重复的(可以拥有设置为不同值的相同参数)。
- Custom: 允许指定基于自定义方法的返回值的自定义测试关联性。关于使用自定义关联性的详细信息,请查阅以下提示框:
您可以配置关联性的其中一个类型、多类型,或者配置为没有关联性。如果配置为没有关联性,则将处理消息中的所有内容。
使用自定义关联性
自定义测试关联性基于自定义方法的返回值。要求:
- 方法必须携带 0 或 1 个参数。
- 可选参数的类型是
com.parasoft.api.ScriptingContext
。 - 方法可以使用 ScriptingContext 对象访问传输头文件、URL 参数和传入消息的消息内容。
CorrelationScriptingHookConstants 的更多信息可在 Javadocs 中找到(请选择 Parasoft> Help,然后查找名为 "Parasoft SOAtest Extensibility API”的图书)。
例如,如果想测试基于正则表达式的纯文本消息,可以使用:
from com.parasoft.api import CorrelationScriptingHookConstants from java.lang import * def match(context): strMessage = context.get(CorrelationScriptingHookConstants.MESSAGE_STR) return String(strMessage).matches("myRegularExpression")
如果想测试 XML 消息中的元素,可以使用:
from com.parasoft.api import CorrelationScriptingHookConstants from org.w3c.dom import * from javax.xml.parsers import * from javax.xml.xpath import * from java.io import * from java.lang import * def match(context): xmlDocument = context.get(CorrelationScriptingHookConstants.MESSAGE_DOM) if xmlDocument != None: xPathFactory = XPathFactory.newInstance(); xpath = xPathFactory.newXPath() expression = xpath.compile("//*[local-name(.)='someElement' and namespace-uri(.)='someNamespace'][1]/text()") elementValue = expression.evaluate(xmlDocument) return String(elementValue).matches("myRegularExpression") return 0
传输关联性
若要配置传输关联性:
- 选择 Enable correlation 多选框。
- 单击 Add 按钮。将显示一个新的条目行。
- 输入要指定的消息关联的 Name 和 Value 。
请求体关联性
若要配置请求体消息关联性:
- 请选择 Enable correlation 多选框。
- 单击 Edit 按钮。将显示一个 Edit XPath Function 对话框。
- 从 Element 树选择元素,从 Function 下拉菜单选择函数,然后单击 OK。
URL 参数关联
若要配置 URL 参数关联性:
- 请选择 Enable correlation 多选框。
- 单击 Add 按钮。将显示一个新的条目行。
- 输入要指定的关联的 Parameter Name 和 Value 。
数据源关联性选项卡
Data Source Correlation 选项卡允许指定要在桩响应中使用的数据源行值。
优点
配置具有 Multiple Responses 模式的桩的一个方法是手动配置 Message Stub 工具的模式,根据传入消息的性质发送不同的响应消息。
配置桩以动态响应所需消息的另一种方法是使用数据源。您可以轻松地填充数据源表(Excel 等),其中每行包含想要桩响应的传入消息(通常只需叶节点值)中的值,然后,另一列指定当满足指定条件时,您希望桩如何响应(有关详细信息,请查阅 Using Existing Data Sources or Rapidly Creating Data Sources for Responses )。在那之后,您可以配置请求响应消息值之间的映射以及数据源中的列。
这允许在一个易于编辑的表(数据源)中轻松配置请求/响应用例,它允许在那里对它们进行管理,以便随着越来越多的消息进一步扩展,同时它还为响应消息提供了更大地灵活性(因为表单输入允许您固定一些值,参数化一些值,自动化一些值或脚本化一些值。)
这个数据源关联非常灵活。您可以配置桩,以超出精确的匹配/关联的规则和逻辑响应传入的请求值。例如,可以配置桩对信用卡号的最后 4 位数、小于或大于给定值的数值或其他模式和表达式进行计算。
值匹配支持通配符 * 和 ?。例如,如果想要命名为“title keyword”的传入值来匹配只要包含单词 Linux 的某一行,则可以使用数据源值 "*Linux*"。* 匹配 0 或多个字符; ? 匹配单个字符。
配置
若要参数化来自数据源的桩响应:
- 请确保在 SOAtest 中配置了数据源,并可用于 Message Stub。
- 在 Data Source Correlation 选项卡中合适的地方单击 Add 按钮,提供 Xpath 和/或 URL 参数,然后选择合适的列名。在执行部署的桩时,SOAtest 将从请求中提取特定值,然后在指定列中搜索与与提取值对应的匹配项。如果找到匹配项,将使用相应数据源行中的数据填充响应
- 如果提供服务定义,则可使用 Edit 按钮生成 XPath。该对话框实时验证 XPath 表达式和列名。
- 如果选择自定义它们而不是使用可视的 Edit 选项,则 SOAtest 在键入/编写 XPath 表达式的时候会对 XPath 语法进行验证。
- 可以在数据源列中使用通配符。
- 通过引用同一数据源中的其他数据源列(例如,表单输入、表单 XML 等),对 Message Stub 的响应区域进行参数化。您可以向列名映射中添加多个 XPath 或 URL 参数。
详情处理
Message Stub 在测试套件中或者作为寄宿桩执行时,传入的消息将通过这些 Xpath 表达式/URL 参数进行评估。然后根据相应的数据源值匹配这些值(每个都有其各自的列)来找到匹配该值的行。
一系列匹配尝试将每个值匹配到相应的数据源行。如果在匹配尝试结束时未找到匹配项,则引擎将移至数据源中的下一行。如果在任何行中均未找到匹配项,则返回错误。
匹配尝试按以下顺序进行:
- 精确/文字字符串匹配
- 与通配符 * 匹配, * 表示零个或多个字符。例如,Linux* 匹配 "Linux"、"Linux Administration" 或 "Linux Administration Handbook"。
- 通过将数据源值字符串作为正则表达式进行处理来进行匹配。例如,这允许 abc-\d{3}-123 与任何如 abc-576-123, abc-000- 123 等的输入值匹配(中间部分是任何三位数字)。
- 通过将数据源值和正在评估的传入值作为数值进行处理来进行匹配。例如,这允许 10 与 10.0 匹配。
- 通过将传入值和数据源单元格值作为带有比较符的数值进行处理来进行匹配。允许的操作符有:<, >, <=, >=, != or <>.例如,如果提供的数据源值为 <= 14.99,则小于或等于 14.99 的传入值将与该特定值匹配。
如果 Message Stub 的数据源关联列表中指定的所有值都匹配在该行中,则数据源行被视为是匹配的。
如果找到匹配的行,则该行将用于 Message Stub 响应消息中的任何参数化值。通过这种方式,桩可以根据传入消息中的值响应所需的消息值。
附件选项
Attachment 选项卡允许您在不使用脚本的情况下发送二进制或 XML 附件。若要发送附件,请执行 Attachment 选项卡中的以下操作:
- 单击 Add 按钮。将在 Attachment 表中显示一个 XML Attachment 条目。
- 双击 XML Attachment 条目。将显示一个 Edit Attachments 对话框。
- 在 Edit Attachments 对话框中,从 Mode 下拉菜单中选择 XML 或 Binary 。
XML 模式有以下选项:
- Views: 从下拉菜单中选择所需视图并相应地进行配置。选项有 Literal XML、Form XML、Scripted XML 和 Form Input。
Binary 模式有以下选项:
- Base 64 Encoding: 启用 Base 64 编码,对二进制值进行编码。
- Data Source Column: 选择发送来自数据源列的值。
- File: 选择发送来自文件的值。通过单击 Browse 按钮选择所需的文件。如果要将该文件的路径作为当前配置文件的相对路径来保存,则选择 Persist as Relative Path 选项。
- Text: 选择发送文本值。
- Content type: 指定内容类型。如果想对附件头信息进行添加/更改或删除操作,请单击 Edit Headers 按钮。
服务选项
Service Options 选项卡允许配置处理消息的方式。可使用以下选项:
- Message Exchange Pattern: 选择只征求响应或通知。
- Return Status: 允许指定如何返回消息。例如,模拟工作或有故障的服务。若要使用默认值 200 Ok,则选择 Use Default Return Status 多选框。如果未选择此选项,则可使用以下选项:
- Return Status: 输入自定义返回状态值。如果数据源可用,则可参数化该值。
- Return Message: 输入自定义返回消息。如果数据源可用,则可参数化该值。
- Run Mode: 确定此工具是否无限期运行。
- Request Handling: 如果需要在数据源相关性或“如果请求匹配”条件逻辑的多个响应之前对请求消息进行转换,请在响应之前选择在消息上应用传入请求工具。如果需要在数据源关联性或“如果请求匹配”条件逻辑处理多个响应之前对请求信息进行转换,请选择 Apply incoming request tools on the message before responding 。在 XML 必须更改为让其适用于相关性(或消息不完全是 XML,并要求桩发送请求的合适响应给原始调用者之前需要进行一些转换)时,这一点很重要。
- Time Options: 允许设置关联执行时间的以下选项(注意,Message Stub 的执行时间是从 servlet 完成接收请求的时间到开始发送响应的时间计算的)。
- Timeout after (milliseconds): 指定延迟的长度(以毫秒为单位),在此之后,SOAtest 应该考虑您的请求超时。 Default 设置为 30000。Custom 设置允许输入超时时间。可以输入一个负超时值,表示指定无限的超时。
- Fail the test on Timeout: 选择此选项可使测试在指定超时时失败。
- Pass the test only if a Timeout occurred: 如果发生指定的超时(如,工具没有在指定的时间内完成执行),则选择此选项让测试通过。
- Think Time: 输入想要消息延迟模拟的时间(以毫秒为单位)。这个可以用来模拟慢速服务。如果数据源可用,则还可参数化该值。 Think Time 值大于 Timeout 值将不会强制超时。Timeouts 只有在消息未成功关联时并且 Message Stub 处于闲置状态或未完成时才会发生。
- Timeout after (milliseconds): 指定延迟的长度(以毫秒为单位),在此之后,SOAtest 应该考虑您的请求超时。 Default 设置为 30000。Custom 设置允许输入超时时间。可以输入一个负超时值,表示指定无限的超时。
- Style/Use: 这些选项允许选择消息的正文风格和编码:
- Body Style: 选择 document 或 rpc。
- Use: 选择 encoded 或 literal。
- Encoding Style URI: (如果可用,自动完成)列出用来发送请求的编码风格 URI。
- Target Object URI: 指定目标对象 URI
- Attachment Encapsulation Format: 指定是否使用 Default 或 Custom 封装格式。 Default 选项指在 Preferences 面板的 SOAP 客户端选项卡中选择作为 Attachment Encapsulation Format 的任何选择(有关更多信息,请查阅 SOAtest 用户指南中 "Preference Settings> SOAP Client Options” 主题。) Custom 选项允许选择 MIME、 DIME、 MTOM Always 或 MTOM Optional。
- Headers: 允许在响应中添加自定义数据头。
添加自定义数据头
若要添加自定义数据头:
- 请单击 Service Options 选项卡中的 Add 按钮。将打开一个对话框。
- 输入要指定的消息关联的 Name 和 Value 。
- 单击 OK。
使用现有数据源或快速创建响应的数据源
在数据源中指定响应值是添加大量请求/响应对非常有效的一种方式。
使用现有数据源
如果已经拥有为请求参数和需要的相应相应参数指定值的数据源,则您可以如下使用这些值:
- 将数据源添加到 SOAtest。
- 使用合适的请求列配置 Message Stub 的数据源映射(如 Data Source Correlation Options中所述)。
快速创建数据源
如果没有这样的数据源,但又想要一个快速方法来指定多个请求/响应集。
- 根据 Generating a Data Source Template for Populating Message Elements 中所描述的步骤,从 Message Stub 工具的表单输入视图创建 CSV 文件。数据源将被生成并添加到响应程序套件。这个生成的数据源将包含响应的列。Message Stub 工具的表单输入视图将自动参数化。
- 为每个应该用于确定响应的请求参数添加新的数据源列(如,使用 Excel、OpenOffice 或相似的工作表应用程序)。可使用通配符。
- 使用添加的新请求列配置 Message Stub 的数据源映射。有关更多详情,请查阅 Data Source Correlation Options 。
- 向数据源中(如,使用 Excel、OpenOffice 或相似的工作表应用程序)添加新的行,以便为请求参数和需要的相应的响应参数指定值。
使用脚本化逻辑
可以根据传入请求编写响应值的脚本。这允许对桩使用更复杂的逻辑。此外,Message Stub 允许通过脚本访问数据源值。访问这些值类似于通过扩展工具对它们进行访问。
对于如何使用在 Message Stub 工具中使用脚本化逻辑,这里有个示例:
- 在 Message Stub 工具的 Definition 选项卡中输入服务定义。
- 右键单击 Message Stub 节点,然后选择 Add Output。将显示 Add Output 向导。
- 在 Add Output 向导中,从左窗格选择 Incoming Request ,右窗格选择 XML Data Bank ,然后单击 Finish。
- 双击 Message Stub 节点下的 Incoming Request> XML Data Bank 节点。XML 数据库配置面板将显示在右侧 GUI 面板中。
- 在右侧 GUI 面板中,添加想要在脚本中访问的值的 XPath。
- 双击 Message Stub 节点。Message Stub 配置面板将显示在右侧 GUI 面板中。
- 在 Response 选项卡中,请选择 Scripted 视图。
- 启用 Use Data Source 选项。
指定逻辑。以下是访问数据源和数据库值的基本模板:
def customLogic(context): # Retrieve the data source value. "Data Source Name" should be replaced # with the name of your data source and "Column Name" should be the column # that your value is coming from. You can access many columns from the same # data source within this script. For Data Bank values, the table is always # named "Generated Data Source" so you only need to replace "Data Bank Column Name" dataSourceValue = context.getValue("Data Source Name", "Column Name") dataBankValue = context.getValue("Generated Data Source", "Data Bank Column Name") # add custom logic that uses value from data source
- 从 Method 组合框中选择合适的方法。您选择的方法应该是您的入口点。在上述示例中,方法是 customLogic()。
向 Message Stub 添加附件处理器
将附件处理程序添加到 Message Stub 中以在发送消息附件时测试附件处理可能会很有用。若要向 Message Stub 添加附件处理器:
- 请选择 Message Stub 节点并单击 Add test or output 按钮。将显示 Add Output 向导。
- 在 Add Output 向导中,从左窗格选择 Incoming Attachment ,右窗格选择 Attachment Handler ,然后单击 Finish。
- 双击 Attachment Handler 节点,然后在工具配置面板中对工具进行配置。
- (可选项)选择 Message Stub 节点下的 Attachment Handler 节点,然后单击 Add Test/Add Output 按钮。将显示 Add Output 向导,您可以从中添加一个 Write File 工具,将附件作为二进制文件输出。