You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SoapUI 5.7.0中使用XQuery实现颜色存在性断言(无group by)

SoapUI 5.7.0中XQuery实现颜色存在性断言的解决方案

首先明确:SoapUI 5.7.0内置的XQuery引擎只支持XQuery 1.0,你尝试的group by是XQuery 3.0才加入的语法,所以会报错。下面提供几种可行的实现方式:

方法一:直接返回布尔验证结果(最简洁)

使用XQuery的every...satisfies结合distinct-values函数,直接返回是否三种颜色都存在的布尔值:

every $color in ("green", "yellow", "red") satisfies $color = distinct-values(//car/color)

配置断言步骤:

  • 在SoapUI中创建XQuery断言,将上述代码粘贴进去
  • 设置期望结果为true(),当响应包含所有三种颜色时,断言通过;否则失败

方法二:返回去重后的颜色集合,再验证完整性

先通过distinct-values获取所有唯一颜色,再生成去重后的节点集合:

<Result>
{
  for $color in distinct-values(//car/color)
  order by $color
  return <color>{$color}</color>
}
</Result>

执行后会得到无重复的颜色节点:

<Result>
  <color>green</color>
  <color>red</color>
  <color>yellow</color>
</Result>

配置断言步骤:

  • 用上述XQuery生成结果后,可搭配SoapUI的XPath Match断言,分别验证//color[text()='green']、//color[text()='yellow']、//color[text()='red']都存在;或者直接验证count(//color)等于3且三个目标颜色都在结果中

替代写法(XQuery 1.0手动去重)

如果不想用distinct-values,也可以用XQuery 1.0的语法手动去重(逻辑清晰但效率略低):

<Result>
{
  for $car in //car
  where not(exists(//car[position() < $car/position()]/color[text()=$car/color/text()]))
  order by $car/color
  return <color>{data($car/color)}</color>
}
</Result>

这个写法会遍历所有car节点,只保留每个颜色的第一个出现实例,最终同样得到去重后的颜色集合。

内容的提问来源于stack exchange,提问作者Alexey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:52:48