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

前言

手动创建一个包含数据的 Excel 电子表格,并对复杂请求消息中每个单独元素进行参数化,可能非常耗时且乏味。如果您有一个现有的数据源,那么便可以使用填充特性自动将数据源值映射到消息元素。如果还没有包含这些值的数据源,那么可以使用填充特性为一组表单字段自动生成简单的值。还可以自动生成并完成数据源模板,如 生成用于填充消息元素的数据源模板中所述。

数据源映射和命名规范

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

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

我们将使用以下示例讨论数据源映射,该示例表示包含您可能要参数化的元素的复杂请求消息。 

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <SOAP-ENV:Body>
  <addNewItems xmlns="http://www.parasoft.com/wsdl/store-01/">
   <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>

该示例包括具有可变元素数(如,作者列表)的数组。将填充特性与相关的数据源命名规范一起使用比手动填充元素更有效,并且允许您专注于以数据驱动的方式(使用数据源)设计用例,而不是专注于单独配置每个消息参数的易出错方法。

指定值

将数据源列与请求元素匹配是通过应用于数据源列名的某些命名规范来实现的。在上面的示例 XML 中,有两个名为 id的元素。您可以通过将其中一行命名为 book/id  ,另一个 book/publisher/id来区分元素。  

这个命名规范模仿文件目录结构或 XPath。属性也是类似地标识的,使用 @ 符号的附加规范。  在上面的示例中, book/publisher/id@myAtt 引用 publisher ID 的属性 myAtt 。

几个元素可能具有相同的名称,例如 authors 元素中示例的 book/authors/i 标识符。如果元素具有相同的名称,则可以使用括号内 "()" 的数组号来标识重复的元素。例如, book/authors/i(1) 标识第一个元素, book/authors/i(2) 标识第二个元素。

指定 Nil 和 Exclude

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

使用说明

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

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

填充向导选项

选项
说明
将参数值映射到数据源列

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

元素排斥

不适用于存储库数据源

指明是否也映射属性 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。

  • 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 元素/ Null 元素

不适用于存储库数据源

类似于 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 字段指定后缀。

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