Message Stub 用于模拟服务,并且是 SOAP 客户端的补充。本工具用于对返回单个消息的服务进行打桩。如果存在桩函数许可证,则它可以响应多个消息,并可以针对服务定义中定义的操作自动生成。

本章包含: 

关于 Message Stub

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

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

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

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

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

您可以通过附加到它们上的 Traffic Viewer 工具来查看 Message Stub 工具的行为。

服务定义选项

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

响应选项

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

该选项是否可用取决于 Views 菜单中选择的是什么选项。

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

Literal XML, Form XML, Scripted XML, 或 Form Input 的可用选项 SOAP 客户端工具可用的选项相似。 

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

多响应视图

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

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

 如果出现以下情况,请启用 Always Match 选项:

  • 想指定不管传入消息内容是什么桩应该 始终 返回的单个响应,或者
  • 您有多个响应,所以想指定桩应该返回的 最终 响应。在这种情况下,如果先前条件都不匹配,则它将处理全部捕获的最后请求响应。例如,您可以指定“始终匹配”返回 SOAP Fault 的最终响应,SOAP Fault 表示服务处理请求失败,根据传入值返回的某些内容。

如果不止一个 XPath 或 URL 参数匹配响应,则 SOAtest 将返回列表中第一个匹配的响应(使用 UpDown 按钮指定所需序列或响应)。如果为每个响应提供的 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 接收的消息:

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

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

  • 方法必须携带 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

传输关联性

若要配置传输关联性:

  1. 选择 Enable correlation 多选框。
  2. 单击 Add 按钮。将显示一个新的条目行。
  3. 输入要指定的消息关联的 NameValue

请求体关联性

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

  1. 请选择 Enable correlation 多选框。
  2. 单击 Edit 按钮。将显示一个 Edit XPath Function 对话框。
  3. Element 树选择元素,从 Function 下拉菜单选择函数,然后单击 OK

URL 参数关联

若要配置 URL 参数关联性:

  1. 请选择 Enable correlation 多选框。
  2. 单击 Add 按钮。将显示一个新的条目行。
  3. 输入要指定的关联的 Parameter NameValue

数据源关联性选项卡

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 或多个字符; ? 匹配单个字符。

配置

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

  1. 请确保在 SOAtest 中配置了数据源,并可用于 Message Stub。
  2. Data Source Correlation 选项卡中合适的地方单击 Add 按钮,提供 Xpath 和/或 URL 参数,然后选择合适的列名。在执行部署的桩时,SOAtest 将从请求中提取特定值,然后在指定列中搜索与与提取值对应的匹配项。如果找到匹配项,将使用相应数据源行中的数据填充响应
  3. 通过引用同一数据源中的其他数据源列(例如,表单输入、表单 XML 等),对 Message Stub 的响应区域进行参数化。您可以向列名映射中添加多个 XPath 或 URL 参数。

详情处理

Message Stub 在测试套件中或者作为寄宿桩执行时,传入的消息将通过这些 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 的传入值将与该特定值匹配。

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

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

附件选项

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

  1. 单击 Add 按钮。将在 Attachment 表中显示一个 XML Attachment 条目。
  2. 双击 XML Attachment 条目。将显示一个 Edit Attachments 对话框。
  3. 在 Edit Attachments 对话框中,从 Mode 下拉菜单中选择 XMLBinary

XML 模式有以下选项:

Binary 模式有以下选项:

服务选项

Service Options 选项卡允许配置处理消息的方式。可使用以下选项:

添加自定义数据头

若要添加自定义数据头:

  1. 请单击 Service Options 选项卡中的 Add 按钮。将打开一个对话框。
  2. 输入要指定的消息关联的 NameValue
  3. 单击 OK

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

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

使用现有数据源

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

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

快速创建数据源

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

  1. 根据 Generating a Data Source Template for Populating Message Elements 中所描述的步骤,从 Message Stub 工具的表单输入视图创建 CSV 文件。数据源将被生成并添加到响应程序套件。这个生成的数据源将包含响应的列。Message Stub 工具的表单输入视图将自动参数化。
  2. 为每个应该用于确定响应的请求参数添加新的数据源列(如,使用 Excel、OpenOffice 或相似的工作表应用程序)。可使用通配符。
  3. 使用添加的新请求列配置 Message Stub 的数据源映射。有关更多详情,请查阅 Data Source Correlation Options 。
  4. 向数据源中(如,使用 Excel、OpenOffice 或相似的工作表应用程序)添加新的行,以便为请求参数和需要的相应的响应参数指定值。

使用脚本化逻辑

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

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

  1. 在 Message Stub 工具的 Definition 选项卡中输入服务定义。
  2. 右键单击 Message Stub 节点,然后选择 Add Output。将显示 Add Output 向导。
  3. 在 Add Output 向导中,从左窗格选择 Incoming Request ,右窗格选择 XML Data Bank ,然后单击 Finish
  4. 双击 Message Stub 节点下的 Incoming Request> XML Data Bank 节点。XML 数据库配置面板将显示在右侧 GUI 面板中。
  5. 在右侧 GUI 面板中,添加想要在脚本中访问的值的 XPath。



  6. 双击 Message Stub 节点。Message Stub 配置面板将显示在右侧 GUI 面板中。
  7. Response 选项卡中,请选择 Scripted 视图。
  8. 启用 Use Data Source 选项。



  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. Method 组合框中选择合适的方法。您选择的方法应该是您的入口点。在上述示例中,方法是 customLogic()

向 Message Stub 添加附件处理器

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

  1. 请选择 Message Stub 节点并单击 Add test or output 按钮。将显示 Add Output 向导。
  2. 在 Add Output 向导中,从左窗格选择 Incoming Attachment ,右窗格选择 Attachment Handler ,然后单击 Finish
  3. 双击 Attachment Handler 节点,然后在工具配置面板中对工具进行配置。
  4. (可选项)选择 Message Stub 节点下的 Attachment Handler 节点,然后单击 Add Test/Add Output 按钮。将显示 Add Output 向导,您可以从中添加一个 Write File 工具,将附件作为二进制文件输出。