本节应用于 Populate 选项,该选项可用于表单输入和表单 JSON 树。

为什么用数据源值填充和参数化元素?

假设您有一个类似于这样的复杂请求消息。


<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 <SOAP-ENV:Body>
   <book>
    <id xmlns="">0</id>
    <title xmlns=""></title>
    <price xmlns="">0.0</price>
    <authors xmlns="">
     <i></i>
     <i></i>
    </authors>
    <publisher xmlns="">
     <id myAtt="attVal">1</id>
    </publisher>
   </book>
  </addNewItems>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


您将需要参数化上面的大部分元素,甚至一些数组,它们包含的元素数量可能会有所不同(例如上面示例中的作者列表)。  这是数据驱动的测试。

然而,手动创建一个包含数据的 Excel 电子表格,并对每个单独的元素进行参数化,可能非常耗时且乏味。 

如果您已经有了一个现有的数据源,那么便可以使用 Populate 特性(如下所述)自动将数据源值映射到消息元素。 

如果还没有包含这些值的数据源,那么可以使用 Populate 特性(如下所述)为一组表单字段自动生成简单的值。还可以自动生成并完成数据源模板,如 Generating a Data Source Template for Populating Message Elements中所述。

数据源映射和命名规范

当参数化元素或属性值时,有三种可能性: 

  • 指定一个值
  • 指定元素应该为 Nil 或 Null
  • 指定应该完全排除的元素。

指定值

将数据源列与请求元素匹配是通过应用于数据源列名的某些命名规范来实现的。  在上面的示例 XML 中,注意有 2 个名为“id”的元素。为了区分它们,我们可以使用“book/id”作为一个列名,“book/publisher/id”作为另一个列名。  这种命名规范模仿文件目录结构或 XPath。  属性也是类似地标识的,使用“@”符号的附加规范。  在上面的示例中,“book/publisher/id@myAtt”引用发布者 id 的属性“myAtt”。

接下来,考虑几个元素可能具有相同名称的情况,如上面的 authors 元素所示。“book/authors/i”标识符适用于这两个元素,因此我们需要一种方法来区分它们。  在本例中,我们可以将括号“()”中的数组号附加到同名的重复元素。因此,“book/authors/i(1)”标识第一个元素,“book/authors/i(2)”标识第二个元素。

指定 Nill 和 Exclude

在某些情况下,您可能希望指定一个元素显示为 Nil,或者该元素不应该出现在请求消息中。  默认情况下,为 exclude 添加“XL”,为 nil 值添加“NIL”将完成此目标。  例如,一个名为“book/authors/iXL(2)”的列允许您指出 authors 标记的第二个子标记不应该发送,例如只有一个 author 的情况。

如何用数据源值填充和参数化元素?

Populate 选项适用于表单输入和表单 JSON 树。

在大型复杂消息请求的情况下,配置请求消息中的每个元素和属性项,然后使用正确的数据源列对其进行参数化的过程可能非常耗时。因此,可以使用自动填充和参数化特性加速此过程。

最终,当该特性与相关的数据源命名规范一起使用时,它可以提供巨大的生产力收益,特别是在处理包含数百个嵌套的复杂元素的消息时。它还允许您专注于以数据驱动的方式(使用数据源)设计用例,而不是专注于单独配置每个消息参数的容易出错的方法。

SOAtest 5.x 用户需注意的事项

 

在 SOAtest 5.x 中,填充特性可用于表单 XML 和文本 XML 视图。它填充表单输入,然后用表单输入的值覆盖表单 XML 或文本 XML 中的值。 

在 6.x 及更高版本的 SOAtest 中,您应该填充表单输入,然后切换视图以获得相同的效果。

若要使用数据源值自动填充和参数化元素,请完成以下操作:

  1. 右键单击树(而不是特定元素)的空白区域,然后从快捷菜单选择 Populate 。

  2. 启用 Map parameter values to data source columns 告诉 SOAtest 自动将每个表单输入参数设置为 Parameterized
  3. 选择名称与参数名称匹配的数据源列。例如,如果数据源有一个列名为 "title” 并且一个表单输入元素具有相同的名称 "title",那么 "title” 元素将被映射为数据源列 "title”等等。
  4. 根据需求自定义其余选项。有关更多详情,请查阅 填充向导选项 。
  5. 单击 OK。  Populate Results 对话框将显示概要和详细信息。

填充向导选项

选项
说明
Map parameter values to data source columns

(只有在有数据源时才启用。)指明是否自动将每个表单输入参数设置为 Parameterized ,以及是否选择名称与参数名称匹配的数据源列。例如,如果数据源有一个列名为 "title” 并且一个表单输入元素具有相同的名称 "title",那么 "title” 元素将被映射为数据源列 "title”等等。

Element Exclusion

不适用于存储库数据源

指明是否也映射属性 Use data source:带数据源列的Exclude [element name] with empty string 。 

关于使用空字符串排除选项的更多详情,请查阅 Using Data Source Values to Configure if Optional Elements Are Sent 

以下选项可从 Element Exclusion 下拉菜单获得:

  • Always Include: 指示 SOAtest 始终添加可选的新元素(模式类型属性 minOccurs='0')作为填充过程的一部分。添加的元素数量 Number of sequence (array) items 字段的数量决定。默认情况下,该值设置为 2。
    该选项不适用于表单 JSON。

  • Leave Unchanged: 将每个 sequence 元素保留为当前状态。不添加任何新元素,也不修改任何 exclusion 属性。

  • Use Data Source: 指示映射 Use data source的填充过程:每个表单输入元素的Exclude [element name] with empty string 属性附加到具有相同名称但值后缀为 XL 的数据源。  如果指定数据源列中的值是空字符串,则消息中将不包含可选元素。如果它是一个实际值,则该值将作为消息的一部分发送。

后缀 XL 在 Exclude column name postfix 字段中指定;XL 是默认值。例如,如果请求 XML 消息包括名为 "title” 的元素,并且模式中的该元素类型使用属性 minOccurs='0’定义,那么 Use data source:当右键单击标题的父节点时,可以在表单输入视图中使用Exclude title with empty string 选项。填充特性将把exclude属性映射到名为 "titleXL”的数据源,假设指定 "XL” 为后缀。 

Nillable Elements / Null Elements

不适用于存储库数据源

类似于 Element Exclusion ,除了  Nillable Elements 影响 Use data sourceSet nil with empty string 属性。此表单输入属性可用于设置 nillable="true"模式类型的元素。当数据源存在空字符串时,将把 nil 属性作为消息的一部分发送。如果指定了值,则请求元素将包含指定的值;将不发送 nil 属性。如果数据源有一个空字符串(例如,“”),那么 request 元素将没有值,并且将包含 xsi:nil=“true”属性。关于更多详情,请查阅 Using Data Source Values to Configure if Nil or Null Attributes Are Used

对话框的 Nillable column name postfix 字段指定后缀。
"Always expand” 设置不适用于表单 JSON。

Attribute Exclusion

不适用于存储库数据源或表单 JSON

指示填充过程是否自动添加可选属性。

数据源映射和命名规范

For both sequence (Array) and nested types: 值映射和 exclude/nillable 映射基于元素名称和列名之间的名称匹配约定。但是,在某些情况下,XML 消息中重用了相同的元素名,因此如果要维护每个元素和数据源列之间的一对一映射,则需要避免映射冲突。

For nested complex types: 类似 XPath 的数据源列名可用于消除歧义。例如,您可以使用 "book/title” 作为列名,而不是使用数据列名 "title",因此它将映射到 "book”下的任何 "title" 元素。如果这可能导致歧义,您还可以使用诸如 "addNewItem/book/title" 之类的列名进一步确定应该与哪个元素关联。

For sequence types (arrays where items with the same name are repeated): 项目索引号可用于消除歧义。例如,在 Parasoft 商店服务中, book 类型有一个 authors 元素,然后可以有许多 "i" 元素来表示作者列表。只使用数据源列名 "i” 可能导致该数据源列映射到所有出现元素 "i"的地方。 

使用数据源列名 "i[2]” 将导致该列名作为序列中的第二项映射到所有出现的 "i" 。(索引号从 1 开始,而不是按照 Xpath 规范从 0 开始)。如果使用了列名 "authors/i[2]” ,那么它将只映射到 "authors”下的第二个 "i" 元素。

注意,如果 XML 消息中出现多个 "authors” 元素,那么所有的列都将相应地映射,除非使用足够的 Xpath 父节点消除列名的歧义,使映射成为一对一的。括号可以用作数值索引语法,所以 "authors/i(2)” 会映射到相同的元素 "authors/i[2]"。() 语法与 Xpath 规范不一致,但是当使用 [] 不是有效 SQL 字符的数据库数据源时,它很有用。

Exclude and Nillable mapping: 遵循与值相同的 XPath 和索引约定。例如,若要根据数据源列排除或包括 "i” 元素,则您可以使用列名 "authors/iXL[2]” 来明确指出它要用于哪些元素。

  • No labels