消息桩函数(Message Stub)用来模拟服务,它是 SOAP 客户机的补充。该工具用于通过返回一条消息排除服务。如果存在桩函数许可证,它可以响应多个消息,并且可以为服务定义中定义的操作自动生成桩函数许可证。
本章包含:
关于消息桩函数
可以将消息桩函数工具作为端到端测试场景的一部分来调用。在该特定消息桩函数测试步骤作为测试序列的一部分调用时,SOAtest 的本地服务器将启用监听消息。它将使用消息,然后按照消息桩函数工具配置中定义的方式进行响应。完成此操作后,将执行测试场景中的下一个测试。
消息桩函数可以集成到端到端的测试场景,以便在测试套件执行流中的所需位置调用它们,并可以触发额外的测试操作。
例如,为了验证执行具有多步骤的业务处理流的贷款批准服务(包括调用经理批准服务和另一个外部信用评级服务),可以使用以下测试构建场景:
- 测试 1:向贷款批准服务发送请求,以启动流程。
- 测试 2:作为桩函数,通过 HTTP 监听传入的信用评级服务,并使用场景所需的评级进行响应(模拟信用评级服务响应)。
- 测试 3:作为桩函数,通过 JMS 队列上的管理器批准消息,并以批准、拒绝等方式响应。
- 测试 4:从贷款流程中获得带有最终贷款结果的异步响应,并验证它。
- 测试 5:对关系数据库执行查询,检查贷款申请是否在数据库中被正确审计。
- 测试 6:从数据库中移除申请数据,以便将其恢复到原始状态,并使测试场景可重复。
这些桩函数可以使用数据源中的数据进行参数化。
当你希望你的应用程序与桩函数(而不是实际资源)进行交互时,配置你的应用程序以访问将在 http://<localhost>:9080/servlet/MessageHandler 上部署的桩函数。注意,以这种方式创建和部署的每个桩函数具有相同的 URL。因为根据测试套件逻辑,消息桩函数工具很有可能在同一时间被调用。
可以通过附加到消息桩函数工具的流量视图器工具,获得对消息桩函数工具行为的可见性。
服务定义选项
在 Definition 选项卡中指定选项,以允许 SOAtest 使用让你更能轻松指定响应消息的项填充 Response 选项卡。可以指定与服务定义或 schema 相关的以下设置,其中定义了预期的请求和输出响应:
- Service Definition:指定响应程序是否与服务定义(RAML、OpenAPI/Swagger、WSDL 或 Schema)相关联。对于纯 XML,请选择 None。当指定了服务定义,并且该工具受到了 WSDL 或 schema 的约束,则将自动向可应用的表单视图中填充合适的字段值和控件(例如,布尔值的单选按钮、数字与整数的不同控件,枚举的下拉列表)。它也防止输入无效的消息(例如,消息缺失必要值、不正确类型的值、schema 中未指定的方法/资源/响应代码等等)。编辑将受到限制,以确保消息符合相关的模式(例如,将无法对树节点进行插入、删除、重命名、复制或粘贴操作)。
- For RAML Service Definition Mode
- RAML URL:特定的 RAML URL,或引用 RAML URL 的变量。
- RAML URL:特定的 RAML URL,或引用 RAML URL 的变量。
- For OpenAPI/Swagger Service Definition Mode
- OpenAPI/Swagger URL:特定的 OpenAPI/Swagger URL,或引用 OpenAPI/Swagger URL 的变量。
- OpenAPI/Swagger URL:特定的 OpenAPI/Swagger URL,或引用 OpenAPI/Swagger URL 的变量。
- For WSDL Service Definition Mode
- 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,则可以将该字段保留为空。
- For Schema Service Definition Mode
- Schema URL:说明可访问该服务的 Schema URL。可以输入值或单击 Browse 按钮。如果没有 schema,则可以将该字段保留为空。
- Constrain to Schema:确定某些工具参数包含的值是否来自 Schema 而非手动输入。如果启用该选项,则禁用掉某些参数并从 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 选项卡指定在满足条件时将发送什么响应。
使用具有多响应的‘始终匹配’
在以下情况中启用 始终 匹配 选项:
- 希望指定桩函数应 始终 返回的单个响应 - 不管传入消息的内容是什么,或者
- 拥有多响应并希望指定桩函数应返回 最终 响应。在这种情况下,如果之前的条件都不匹配,则它将提供一个全方位的、最后的响应。例如,可以指定一个“始终匹配”最终响应,该响应返回一个 SOAP 错误,表示服务未能处理请求并根据传入的值返回一些内容。
如果存在多个 Xpath 或 URL 参数匹配响应,则 SOAtest 将返回列表中第一个匹配的响应(使用 Up 和 Down 按钮指定所需顺序或响应)。如果为每个响应提供的 XPath 或 URL 参数导致唯一匹配,则相应的顺序将无关紧要。
脚本化 XML 视图
Scripted XML 视图允许指定复杂的逻辑。有关更多详情信息,请查阅 Using Scripted Logic。
传输数据头选项
Transport Header tab 允许指定 HTTP、JMS 或 MQ 消息数据头属性。
关联性选项
Test Correlation 选项卡允许指定该消息桩函数工具/测试接受和处理哪些消息。将发送到桩函数 URL 的不同消息路由到基于此处设置的特定消息桩函数工具(每一个都处理不同的操作)。例如,其中一个消息桩函数工具可能响应到客户注册消息,另一个可能响应到支付消息,而还有一个可能作为默认的“全方位(catch all)”函数,当其他选项都不匹配时使用该函数。
可以通过在以下 Test Correlation 选项卡区域输入值,指定消息桩函数接收的消息:
- Transport:允许在消息中指定 HTTP 数据头、JMS 消息属性或 MQ 消息字段,这些字段将确定消息是否被处理。
- Request Body:允许在消息中指定 XPath,这将确定是否处理该消息。
- URL Parameters (for RESTful services):允许指定 URL 参数,这将确定是否处理该消息。URL 参数可以是重复的(你可以拥有设置为不同值的相同参数)。
- Custom:允许指定自定义测试关联性,该关联性基于自定义方法的返回值。关于使用自定义关联性的更多详情,请查阅以下提示框。
可以配置关联性的其中一个类型、多类型,或者配置为没有关联性。如果配置为没有关联性,则将处理消息中的所有内容。
使用自定义关联性
自定义测试关联性基于自定义方法的返回值。要求:
- 方法必须携带 0 或 1 个参数。
- 可选参数的类型是
com.parasoft.api.ScriptingContext
。 - 方法可以使用 ScriptingContext 对象访问传输头文件、URL 参数和传入消息的消息内容。
关于更多信息,可在 CorrelationScriptingHookConstants (选择 Parasoft> Help,然后查找标题为“Parasoft SOAtest Extensibility API”的书)的 Javadocs 中找到。
例如,如果希望测试基于正则表达式的纯文本消息,可以使用:
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 按钮。将显示一个编辑 XPath 函数对话框。
- 从 Element 树选择元素,从 Function 下拉菜单选择函数,然后单击 OK。
URL 参数关联性
若要配置 URL 参数关联性:
- 选择 Enable correlation 多选框。
- 单击 Add 按钮。将显示一个新的条目行。
- 输入要指定的消息关联性的 Parameter Name 和 Value 。
数据源关联性选项卡
Data Source Correlation 选项卡允许指定要在桩函数响应中使用的数据源行值。
优点
使用 Multiple Responses 模式配置桩函数的一个方法是手动配置消息桩函数工具,根据传入的消息发送不同的响应消息。
配置桩函数以动态响应所需消息的另一个方法是使用数据源。你可以轻松地填充数据源表(Excel 等),其中每行包含希望桩函数响应的传入消息(通常只需叶节点值)中的值;然后,另一列指定当满足指定条件时,希望虚拟资产如何响应(有关更多详情,请查阅 Using Existing Data Sources or Rapidly Creating Data Sources for Responses )。在那之后,你可以配置请求响应消息值之间的映射以及数据源中的列。
这允许在一个易于编辑的表(数据源)中轻松配置请求/响应用例,它允许在那里对它们进行管理,以便随着越来越多的消息进一步扩展,同时它还为响应消息提供了更大地灵活性(因为表单输入允许你固定一些值,参数化一些值,自动化一些值或脚本化一些值。)
这个数据源关联非常灵活。可以配置桩函数,以使用超出了精确的匹配/关联的规则和逻辑对传入的请求值进行响应。例如,可以配置桩函数对信用卡号的最后 4 位数、小于或大于给定值的数值或其他模式和表达式进行计算。
值匹配支持使用通配符 * 和 ?。例如,如果想要命名为“title keyword”的传入值与只要包含单词 Linux 的某一行相匹配,则可以使用数据源值 "*Linux*"。* 匹配 0 或多个字符;? 匹配单个字符。
配置
若要参数化来自数据源的桩函数响应:
- 确保在 SOAtest 中配置了数据源,并可用于消息桩函数。
- 在 Data Source Correlation 选项卡中合适的地方单击 Add 按钮,提供 XPath 和/或 URL 参数然后选择合适的列名。在执行部署的桩函数时,SOAtest 将从请求中提取特定值,然后在指定列中搜索与提取值对应的匹配项。如果找到匹配项,将使用相应数据源行中的数据填充响应
- 如果提供服务定义,则可使用 Edit 按钮生成 XPath。该对话框实时验证 XPath 表达式和列名。
- 如果选择自定义它们而不是使用可视的 Edit 选项,则 SOAtest 在键入或编写 XPath 表达式的时候会对 XPath 语法进行验证。
- 可以在数据源列中使用通配符。
- 通过引用同一数据源中的其他数据源列(例如,表单输入、表单 XML 等),对消息桩函数的响应区域进行参数化。你可以向列名映射中添加多个 XPath 或 URL 参数。
详情处理
当消息桩函数在测试套件中执行时,或作为托管桩函数执行时,传入的消息都将通过这些 XPath 表达式/URL 参数进行计算。然后根据相应的数据源值匹配这些值(每个都有其各自的列)来找到匹配该值的行。
一系列匹配尝试将每个值匹配到对应的数据源行。如果在匹配尝试结束时都还未找到匹配项,则引擎将移至数据源中的下一行。如果任意一行中都没有匹配项,则将返回一个错误。
匹配尝试按以下顺序进行:
- 准确/文字字符串匹配
- 使用通配符 * 进行匹配,它表示 0 个 或 多个字符。例如,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 的传入值将匹配该特定值。
如果消息桩函数的数据源关联列表中指定的所有值都匹配在该行中,则数据源行被视为是匹配的。
如果找到了匹配行,则该行将用于消息桩函数的响应信息中的任何参数化值。通过这种方式,桩函数可以根据传入消息中的值响应所需的消息值。
附件(Attachment)选项
Attachment 选项卡允许在不使用脚本的情况下,发送二进制或 HTTP 附件。若要发送附件,请执行附件选项卡中的以下操作:
- 单击 Add 按钮。将在附件表中显示一个 XML Attachment 条目。
- 双击 XML Attachment 条目。将显示一个 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)选项
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:允许设置与执行时间(注意,消息桩函数的执行时间是从 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 值将不会强制超时。只有在消息没有成功关联并且消息桩函数处于空闲状态时才会发生超时,而无法完成测试。
- 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 选项指定在首选项面板的 SOAP 客户端选项卡中的附件封装格式(有关更多信息,请查阅主 SOAtest 用户指南的 "Preference Settings> SOAP Client Options” 主题)。 Custom 选项允许选择 MIME、DIME、MTOM Always 或 MTOM Optional。
- Headers:允许在响应中添加自定义数据头。
添加自定义数据头
若要添加自定义数据头:
- 单击 Service Options 选项卡中的 Add 按钮。将打开一个对话框。
- 输入要指定的消息关联性的 Name 和 Value 。
- 然后单击 OK.
使用现有数据源或快速创建响应的数据源
在数据源中指定响应值是添加大量请求/响应对非常有效的一种方式。
使用现有数据源
如果已经拥有为请求参数和需要的相应相应参数指定值的数据源,则你可以如下使用这些值:
- 向 SOAtest 添加数据源。
- 使用合适的请求列配置消息桩函数的数据源映射(如 Data Source Correlation Options中所述)。
快速创建数据源
如果没有这样的数据源,但又想要一个快速方法来指定多个请求/响应集。
- 根据 Generating a Data Source Template for Populating Message Elements 中所描述的步骤,从消息桩函数工具的表单输入视图创建 CSV 文件。数据源将被生成并添加到测试套件。这个生成的数据源将包含响应的列。消息桩函数工具的表单输入视图将自动参数化。
- 为每个应该用于确定响应的请求参数添加新的数据源列(如,使用 Excel、OpenOffice 或相似的工作表应用程序)。可使用通配符。
- 使用添加的新请求列配置消息桩函数的数据源映射。有关更多详情,请查阅 Data Source Correlation Options 。
- 向数据源中(如,使用 Excel、OpenOffice 或相似的工作表应用程序)添加新的行,以便为请求参数和需要的相应的响应参数指定值。
使用脚本化逻辑
可以根据传入请求编写响应值的脚本。这允许对桩函数使用更复杂的逻辑。此外,消息桩函数允许通过脚本访问数据源值。访问这些值类似于通过扩展工具对它们进行访问。
关于如何在消息桩函数工具内使用脚本化逻辑的示例:
- 在消息桩函数工具的 Definition 选项卡中输入定义。。
- 右键单击 Message Stub 节点,然后选择 Add Output。将显示 Add Output 向导。
- 在添加输出向导中,从左窗格选择 Incoming Request ,右窗格选择 XML Data Bank ,然后单击 Finish。
- 双击 Message Stub 节点下的 Incoming Request> XML Data Bank 节点。XML 数据库配置面板将显示在右侧 GUI 面板中。
- 在右侧 GUI 面板中,添加想要在脚本中访问的值的 XPath。
- 双击 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 节点并单击 Add test or output 按钮。将显示 Add Output 向导。
- 在添加输出向导中,从左窗格选择 Incoming Attachment ,右窗格选择 Attachment Handler ,然后单击 Finish
- 双击 Attachment Handler 节点,然后在工具配置面板中对工具进行配置。
- (可选项)选择 Message Stub 节点下的 Attachment Handler 节点,然后单击 Add Test/Add Output 按钮。将显示 Add Output 向导,你可以从中添加一个编写文件工具,将附件作为二进制文件输出。