这是我的第一篇文章,所以请保持温柔:)
在免费的SoapUI版本中,我想使用以下简单方案测试一些REST API: POST,而不是GET检查帖子。 在我的测试套件中,我有一个测试用例,该用例包含以下步骤: 1.发布 2.财产转让; 3.获取。
使事情变得复杂的是POST响应不包含任何参数-值对。它返回的json仅包含一个实际上是id的值(它对应于taskId
参数)。
在属性传输步骤中,我选择了POST作为源,选择Response作为属性,选择XPath作为Path语言(使用jsonPath返回null)。 在Target中,我选择了Test Suite,将propertyTest作为Property并将XPath作为Path语言(如果使用JSONPath,则在此处接收值)。 当我运行属性传递时,它会正确返回传递的值。
最后,在我的最后一步-GET:
GET仅在有过滤器的情况下返回列表,因此在创建它时(在organizationId
中创建过滤器时,我已在GET方法中给出了相应的参数和值)。此方法返回一个json,该json具有对应的taskId
(在此列表中命名为organizationId
)的所有ownerOrganizatioId
(在此列表中命名为“ id”)。
在测试步骤中,我想断言POST的新值响应实际上在检索到的列表中。我正在尝试使用JsonPath Match断言来做到这一点。
如果我使用以下表达式:$.[?(@.ownerOrganizationId==2)].id
,它将实际上从数据库中返回所有id(taskId
)。
到目前为止,一切都很好。但是现在,我想断言新的id值实际上在此列表中。
我知道我可以使用此表达式{#TestSuite1#TaskTypeIdPropertyTransfer}
来使用发布的值,但是我不知道的是:要检查其是否在列表中的断言表达式是什么?
感谢您抽出宝贵的时间阅读和调查此问题,如果需要更多详细信息,请告诉我。
关于, 保罗
答案 0 :(得分:0)
如果我对我的理解正确,则可能需要执行一些Groovy脚本,如下所示:
def id = {insert something to assign the id you need to find in the list}
def idList = {insert something to fetch the list}
def idFound = false
for (def currentId : idList) {
if (id.equals(currentId)) {
idFound = true
break
}
}
assert(idFound==true)