karate - 如何在空手道中测试数组的顺序
问题描述
我想测试从端点返回的数组是否按特定顺序,基于对象中的字段,使用Karate。例如,我可能有如下数据:
[
{ seconds: 20 },
{ seconds: 15 },
{ seconds: 12 }
]
我的目标是测试对象是否按降序排列。
我已经成功实施了这个测试,但如果可能的话,我正在寻找一种更好的方法。这是我为测试订单所做的:
* def orderTest = function() { for(var i = 0; i < response.length; i++) { if(i !== 0 && response[i].seconds > response[i-1].seconds) return false; } return true; }
Then assert orderTest()
虽然这似乎按预期工作,但它很丑陋。有没有更好的方法来测试数组的顺序?
解决方案
是的 !如果您将数字单独提取到一个数组中,它会变得很简单 - 在幕后只是一个 Java List
,因此您可以Collections
在其上应用方法:
* def Collections = Java.type('java.util.Collections')
* def response =
"""
[
{ seconds: 20 },
{ seconds: 15 },
{ seconds: 12 }
]
"""
* def before = $response[*].seconds
* copy after = before
* Collections.sort(after, Collections.reverseOrder())
* match before == after
推荐阅读
- mysql - Moodle - 基于日期返回课程注册的 SQL 查询
- r - 使用向量长度作为某种权重,从不同长度的多个向量中进行采样而不进行替换
- expression - 逻辑表达式,化简
- notepad++ - 在记事本++中删除特定字符之前的文本
- javascript - API:为什么我得到的输出是 [objet objet] 而不是令牌?
- python - PyQT5:即使在使用网格之后,Qlabel 也会相互叠加
- node.js - 使用 mocha 设置嵌套测试的最佳方法是什么?
- javascript - 使用 javascript 进行 curl 测试
- sql-server - T-sql 选择语句 - 基于另一个表数据的带有 Case 语句是或否的多列
- asp.net-core - ASP.NET Core 标识 - UserClaims、UserRoles 和 RoleClaims