我如何根据自己的喜好对 SoapUI 的项目进行排序
How do i sort items in response of SoapUI according to my preference
enter image description here
我想根据"numbers first, then capital letters and then small letters" 逻辑对"name" 部分进行排序。我该如何实现?
最好能提供更多信息。乍一看,您似乎在寻找 XQuery 断言。这不会对响应进行排序或修改,但会转换断言中的响应以将其与具有您控制的顺序的集合相匹配。
什么时候用?当您不确定获取实体的顺序时,您希望将那些动态排序的项目匹配到一个固定的集合。
可在此处找到示例:http://readyapi.smartbear.com/structure/assertions/property/xpath/xquery/example
我会尝试编写一个示例项目,并提供一些示例作为参考。
但有一件事:不要停留在 SoapUI 站点的示例上。你可以疯了。您可以使用 XPath 检索的所有内容,都可以在 XQuery 中使用。
示例:假设从 this source 开始有一个 xml(请注意,这里也有一些有用的东西)- 示例
下的 XQuery
<?xml version="1.0"?>
<?xml-stylesheet href="catalog.xsl" type="text/xsl"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<catalog>
<product description="Cardigan Sweater" product_image="cardigan.jpg">
<catalog_item gender="Men's">
<item_number>QWZ5671</item_number>
<price>39.95</price>
<size description="Medium">
<color_swatch image="red_cardigan.jpg">Red</color_swatch>
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
</size>
<size description="Large">
<color_swatch image="red_cardigan.jpg">Red</color_swatch>
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
</size>
</catalog_item>
<catalog_item gender="Women's">
<item_number>RRX9856</item_number>
<price>42.50</price>
<size description="Small">
<color_swatch image="red_cardigan.jpg">Red</color_swatch>
<color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
</size>
<size description="Medium">
<color_swatch image="red_cardigan.jpg">Red</color_swatch>
<color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
<color_swatch image="black_cardigan.jpg">Black</color_swatch>
</size>
<size description="Large">
<color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
<color_swatch image="black_cardigan.jpg">Black</color_swatch>
</size>
<size description="Extra Large">
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
<color_swatch image="black_cardigan.jpg">Black</color_swatch>
</size>
</catalog_item>
</product>
</catalog>
现在假设您不知道这些东西到达的顺序。你知道测试数据本身是相当稳定的。这可能意味着此查询检索到的项目编号很可能是相同的。为了我们的利益,假设您想要测试价格是否为预期价格。
那么你有两个选择:
1. 为您期望的每个项目创建一个单独的 XPath
2. 使用 XQuery 创建可验证的查询(您可以在断言下找到)
XQuery 示例:
<results>
{
for $item in //catalog/product/catalog_item
let $id := $item/item_number
let $price := $item/price
order by $id
return
<price itemId='{data($id)}'>{data($price)}</price>
}
</results>
这个查询的结果是这样的:
<results>
<price itemId='QWZ5671'>39.95</price>
<price itemId='RRX9856'>42.50</price>
</results>
在行 for $item in //catalog/product/catalog_item
中,我告诉 XQuery 遍历具有该地址的所有元素。变量
$item
可以进一步使用。在这里这似乎是徒劳的,但在更复杂的情况下,模块化是你的朋友。再往下我定义了更多变量。您不必这样做,但我喜欢更冗长,而不是看不到我后来做了什么(我是一名功能测试员)。要分配变量,请使用语句 let $id := $item/item_number
。如您所见,在深入研究 XML.
时,我重用了我迭代的父对象
在执行某些功能时,我们需要用'boundaries'{
和}
来定义功能。注:获取实际数据的函数为{data(variable with path or path here)}
.
本质上,您甚至不需要包含项目 ID。您可以在不将其包含在返回的输出中的情况下对值进行排序。我个人喜欢将它们放在我的集合中以验证以后的差异。
至于先是数字,然后是资本,然后是小盘,我不知道你是否使用了正确的工具来完成这项工作。我相信这是可能的。但是鉴于您可以相信 SoapUI 每次都以相同的方式对 XQuery 进行排序,因为它每次都会使用相同的 XQuery 引擎,所以我无法想象首先实际拥有数字,然后是大盘,然后是小盘。目标是验证从响应中获取时排序一致的集合。
本质上,要校准断言,您需要使用模拟提供预期输出的示例 XML。然后,在断言配置屏幕中,您可以选择使用您设计的 Xquery xml 从响应中获取预期输出。
如果确实如您描述的那样,请详细说明。
XQuery 来源:
- https://en.wikibooks.org/wiki/XQuery/Searching,Paging_and_Sorting
https://www.w3schools.com/xml/xquery_intro.asp
https://www.w3schools.com/xml/xpath_intro.asp
体积庞大,仍然不完整,但可能是您问题核心的解决方案:使用 SoapUI 本机断言验证一致排序的响应。
enter image description here
我想根据"numbers first, then capital letters and then small letters" 逻辑对"name" 部分进行排序。我该如何实现?
最好能提供更多信息。乍一看,您似乎在寻找 XQuery 断言。这不会对响应进行排序或修改,但会转换断言中的响应以将其与具有您控制的顺序的集合相匹配。
什么时候用?当您不确定获取实体的顺序时,您希望将那些动态排序的项目匹配到一个固定的集合。
可在此处找到示例:http://readyapi.smartbear.com/structure/assertions/property/xpath/xquery/example
我会尝试编写一个示例项目,并提供一些示例作为参考。
但有一件事:不要停留在 SoapUI 站点的示例上。你可以疯了。您可以使用 XPath 检索的所有内容,都可以在 XQuery 中使用。
示例:假设从 this source 开始有一个 xml(请注意,这里也有一些有用的东西)- 示例
下的 XQuery<?xml version="1.0"?>
<?xml-stylesheet href="catalog.xsl" type="text/xsl"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<catalog>
<product description="Cardigan Sweater" product_image="cardigan.jpg">
<catalog_item gender="Men's">
<item_number>QWZ5671</item_number>
<price>39.95</price>
<size description="Medium">
<color_swatch image="red_cardigan.jpg">Red</color_swatch>
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
</size>
<size description="Large">
<color_swatch image="red_cardigan.jpg">Red</color_swatch>
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
</size>
</catalog_item>
<catalog_item gender="Women's">
<item_number>RRX9856</item_number>
<price>42.50</price>
<size description="Small">
<color_swatch image="red_cardigan.jpg">Red</color_swatch>
<color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
</size>
<size description="Medium">
<color_swatch image="red_cardigan.jpg">Red</color_swatch>
<color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
<color_swatch image="black_cardigan.jpg">Black</color_swatch>
</size>
<size description="Large">
<color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
<color_swatch image="black_cardigan.jpg">Black</color_swatch>
</size>
<size description="Extra Large">
<color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
<color_swatch image="black_cardigan.jpg">Black</color_swatch>
</size>
</catalog_item>
</product>
</catalog>
现在假设您不知道这些东西到达的顺序。你知道测试数据本身是相当稳定的。这可能意味着此查询检索到的项目编号很可能是相同的。为了我们的利益,假设您想要测试价格是否为预期价格。
那么你有两个选择: 1. 为您期望的每个项目创建一个单独的 XPath 2. 使用 XQuery 创建可验证的查询(您可以在断言下找到)
XQuery 示例:
<results>
{
for $item in //catalog/product/catalog_item
let $id := $item/item_number
let $price := $item/price
order by $id
return
<price itemId='{data($id)}'>{data($price)}</price>
}
</results>
这个查询的结果是这样的:
<results>
<price itemId='QWZ5671'>39.95</price>
<price itemId='RRX9856'>42.50</price>
</results>
在行 for $item in //catalog/product/catalog_item
中,我告诉 XQuery 遍历具有该地址的所有元素。变量
$item
可以进一步使用。在这里这似乎是徒劳的,但在更复杂的情况下,模块化是你的朋友。再往下我定义了更多变量。您不必这样做,但我喜欢更冗长,而不是看不到我后来做了什么(我是一名功能测试员)。要分配变量,请使用语句 let $id := $item/item_number
。如您所见,在深入研究 XML.
在执行某些功能时,我们需要用'boundaries'{
和}
来定义功能。注:获取实际数据的函数为{data(variable with path or path here)}
.
本质上,您甚至不需要包含项目 ID。您可以在不将其包含在返回的输出中的情况下对值进行排序。我个人喜欢将它们放在我的集合中以验证以后的差异。
至于先是数字,然后是资本,然后是小盘,我不知道你是否使用了正确的工具来完成这项工作。我相信这是可能的。但是鉴于您可以相信 SoapUI 每次都以相同的方式对 XQuery 进行排序,因为它每次都会使用相同的 XQuery 引擎,所以我无法想象首先实际拥有数字,然后是大盘,然后是小盘。目标是验证从响应中获取时排序一致的集合。
本质上,要校准断言,您需要使用模拟提供预期输出的示例 XML。然后,在断言配置屏幕中,您可以选择使用您设计的 Xquery xml 从响应中获取预期输出。
如果确实如您描述的那样,请详细说明。
XQuery 来源:
- https://en.wikibooks.org/wiki/XQuery/Searching,Paging_and_Sorting https://www.w3schools.com/xml/xquery_intro.asp https://www.w3schools.com/xml/xpath_intro.asp
体积庞大,仍然不完整,但可能是您问题核心的解决方案:使用 SoapUI 本机断言验证一致排序的响应。