在本章节中:
EDI 客户端是用来发送 EDI 消息的工具。目前支持 AL3, CARGO, EANCOM, EDIFACT, EDIGAS, HIPAA, HL7, IATA, NCPDP, TELCO, TRADACOMS 和 X12。它允许你使用 XML,从而简化了 EDI 的使用(EDI 通常很难阅读)。你可以将 EDI 请求负载作为 XML 文档来建模;然后客户端在发送消息之前自动将 XML 转换为 EDI。如果服务端返回 EDI 消息,则客户端可以将该消息转换为 XML,以便你可将像 XML 断言器和 XML 数据库这样的工具附加到响应中。
创建新的 EDI 客户端
若要创建新的 EDI 客户端:
- 创建一个新的空 .tst 文件,如下:
- 选择 File> New> Project。
- 选择 SOAtest> Empty Project,然后单击 下一步。
- 输入项目名称,然后单击 Finish。
- 创建新的 EDI 客户端,如下:
- 右键单击新的测试套件节点,然后选择 Add New> Test。
- 选择 EDI Client,然后单击 Finish。
- 进入新工具的 Request 选项卡,并将输入模式更改为 Literal。
粘贴以下文本:
UNA:+.? ~ UNB+IATB:1+6XPPC+LHPPC+940101:1950+1~ UNH+1+PAORES:93:1:IA~ MSG+1:45~ IFT+3+XYZCOMPANY AVAILABILITY~ ERC+A7V:1:AMD~ IFT+3+NO MORE FLIGHTS~ ODI~ TVL+240493:1000::1220+FRA+JFK+DL+400+C~ PDI++C:3+Y::3+F::1~ APD+74C:0:::6++++++6X~ TVL+240493:1740::2030+JFK+MIA+DL+081+C~ PDI++C:4~ APD+EM2:0:1630::6+++++++DA~ UNT+13+1~ UNZ+1+1~
- 将输入模式从 Literal 更改为 Form Input,然后确认是否希望覆盖值。注意,自动完成了 Dialect、 Version和 Message type 。
- 进入 Transport 选项卡,输入 http://localhost:8080/parabank/echo.jsp 到 Router Endpoint 字段,并保存编辑器。
运行 EDI 客户端。 - 打开流量视图器。
注意,请求以 EDI 格式发送。然而,也请注意,每行都以单引号字符而不是原始消息中的“~”字符结尾。默认情况下,EDI 客户端使用功能不同的段分隔字符与我们希望在消息中发送的分隔符不同。
设置 EDI 转换选项
现在,请确保使用正确的段分隔器发送 EDI 内容(在行末尾的字符)。
- 添加 Diff 输出,如下所示:
- 右键单击 EDI 客户端,然后选择 Add Output。
- 选择 Request> Payload 和 Diff,然后单击 Finish。
- 将相同文字(如上显示)粘贴到 Diff 工具。
- 打开 Options 选项卡并启用 Ignore Whitespace。当上述文本复制并粘贴到 Diff 工具时,将插入新行字符。启用此选项将放置这些字符被差异报告。
- 保存 Diff 工具。
- 重新运行 EDI 客户端。测试应该失败,错误是更改了 16 行。这是预期的,因为 EDI 使用的段分隔器与原始消息不同。
- 更改 EDI 客户端的转换选项,如下所示:
- 打开工具的 Conversion Options 选项卡。
- 找到 Segment separator 选项,并键入
~
。 - 保存 EDI 客户端。
- 重新运行 EDI 客户端。现在它将成功。
注意,十进制分隔符为逗号(',')而不是句号('.')的地区,你将在第一行看到单个测试失败。这是由于十进制分隔符间的差异。
配置 EDI 消息
使用 EDI 客户端的其中一项主要原因是能够让你轻松地配置 EDI 消息。让我们参数化 EDI 消息中的一个字段。
- 创建新的表数据源,如下所示:
- 右键单击测试套件节点,然后选择 Add New> Data Source。
- 选择 Table,然后单击 Finish。
- 将数据源命名为
Companies
。 - 启用 First row specifies column names。
- 在第一列中,输入
Company Availability
作为列名,然后分别在行 1 和 2 中输入XYZCOMPANY
AVAILABILITY
和PARASOFT
AVAILABILITY
。 - 保存数据源。
- 复制创建的第一个 EDI 客户端(右键单击它,然后选择 Copy),并将其粘贴到相同的测试套件中。
- 在新的 EDI 客户端中,删除附加给请求有效负荷的 Diff 工具。
- 在 EDI 客户端的 Request 选项卡中,请确保将输入模式设置为 Form Input。
- 在表单输入显示的树中,选择第一个 IFT02-FreeText 节点(该节点完整路径为 "IATA/PAORES/IFT-InteractiveFreeText/IFT02-FreeText")。
- 在右侧,将 Fixed 更改为 Parameterized。
右侧复选框应该显示名为 Company Availability的数据源列。
- 保存 EDI 客户端。
- 运行测试。
- 打开流量视图器以用于 Test 2: EDI Client ,并注意运行该测试两次:对数据源中的每一行执行一次。
验证 EDI 内容
我们已经配置了 EDI 客户端,以便将请求发送到一个服务,该服务只是简单地回显发送的请求。因此,EDI 客户端在响应中获得的 EDI 内容与在请求中发送的一样。让我们对这个 EDI 内容进行验证。
- 添加新的 XML 断言器输出,如下所示:
- 右键单击参数化的 EDI 客户端(第二个),然后选择 Add Output。
- 选择 Response Payload Converted to XML 和 XML Assertor,然后单击 Finish。
- 重新运行测试以填充 XML 断言器的内容。
- 配置 XML 断言器,如下所示:
- 进入 XML 断言器的 Configuration 选项卡。
- 单击 Add 按钮,选择 Value Assertions 并单击 Next。
- 选择 Value Assertion 并单击 Next。
- 在显示的树中,选择第一个 IFT02-FreeText 节点(该节点完整路径为 "IATA/PAORES/IFT-InteractiveFreeText/IFT02-FreeText"),然后单击 Finish。
- 输入
XYZCOMPANY AVAILABILITY
到 Expected Value 字段。 - 保存 XML 断言器。
- 运行测试。 它应该失败,并携带消息 'DataSource: Companies (row 2): Value Assertion: 对于元素 "../IFT02-FreeText",期望如下:XYZCOMPANY AVAILABILITY 但实际上却是:PARASOFT AVAILABILITY '.
出现这种错误匹配是因为参数化了请求,但没有参数化 XML 断言器。 - 将 XML 断言器中的 Expected Value 字段更改为 Parameterized。右侧复选框应该显示在名为 "Company Availability”的数据源中的列。。
- 保存 XML 断言器。
- 运行测试。现在,它应该成功。
与这些练习相关的 .tst 文件可以在 <SOAtest install dir>/examples/tests/EDI
中找到。