本主题涵盖了固定长度客户端工具,支持固定长度和 XML 格式之间的转换。它还解决固定长度回调工具,简化对传入的固定长度消息的处理。 

本章包含:

关于这些工具

固定长度客户端是预先配置为对固定长度消息进行操作的 EDI 客户端 工具的一个实例。可以直接从 Add Tool 向导中创建一个固定长度客户端工具。或者,可以添加一个 EDI 客户端工具并将其格式更改为固定长度。随后,工具名称将更改为固定长度客户端(除非禁用了 Use Default Name 选项)。

同样地,固定长度回调工具是预先配置为对固定长度消息进行操作的 增强版回调工具 工具的一个实例。若要创建固定长度回调工具,请添加一个高级回调工具并将其格式更改为固定长度。随后,工具名称将更改为固定长度回调(除非禁用了 Use Default Name 选项)。

关于固定长度格式

固定长度是一种没有标准定义的数据格式。总的说来,固定长度数据格式由记录数组成。每个记录有一个或多个字段,每个字段都有其固定长度(因此得名“固定长度格式”)。这些字段之间通常不能使用分隔符。  

例如

一个简单的示例,考虑这样一个消息,其中每个记录位于不同的行上,并且只包含两个字段:

  • last name
  • first name

每个字段都是 10 个字符长度,右对齐,并由空格填充。

     Smith      John
       Doe      Jane

固定长度格式的记录可能具有嵌套的 sections,这些 sections 也具有固定长度格式的记录。这些嵌套的 sections 可以有不同数量的记录。考虑基于第一个示例的第二个固定长度格式。假设,对于每个人,我们想要指定该个人拥有的宠物的可变数量。我们将从上面使用的数据格式开始,但是对于每个记录,我们将添加以下内容:

  • number 字段指定宠物的数量为 2 个字符,用 0 填充。
  • 可变数量的 sections,其中每个 section 都包含宠物的 type 和 name。sections 的数量等价于指定宠物数字段中的数量。宠物 type 字段为 5 个字符长度,右对齐。宠物 name 字段为 10 个字符长度,右对齐。

下面是该数据的示例。

     Smith     John00
       Doe     Jane02  Cat     Fluffy  Dog     Spot

第一个人记录有 0 个宠物,第二个人记录有 2 个宠物。宠物子 section 有宠物记录,这些记录可以出现可变次数。

在 SOAtest 中使用固定长度消息

由于存在很多不同的固定长度格式(并且没有单个标准),Parasoft SOAtest 很容易配置为识别组织团队使用的任何固定长度消息格式。这使我们能够在使用非常专门化的消息类型时,利用 SOAtest 丰富的接口进行消息配置、发送和验证。

为了在 SOAtest 中配置并验证固定长度消息,需要执行以下一次性的配置:

  1. 定义描述固定长度数据格式的数据模型
  2. 注册数据模型,以便 SOAtest 可以在固定长度客户端(和其他可应用的工具)中使用它。

此时,你便可以在固定长度客户端、固定长度回调工具和 XML 转换器中使用数据模型。可以在配置固定长度客户端中的消息,并在固定长度客户端输出中配置验证。

下面几节将详细介绍这些步骤。

定义描述固定长度格式的数据模型

描述定义描述固定长度格式的数据模型需要两个主要步骤:

创建新的数据模型定义文件

在 SOAtest 中使用固定长度消息的第一步是定义描述固定长度格式的数据模型。

若要创建新的数据建模:

  1. 选择 File> New> Data Model Definition File
  2. 指定将存储数据模型定义的文件的名称和相对于工作区的位置。(如果想将文件保存在工作空间之外的某个地方,请先将其保存到工作区中,然后再将其移动。)建议将数据建模文件保存在工作区汇总,以便可以将它连同测试一起检入源代码控制。这样就很容易获得最新更新的数据模型文件,以便在测试项目中使用。
  3. 单击 Finish

向导将在选中的工作区位置中创建一个扩展名为 .datamodel 的文件。文件不会出现在测试用例资源管理器中。可以通过切换至导航器视图并查看保存它的项目内部来找到它

编辑数据建模定义 

使用数据建模编辑器的下一步是告诉 SOAtest 固定长度的信息是如何构成的。SOAtest 将使用此信息将这些消息转换为 XML 或从 XML 转换为 XML。

创建新数据建模定义之后,将打开一个数据建模编辑器。也可以通过双击表示数据定义文件的 Navigator 节点访问它。

1.输入数据格式的名称和描述。

此名称将用于识别可用工具中的消息格式。


2.指定 section 的常规信息

接下来,作为一个整体输入关于该 section 的常规细节:它的名称、它的记录的名称、这些记录是如何分隔的,以及下一个记录的条件。



name

指定 section 的名称。此名称出现在消息配置界面中,并在转换的 XML(XML 中去除非法 XML 字符)中用作 XML 标签名。它可以设置为任何值。

Record Name

指定 section 内每个记录的名称。此名称出现在消息配置界面中,并在转换的 XML(XML 中去除非法 XML 字符)中用作 XML 标签名。它可以设置为任何值。

Record Separator

指示在 section 内的不同记录中应该使用什么分隔符。可以选择其中一项可用选项(双击字段以打开下拉框),也可以输入自定义分隔符。 

可用选项包括:

  • {platform newline} - 操作系统的平台换行(Windows 上使用 "\r\n" ,Linux 上使用 "\n")
  • {lf} - "\n"
  • {crlf} - "\r\n"
  • {cr} - "\r"
  • {space}
  • {tab}

下次记录的标准

指定当解析器将固定长度转换为 XML 时,使解析器能够知道它已经阅读了该 section 的内容的标准。当该 section 之后出现了不应被混淆为该 section 一部分的附加内容时,这一点非常重要。解析器需要知道在从此 section 继续之前,该 section 内出现了多少条记录。  

有效值包括:

  • fixedCount - 指定该 section 内存在的记录数量。解析器一旦看到这个数量的记录,就会从此 section 继续。当选中此选项时,将出现名为 Record Count 的说明符;在这里,可以指定出现在该 section 中的记录数量。
  • greedy - 指定文件中所有剩余内容都应视为该 section 的一部分。这本质上意味着在此 section 之后不会出现其他字段或 section。在这种情况下,解析器“贪婪地”吃掉所有剩余的内容,并将其应用于该 section 。
  • xpath - 在此 section 中的记录数量由文档中其他内容动态决定时,使用该选项。一个示例是文档中的 anther 字段指定此 section 中记录的数量。另一个示例是此 section 中的每个记录以分隔符开始。有关此选项的更多详情,请查阅以下内容。

这个 xpath 选项指定解析器继续将内容应用于此 section 的条件。只要该条件为真,解析器就认为它仍然在此 section 中;一旦条件变为 false,解析器将从此 section 继续。为了确定下一个内容是否为此 section 中的新纪录,将在读取记录开始时应用此条件。

选择此选项后,将出现名为 XPath 的新说明符。可以输入 xpath 表达式,说明应将内容应应用于此文档的条件。计算条件之后,XPath 会应用于从固定长度文档创建的 XML 文档。

默认的 XPath 为 "count($section/*) < 1"。让我们来看看这是什么意思。$section 是一个特殊的 XPath 变量,只在这个上下文中应用。它引用表示该节的 XML 元素。"$section/*" 获取 section 元素的子元素的所有 XML 元素的集合。基本上,它获取表示本节记录的所有 XML 元素。"count()" 是一个普通的 XPath 函数,计算传递给它的节点集职工的节点数。因此 "count($section/*)" 最终返回迄今为止添加到 XML 文档中的记录数量。完整的表达式本质上意味着“只要已经添加到此文档中的记录数量小于 1,就继续向这个部分添加记录”,这意味着默认情况下只添加一条记录。

然而,在多数情况下,要读取的记录数量是在文档中的其他字段指定的。此时,应该使用 XPath,引用指定记录数量的文档中的字段。记住,XPath 根据创建的 XML 文档进行计算,因此它引用 XML 文档中的 XML 元素。如果文档有一个名为 "NumberOfPets”的字段,那么要定位该元素的对应的 XPath 可以是 "$section/../NumberOfPets"。这意味着“从表示这一节的 XML 元素开始,向上到父元素,然后获取 NumberOfPets 元素”。这可以找到当前部分的兄弟元素 "NumberOfPets”。在本例中,完整的 Xpath 表达式可以是 "count($section/*) < $section/../NumberOfPets"。

有两个可用的 Xpath 函数是这个上下文所特有的:fixedlen:peek() and fixedlen:peek-starts-with()
fixedlen:peek()

此函数以一个整数作为参数。它查看固定长度文档中仍未读取和转换为 XML 的即将到来的内容。如果根据文件中稍后出现的一些内容来确定这部分是否有更多要读取的记录,则使用此方法。例如,考虑记录以 "<” 字符开始的情况:

Doe     Jane<  Cat    Fluffy><  Dog     Spot>

在此情况下,你的 Xpath 表达式应该是 "fixedlen:peek(1) = '<'"。

fixedlen:peek-starts-with()

此函数以一个字符串作为参数。它查看固定长度文档中仍未读取和转换为 XML 的即将到来的内容。如果根据表示记录开始的一些分隔符来确定这部分是否有更多要读取的记录,则使用此方法。  例如,考虑记录以 "<” 字符开始的情况:

Doe     Jane<  Cat    Fluffy><  Dog     Spot>

在此情况下,你的 Xpath 表达式应该是 "fixedlen:peek-starts-with('<')"。

这个 fixedlen:peek-starts-with() 函数等价于 Xpath 表达式 "starts-with(fixedlen:peek(1), '<')"。

默认选项是贪婪的。这是通常使用的选项,除非在一个嵌套的子 section 中工作,并且它不是文档中的最后一个内容。

3.指定 component 字段和子 section

使用 Components 部分以提供该节中包含的字段和/或子 section 的详情。可在此处添加多个字段和/或子 section。

若要添加字段:

  1. 选择 Components 节点。
  2. 将面板左下角窗格的框设置为 Field
  3. 单击 Add

对于每个字段,指定以下设置:

  • Name - 输入字段的名称。此名称用于合适的工具控件中,并作为转换的 XML(XML 中去除非法 XML 字符)中的 XML 标签名。它可以设置为任何值。
  • Type - 选择其中一个以下值:
    • decimal - 指示此字段包含十进制值。
    • integer - 指示此字段包含整数类型值。
    • string - 指示此字段包含字符串类型值。
  • Length - 指定字段的长度。
  • Alignment - 指定字段中的值(当小于字段长度时)是否应该在左侧或右侧出现。
  • Padding - 指定当字段中的值小于字段中的长度时要使用什么字符。通常,字符串字段使用空格,数字字段使用空格或 '0'。若要使用空格,请指定 {space}。否则,任何单个字母数字字符在这里都是有效的。

若要添加子 section:

  1. 请选择 Components 节点。
  2. 将面板左下角窗格的框设置为 Section
  3. 单击 Add



关于完成常规 section 细节的更多详情,请查阅 2.Specify general information about the section指定 section 的常规信息

在树中编辑

数据建模编辑器的初始视图显示基于树的表中的数据模型。树格式允许轻松地查看数据建模的层级和结构。它以表格式显示,以便你可以编辑数据建模结构的上下文中的值。

在这个以表形式显示的树视图中,可编辑的字段可分为以下类别:

  • Free-form text - 只需进入该字段并键入你想输入的任何文本。
  • Combo box selections - 这些字段只允许你选择该字段预定义的值。可以双击该字段,弹出一个允许选择你的选择的组合框。或者可以进入这个字段,然后按住组合中某个选项的第一个字母(使该选项出现的选项),然后按 enter 键移动到下一个字段。
  • Editable combo box selections - 可以双击该字段,弹出一个允许选择你的选择的组合框。或者,可以将任何值键入到要输入的字段中。

在表中编辑

当为大量字段输入数据时,可能希望将树格式转换为表格式,该表格式旨在提供一种快速而简单的方法来输入单个节的字段描述符。

若要切换至表视图:

  1. 选择要编辑的 Components 节点。
  2. 点击 Edit in Table 按钮。



表视图类似于电子表格。Section 中的每个字段都是表中的一行,并且每个表中每列对应其中一个字段说明符。只需修改表中的最后一行并按下箭头键或回车(Enter)键,就可以在这个视图中添加更多字段。  




也可以使用下面的按钮:

  • Move Rows Up - 突出显示一行或多行,单击此按钮将在表中向上移动行。
  • Move Rows Down - 突出显示一行或多行,单击此按钮将在表中向下移动行。
  • Delete Rows - 突出显示一行或多行,单击此按钮将删除所选定行。
  • Template for new row - 指定在向表中添加新行时,每个新字段的默认类型。

若要返回数据建模的主视图,请点击 Return to Full Data Model 按钮。

切换视图

在某些情况下,你的数据模型中定义了许多字段和节,并且你意识到需要在已经定义的字段中间添加一个新字段。

为实现这一目标:

  1. 将新字段添加在完整的数据模型视图或节表视图中。
  2. 切换至表节视图(单击 Edit in Table)。
  3. 在该视图中,将行向上向下移动。这将对应于在数据建模中移动字段和节。
  4. 切换回完整的数据模型视图(单击 Return to Full Data Model)已查看那里反映的更改。

测试数据模型

定义了数据模型后,你可能希望测试它以确保其是否反映你的固定长度数据格式。

为此:

  1. 确保数据模型已注册(如 Registering the Data Model中所述)。
  2. 将其添加值固定长度客户端(如 Using the Data Model in SOAtest Tools中所述)。
  3. 使用所需消息配置客户端。
  4. 将客户端中的传输设置为 None
  5. 运行客户端并查看客户端流量视图器中的数据。

可能会注意到没有正确定义并且需要更改的内容。如果这样,请返回数据模型并进行更改。然后重新运行客户端并验证更改。有些更改可能非常重要,需要添加新的固定长度客户机,而不是重用现有客户机。

注册数据模型

每个定义的数据模型需要在 SOAtest 注册之后,其相关格式才可以在 SOAtest 工具中使用。在要访问固定长度格式的每个 SOAtest 安装上必须执行此注册。

注册数据模型有两种方法:

  • 如果在数据模型编辑器中,请单击 Register data model 目录链接。它将注册包含正在的数据模型的完整目录。



  • 否则:
    1. 选择 Parasoft> 首选项
    2. 选择 Parasoft > SOAtest > XML Conversion
    3. 单击 Add



    4. 指定包含数据模型的数据模型目录。


负载测试前提条件

如果要使用具有固定长度客户机的测试运行负载测试,则你还需要在负载测试工具(通过 Load Test XML Preferences> XML Conversion 区域)中注册数据模型。

在 SOAtest 工具中使用数据模型

一旦注册完成,数据模型便可在以下支持固定长度格式的工具中使用:

  • 固定长度客户机
  • 固定长度回调工具(创建 EDI 客户机并将格式转换为固定长度)
  • XML 转换器

为了执行固定长度消息配置或验证,必须在每个工具中的 Message type 组合框中选择数据模型。  



从那时起,这些工具使用固定长度格式时的行为与使用 EDI 格式时的行为表现相同,除了如下所述的固定长度示例生成。查看 EDI 客户端 和 增强版回调工具 ,以获得关于如何使用这些工具的更多详情。

示例生成

当选择上述显示的消息类型后,SOAtest 会使用示例 XML(该 XML 在无需修改的情况下便可转换为固定长度数据)填充表单输入视图。

固定长度消息类型的数据模型定义决定了生成的 XML 的内容。XML 包含定义中指定的 section 和字段。

为每个 section 添加一个 XML 元素。每个 section 元素都包含记录的元素。该 section 的 Criteria for next record 设置决定了要向该 section 中添加记录的数量:


标准添加的记录
fixedCount"Record count” 选项决定记录的数量。
greedy只添加一条记录。
xpathXPath 是在生成 XML 时计算的。如果 Xpath 计算结果为 true,则将添加另一个记录。SOAtest 始终至少添加一个记录,并且在 Xpath 多次计算为 true 的不太可能的情况下,从不添加超过 1000 条记录。(由于记录数量添加了这些限制,所以使用 Xpath 标准导致无需修改便不可转换至固定长度数据的示例 XML 的这种情况很少) 


字段使用默认值进行填充。将整数和十进制字段设置为数字 1。将字符串字段设置为值 a。如果将示例 XML 转换为固定长度格式,则 SOAtest 将使用这个任意值而不是空值(空字符串)来阐明每个字段开始和结束位置。

教程

请查阅 使用定长消息

  • No labels