我在具有属性Foo
的SoapUI测试用例中有一个JDBC Request测试步骤,该属性已通过前面的Property Transfer测试步骤分配了一个值 - 例如12345
。
我想使用Contains断言来检查测试步骤的响应是否包含Foo
的值(因为测试步骤的SQL查询基本上是标量SELECT
- 例如SELECT TOP 1 FooColumn FROM SomeTable WHERE FooColumn = :Foo
),但这证明有点棘手。
在the SoapUI page on getting started with JDBC test steps工作,我在Contains断言中尝试了:Foo
:这产生了-> Missing token [:Foo] in Response
。
所以我尝试${:Foo}
:这个“成功”,但我发现${:Whatever}
(Whatever
不是已定义的属性)而${}
“也成功”了。这似乎不正确。
如何正确断言JDBC请求的响应包含Foo
的值?
答案 0 :(得分:0)
事实证明,JDBC Request的断言中的属性扩展类似于典型测试请求中的属性扩展(即the SoapUI page on property expansions解释)。
:Foo
特别适用于JDBC Request的 SQL Query 中的属性扩展。在测试步骤的包含断言中,标准属性扩展适用,${JDBC Request Name#Foo}
工作 - 成功而不是“成功”。相反,${JDBC Request Name#Whatever}
按预期失败。
我仍然不清楚为什么${:Foo}
,${:Whatever}
和${}
似乎都成功了。如果有人能够阐明这一部分,我很乐意理解。
<强>更新强>
虽然对标准属性扩展的更改是正确的,但对于JDBC Request测试步骤之前的Property Transfer测试步骤没有将任何内容转移到属性Foo
的情况,仅此更改仍然不足。
在这种情况下,JDBC Request的Contains断言产生了误报,因为Foo
的值为空字符串,当然包含JDBC Request(零行但非空)响应。将Contains断言更改为<FOOCOLUMN>${JDBC Request Name#Foo}</FOOCOLUMN>
可解决此问题。
这让我意识到${:Foo}
,${:Whatever}
和${}
似乎都成功的可能原因:它们扩展为空字符串,这也是JDBC Request的响应所包含的。与此假设一致,<FOOCOLUMN>${:Foo}</FOOCOLUMN>
在复审时确实以-> Missing token [<FOOCOLUMN></FOOCOLUMN>] in Response
失败。
现在我只想知道为什么${:Foo}
,${:Whatever}
和${}
扩展为空字符串,我希望它们会产生错误。