SoapUI 和 Excel:空值与无值

SoapUI and Excel: empty values vs. no value

我正在使用 SoapUI Pro 4.5.2 从电子表格中读取数据,将它们放入对我的 Web 服务的 Soap 请求中,然后获取响应以写入电子表格。有效。

我在输入数据中有两个字段与我的问题相关:

中间名定义为 4 个字符的字符串,并且 minOccurs = 1 和 maxOccurs = 1。

邮政分机号(普通5位代码后可选的4位数字)定义为4位的字符串。该字段是可选的,因此标记为 minOccurs=0 和 maxOccurs=1.

当我使用 SoapUI UI 接口发送请求时,这工作正常;如果中间名没有值,SoapUI 生成一个空标签并发送它(我猜是因为 minOccurs=1)。如果 PostalCode 没有值,它根本不会发送任何标签(我猜是因为 minOccurs=0)。

但是,当 SoapUI 从 Excel 电子表格中读取数据时,对相同数据的响应是一个错误,表明 '' 的扩展邮政编码值不合法,因为它必须是 4 位数字。似乎 SoapUI 在从电子表格读取数据时为扩展邮政编码生成了一个空标签,并发送了它。

我找到了 SoapUI 请求的 "Remove Empty Content" 选项,默认为 false。我将其设置为 true,现在从验证中返回一个错误,指示需要中间名但未找到。我猜 remove empty content 删除了所有空内容(足够合理),中间名必须在那里,即使是空的,因为 minOccurs=1.

我有办法解决这个追尾问题吗?我想我正在寻找类似邮政扩展代码输出的条件,所以即使它是空的,我也可以删除它,即使从电子表格中读取值也是如此。

我也很好奇是否有 XSD 修复程序,但我非常喜欢不涉及更改 XSD 的修复程序——这会成为一个政治问题。

编辑细节:

将输入放入请求中:我已经使用 SoapUI UI 从输入电子表格中为每个输入字段选择 "properties";完成后,最终会在请求字段中得到值,例如:

${SpreadsheetInput#FrstNm}

其中 SpreadsheetInput 是读取电子表格的数据源步骤的名称,FrstNm 是属性之一。我通过右键单击请求输入字段获得的弹出菜单中的 "Get Data" 选项来执行此操作,但可能还有其他方法。

首先是你的问题:

请记住,在 SoapUI 内部 几乎 一切都是字符串。做类似的事情:

<postCode>${SpreadsheetInput#PostCode}</postCode>

在您的 SOAP 请求中,假设 PostCode 为空或完全不存在,将扩展为:

<postCode></postCode>

SoapUI 甚至会将其优化为:

</postCode>

然后你的验证开始了,它说你不需要提供这个元素,但如果你需要,最好是 4 个字符长。以上都失败了。

解决方法:

您需要务实地(意味着您必须编写 Groovy 代码)在您的请求中创建此节点。有几种方法可以处理这个问题。快速而肮脏的是 Groovy 步骤,类似于:

def postCode = context.expand('${SpreadsheetInput#PostCode}').trim()
if (postCode != null && postCode != '')
    testRunner.testCase.setpropertyValue("postCodeNode", "<postCode>" + postCode + "</postCode>")
else
    testRunner.testCase.setpropertyValue("postCodeNode", "")

然后在你的请求中替换原来的:

<postCode>${SpreadsheetInput#PostCode}</postCode>

只有:

${#TestCase#postCodeNode}

注意,XML 节点元素是 SoapUI 属性 的一部分!再次声明:SoapUI 中的所有内容都只是一个普通字符串。

如果你想要更硬核的东西,看看 dynamically create elements in a SoapUI request。这是我的。