消息桩能够模拟服务,是对 SOAP 客户端的补充。本工具用于对返回单个消息的服务进行打桩。 

章节目录: 

关于消息桩

消息桩工具可以作为端对端测试场景的一部分来调用。当特定消息桩测试步骤作为测试序列的一部分来调用时,SOAtest 的本地服务器将监听其消息。它将使用该消息,然后以消息桩工具的配置中所定义的方式做出反应。完成此操作后,将执行测试场景中的下一个测试。

可以将消息桩工具整合到端到端的测试场景中,以便在测试套件执行流程中的所需位置进行调用,并可以触发其他测试操作。

例如,如果要验证执行包含多个步骤的业务流程工作流的贷款审批服务(包括调用经理批准服务和另一个外部信用评级服务),您可以构建具有以下测试的场景:

  • 测试 1: 向贷款审批服务发送请求以启动该过程。
  • 测试 2: 充当桩,通过 HTTP 监听传入的信用评级服务,并以该场景所需的评级进行响应(模拟信用评级服务响应)。
  • 测试 3: 充当桩,通过 JMS 队列使用经理批准服务,并以批准、拒绝等进行响应。
  • 测试 4: 从贷款过程中获得最终贷款结果的异步响应并进行验证。
  • 测试 5: 对关系数据库执行查询,以检查贷款申请是否已在数据库中正确审核。
  • 测试 6: 从数据库中移除申请数据,使其恢复到原始状态并使测试场景可重复。

可以使用数据源中的数据来参数化这些桩。 

当您想要应用程序与桩而不是实际资源进行交互时,请配置您的应用程序以访问桩,该桩将部署在 http://<localhost>:9080/servlet/MessageHandler。注意,以这种形式创建和部署的每个桩都具有相同的 URL。这是可能的,因为根据测试套件的逻辑,一次只能调用一个消息桩工具

您可以通过附加到消息桩工具上的通讯报文查看器工具来查看消息桩工具的行为。

服务定义选项

定义选项卡中指定选项允许 SOAtest 使用让您更易指定响应消息的项填充响应选项卡。您可以指定与服务定义或 schema 相关的以下设置,定义预期的请求和传出响应:

  • 服务定义:指定响应器是否与服务定义(RAML、OpenAPI/Swagger、WSDL 或 Schema)相关联。对于纯 XML,请选择。当指定了服务定义,并且该工具受到了 WSDL 或 schema 的约束,则将自动向可应用的表单视图中填充合适的字段值和控件(例如,布尔值的单选按钮、数字与整数的不同控件,枚举的下拉列表)。它也防止输入无效的消息(例如,消息缺失必要值、不正确类型的值、schema 中未指定的方法/资源/响应代码等等)。编辑将受到限制,以确保消息符合相关的模式(例如,将无法对树节点进行插入、删除、重命名、复制或粘贴操作)。
  • 针对 RAML 服务定义模式
    • RAML URL:特定的 RAML URL,或引用 RAML URL 的变量。
  • 针对 OpenAPI/Swagger 服务定义模式
    • OpenAPI/Swagger URL:特定的 OpenAPI/Swagger URL,或引用 OpenAPI/Swagger URL 的变量
  • 针对 WSDL 服务定义模式
    • WSDL URL: 说明可访问该服务的 WSDL URL。可以输入值或点击浏览按钮。如果没有 WSDL,则可以将该字段保留为空。
    • 限定到 WSDL 确定某些工具参数包含的值是否来自 Schema 而非手动输入。如果启用该选项,则禁用掉某些参数(例如,路由器端点、SOAP 操作、SOAP 主体和头参数)并从 WSDL 中获取它们的值。如果禁用该选项,则刷新 WSDL 按钮也将被禁用。
    • WSDL 文档:(如果可用,自动完成):说明给定 WSDL URI 的服务。
  • 针对 Schema 服务定义模式
    • Schema URL:说明可访问该服务的 Schema URL。可以输入值或点击浏览按钮。如果没有 schema,则可以将该字段保留为空。
    • 约束到模式 (Schema):确定某些工具参数包含的值是否来自 Schema 而非手动输入。如果启用该选项,则禁用掉某些参数并从 Schema 中获取它们的值。如果禁用该选项,则刷新模式按钮也将被禁用。
    • XML 消息类型:确定响应选项卡的表单输入控件是针对 SOAP 消息还是纯 XML 消息。如果选择纯 XML,则表单输入模式将直接表示消息。如果选择 SOAP,则表单输入中配置的 XML 将用 SOAP 消息封套包装起来,并且视图将提供 SOAP 头部分,允许在需要时配置 SOAP 头。

响应选项

响应选项卡允许您配置希望模拟资产在接收特定请求时要传送的响应值。 

该选项是否可用取决于输入模式菜单中选择的是什么选项。

字面量 XML、表单 XML、脚本化 XML 和表单输入。

字面量 XML表单 XML脚本化 XML表单输入的可用选项 SOAP 客户端工具可用的选项相似。 

注意,如果在表单输入或表单 JSON 视图中启用资源选择器,则可以使用它来选择响应的资源。当选择一个资源时,表单输入视图和表单 JSON 视图用合适的值和 UI 控件(例如,布尔值的单选按钮、数字和整数的不同控件等)进行填充。 

  • 在表单输入模式中,资源选择器将显示关联服务定义 1)将响应定义为 XML 2)指定 XML 模式的所有资源。
  • 在表单 JSON 模式中,资源选择器将显示关联服务定义 1)将响应定义为 JSON 2)指定 JSON 模式的所有资源。

多响应视图

响应视图允许您指定用于特定请求的响应。 

条件选项卡中,您可以指定必须满足的请求条件,以便发送相关响应。可以使用 XPath 函数和/或 URL 参数为 RESTful 服务指定条件(内置支持可用于 GET 和 POST)。消息选项卡指定如果满足条件,将发送什么响应。

使用具有多响应的’始终匹配’

 如果出现以下情况,请启用始终匹配选项:

  • 想要指定无论传入消息的内容是什么,桩应该始终返回的单个响应,或者
  • 您有多个响应并且想要指定桩应该返回的最终响应。在这种情况下,如果先前条件都不匹配,它将作为兜底的最终响应。例如,您可以指定返回 SOAP 错误的“始终匹配”最终响应,表示服务处理请求失败,然后根据传入值返回相应内容。

如果不止一个 XPath 或 URL 参数匹配响应,则 SOAtest 将返回列表中第一个匹配的响应(使用按钮指定所需序列或响应)。如果为每个响应提供的 Xpath 或 URL 参数导致唯一匹配,则响应的顺序无关紧要。 

脚本化 XML 视图

脚本化 XML 视图允许指定复杂逻辑。详情请参阅Using Scripted Logic

传输消息头选项

传输消息头选项允许指定 HTTP、JMS 或 MQ 消息头属性。

测试关联性选项

测试关联性选项允许指定消息桩工具接收并处理哪些消息。将发送到桩 URL 的不同消息路由到基于此处设置的特定的消息桩工具(每一个都处理不同的操作)。例如,其中一个消息桩工具可能响应到客户注册消息,另一个可能响应到支付消息,而还有一个可能作为默认的“catch all”函数,当其他选项都不匹配时使用该函数。

可以通过在测试关联性选项卡区域指定消息桩接收的消息:

  • 传输:允许在消息中指定 HTTP 数据头、JSM 消息属性或 MQ 消息字段,这些字段将确定消息被处理过。
  • 请求体:允许您在消息中指定 XPath,这将确定是否处理该消息。
  • URL 参数(用于 RESTful 服务):允许指定 URL 参数,这将确定是否处理该消息。URL 参数可以重复(可以将同一参数设为不同值)。
  • 自定义:允许指定基于自定义方法的返回值的自定义测试关联性。关于使用自定义关联性的详细信息,请参阅以下提示框:

您可以配置关联性的其中一个类型、多类型,或者配置为没有关联性。如果配置为没有关联性,则将处理消息中的所有内容。 

使用自定义关联性

 自定义测试关联性基于自定义方法的返回值。要求:

  • 方法必须携带 0 或 1 个参数。
  • 可选参数的类型是 com.parasoft.api.ScriptingContext
  • 方法可以使用 ScriptingContext 对象访问传输头文件、URL 参数和传入消息的消息内容。

CorrelationScriptingHookConstants 的更多信息可在 Javadocs 中找到(请选择 Parasoft> 帮助,然后查找名为“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

传输关联性

配置传输关联性:

  1. 请选择启用关联性复选框。
  2. 点击添加按钮。将显示一个新的条目行。
  3. 输入要指定的消息关联的名称

请求体关联性

若要配置请求体消息关联性:

  1. 请选择启用关联性复选框。
  2. 点击编辑按钮。将显示一个编辑 Xpath 函数对话框。
  3. 元素树选择元素,从函数下拉菜单选择函数,然后点击 OK

URL 参数关联

若要配置 URL 参数关联性:

  1. 请选择启用关联性复选框。
  2. 点击添加按钮。将显示一个新的条目行。
  3. 输入要指定的关联的参数名

数据源关联性选项

数据源关联性选项卡允许指定要在桩响应中使用的数据源行值。

优点

配置具有多响应模式的桩的一个方法是手动配置消息桩工具的模式,根据传入消息的性质发送不同的响应消息。 

配置桩以动态响应所需消息的另一种方法是使用数据源。您可以轻松地填充数据源表(Excel 等),其中每行包含想要桩响应的传入消息(通常只需叶节点值)中的值,然后,另一列指定当满足指定条件时,您希望桩如何响应(详情请参阅使用现有数据源或快速创建响应的数据源)。在那之后,您可以配置请求响应消息值之间的映射以及数据源中的列。  

这样就可以在一个易于编辑的表(数据源)中轻松配置请求/响应用例,并在此对它们进行管理,以便随着消息数量的增加而进一步扩展,而且还能为响应消息提供更大的灵活性(因为表单输入允许您将某些值固定化,将其他值参数化,将某些值自动或甚至脚本化)。

这个数据源关联非常灵活。您可以配置桩,以超出精确的匹配/关联的规则和逻辑响应传入的请求值。例如,可以配置桩对信用卡号的最后 4 位数、小于或大于给定值的数值或其他模式和表达式进行计算。 

值匹配支持通配符 * 和 ?。例如,如果想要命名为“title keyword”的传入值来匹配只要包含单词 Linux 的某一行,则可以使用数据源值 "*Linux*"。* 匹配 0 或多个字符;? 匹配单个字符。

配置

若要参数化来自数据源的桩响应:

  1. 请确保在 SOAtest 中配置了数据源,并可用于消息桩。
  2. 数据源关联性选项卡中相应位置点击添加按钮,提供 Xpath 和/或 URL 参数,然后选择合适的列名。在执行部署的桩时,SOAtest 将从请求中提取特定值,然后在指定列中搜索与提取值对应的匹配项。如果找到匹配项,将使用相应数据源行中的数据填充响应
    • 如果提供服务定义,则可使用编辑按钮生成 XPath。该对话框实时验证 XPath 表达式和列名。
    • 如果选择自定义它们而不是使用可视的编辑选项,则 SOAtest 在键入/编写 XPath 表达式的时候会对 XPath 语法进行验证。
    • 可以在数据源列中使用通配符。
  3. 通过引用同一数据源中的其他数据源列(例如,表单输入、表单 XML 等),对消息桩的响应区域进行参数化。您可以向列名映射中添加多个 XPath 或 URL 参数。

处理详情

消息桩在测试套件中或者作为托管桩执行时,传入消息将通过这些 Xpath 表达式/URL 参数进行评估。然后根据相应的数据源值匹配这些值(每个都有其各自的列)来找到匹配该值的行。 

一系列匹配尝试将每个值匹配到相应的数据源行。如果在匹配尝试结束时未找到匹配项,则引擎将移至数据源中的下一行。如果在任何行中均未找到匹配项,则返回错误。  

匹配尝试按以下顺序进行:

  1. 精确/字面量字符串匹配
  2. 与通配符 * 匹配,* 表示零个或多个字符。例如,Linux* 匹配 "Linux"、"Linux Administration" 或 "Linux Administration Handbook"。
  3. 通过将数据源值字符串作为正则表达式进行处理来进行匹配。例如,这允许 abc-\d{3}-123 与任何如 abc-576-123, abc-000- 123 等的输入值匹配(中间部分是任何三位数字)。
  4. 通过将数据源值和正在评估的传入值作为数值进行处理来进行匹配。例如,这允许 10 与 10.0 匹配。
  5. 通过将传入值和数据源单元格值作为带有比较符的数值进行处理来进行匹配。允许的运算符有:<, >, <=, >=, != or <>.例如,如果提供的数据源值为 <= 14.99,则小于或等于 14.99 的传入值将与该特定值匹配。

如果消息桩的数据源关联列表中指定的所有值都匹配在该行中,则数据源行被视为是匹配的。

如果找到匹配的行,则该行将用于消息桩响应消息中的任何参数化值。通过这种方式,桩可以根据传入消息中的值响应所需的消息值。 

附件选项

附件选项卡允许您在不使用脚本的情况下发送二进制或 XML 附件。若要发送附件,请执行附件选项卡中的以下操作:

  1. 点击添加按钮。将在附件表中显示一个 XML 附件条目。
  2. 双击 XML 附件条目。将显示一个编辑附件对话框。
  3. 在编辑附件对话框中,从模式下拉菜单中选择 XML二进制

XML 模式有以下选项:

  • 视图:从下拉菜单中选择所需视图并相应地进行配置。选项有 XML 字面量、XML 格式、脚本化 XML表单输入

二进制模式有以下选项:

  • Base 64 编码:启用 Base 64 编码,对二进制值进行编码。
  • 数据源列:选择发送来自数据源列的值。
  • 文件:选择发送来自文件的值。通过点击浏览按钮选择所需的文件。如果要将该文件的路径作为当前配置文件的相对路径来保存,则选择保留为相对路径选项。
  • 文本:选择发送文本值。
  • 内容类型:指定内容类型。如果想对附件头信息进行添加/更改或删除操作,请点击编辑消息头按钮。

服务选项

服务选项选项卡允许配置处理消息的方式。可选择以下选项:

  • 消息交换模式:选择只征求响应或通知。
  • 返回状态允许指定如何返回消息。例如,模拟工作或有故障的服务。若要使用默认值 200 OK,则选择使用默认的返回状态复选框。如果未选择此选项,则可使用以下选项:
    • 返回状态输入自定义返回状态值。如果数据源可用,还可以参数化该值。
    • 返回消息:输入自定义返回消息。如果数据源可用,还可以参数化该值。
  • 请求处理:如果需要在数据源关联性或多响应“如果请求匹配”的条件逻辑前对请求消息进行转换,则选择在响应之前对消息应用传入请求工具。这对于必须更改 XML 以使其适用于关联性(或信息根本不是 XML,需要在桩向原始调用者发送合适的请求响应之前进行转换)而言十分重要。
  • 性能:在性能选项卡中可设置以下与执行时间相关的选项:
    • 超时 (毫秒):指定延迟的长度(以毫秒为单位),在此之后,SOAtest 应该考虑您的请求超时。默认设置为 30000。定制设置允许输入超时时间。可以输入一个非正超时值,表示指定无限的超时。
      • 因超时测试失败:选择此选项可使测试在指定超时时失败。
      • 仅当发生超时测试才通过:如果发生指定的超时(如,工具没有在指定的时间内完成执行),则选择此选项让测试通过。
    • 思考时间 (ms):输入想要消息延迟模拟的时间(以毫秒为单位)。这个可以用来模拟慢速服务。如果数据源可用,则可参数化该值。大于超时值的思考时间值不会强制执行超时。超时只有在消息未成功关联并且消息桩处于闲置状态或无法完成时才会发生。
  • 类型/使用:这些选项允许选择消息的主体样式和编码:
    • Body 格式:选择 document 或 rpc。
    • 使用:选择 encoded 或 literal。
    • 编码格式 URI:(如果可用,自动完成)列出用来发送请求的编码格式 URI。
    • 目标对象 URI:指定目标对象 URI。
  • 附件封装格式:指定是否使用默认定制封装格式。默认选项指在首选项面板的 SOAP 客户端选项卡中选择作为附件封装格式的任何选择(有关更多信息,请参阅 SOAtest 用户指南中“首选项设置> SOAP 客户端选项”主题。)定制选项允许选择 MIME、DIME、MTOM Always 或 MTOM Optional。
  • 消息头:允许在响应中添加自定义头部。

添加自定义头部

若要添加自定义头部:

  1. 请点击服务选项选项卡中的添加按钮。将打开一个对话框。
  2. 输入要指定的消息关联的名称
  3. 点击 OK

使用现有数据源或快速创建响应的数据源

在数据源中指定响应值是添加大量请求/响应对非常有效的一种方式。

使用现有数据源

如果已经拥有为请求参数和需要的相应参数指定值的数据源,则可以按如下方式使用这些值:

  1. 将数据源添加到 SOAtest。
  2. 使用合适的请求列配置消息桩的数据源映射(如Data Source Correlation Options中所述)。

快速创建数据源

如果没有这样的数据源,但又想要一个快速方法来指定多个请求/响应集。

  1. 根据生成用于填充消息元素的数据源模板中所描述的步骤,从消息桩工具的表单输入视图创建 CSV 文件。数据源将会生成并添加到响应器套件中。这个生成的数据源将包含响应的列。消息桩工具的表单输入视图将自动参数化。
  2. 为每个应该用于确定响应的请求参数添加新的数据源列(如,使用 Excel、OpenOffice 或相似的工作表应用程序)。可使用通配符。
  3. 使用添加的新请求列配置消息桩的数据源映射。详情请参阅Data Source Correlation Options
  4. 向数据源中(如,使用 Excel、OpenOffice 或相似的工作表应用程序)添加新的行,以便为请求参数和需要的相应的响应参数指定值。

使用脚本化逻辑

可以根据传入请求编写响应值的脚本。这允许对桩使用更复杂的逻辑。此外,消息桩允许通过脚本访问数据源值。访问这些值类似于通过扩展工具对它们进行访问。

对于如何使用在消息桩工具中使用脚本化逻辑,这里有个示例:

  1. 在消息桩工具的定义选项卡中输入服务定义。
  2. 右键点击消息桩节点,然后选择添加输出。将显示添加输出向导。
  3. 在添加输出向导中,从左窗格选择传入请求,右窗格选择 XML 数据库,然后点击完成
  4. 双击消息桩节点下的传入请求> XML 数据库节点。XML 数据库配置面板将显示在右侧 GUI 面板中。
  5. 在右侧 GUI 面板中,添加想要在脚本中访问的值的 XPath。



  6. 双击消息桩节点。消息桩配置面板将显示在右侧 GUI 面板中。
  7. 消息选项卡中,请选择脚本化视图。
  8. 启用使用数据源选项。



  9. 指定逻辑。以下是访问数据源和数据库值的基本模板:

    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




  10. 方法组合框中选择合适的方法。您选择的方法应该是您的入口点。在上述示例中,方法是 customLogic()

向消息桩添加附件处理程序

将附件处理程序添加到消息桩中以在发送消息附件时测试附件处理可能会很有用。若要向消息桩添加附件处理程序:

  1. 请选择消息桩节点并点击添加测试或输出按钮。将显示添加输出向导。
  2. 在添加输出向导中,从左窗格选择传入附件,右窗格选择附件处理程序,然后点击完成
  3. 双击附件处理程序节点,然后在工具配置面板中对工具进行配置。
  4. (可选项)选择消息桩节点下的附件处理程序节点,然后点击添加测试/添加输出按钮。将显示添加输出向导,您可以从中添加一个写入文件工具,将附件作为二进制文件输出。
  • No labels