我有 2 个回复:
response1 = {a: 1, b: "1"}
response2 = {a: 2, b: "2"}
我想比较数字/整数值,例如:
Then assert (response1.a + 1) == response2.a
希望这是可能的。但如何呢? 我需要两种数据类型的解决方案,以防参数值为字符串或数字/整数。
我尝试了2种方法,但没有成功:
Then assert response1.a < response2.a
Then assert response1.a+1 == response2.a
实际代码:
Scenario: Validate openCase count
* def preResponse = call read('@CaseCount')
* def createCaseResponse = karate.callSingle('CreateCase.feature@Create');
* def postResponse = call read('@CaseCount')
Then assert preResponse.responseData.openCases < postResponse.responseData.openCases
实际反应:
{
"responseData": {
"openCases": 1,
"closedCases": 0,
"inProgressCases": 0,
"onHoldCases": 0,
"invalidCases": 0,
"overDueCases": 0,
"dueTodayCases": 0
},
"resultInfo": {
"resultCodeId": "200",
"resultCode": "SUCCESS",
"resultStatus": "SUCCESS",
"resultMsg": "S"
},
"message": "SUCCESS"
}
方法有很多,这里是一个:
* match response2 == { a: '#(response1.a + 1)', b: "#((response1.a + 1) + '')" }
创建临时变量可能会更容易:
* def a1 = response1.a
* match response2.a == a1 + 1
类型转换请参考:https://github.com/karatelabs/karate#type-conversion
就我个人而言 - 我强烈反对这种“聪明”的测试。好的测试应该准确地知道预期的内容,并且您只需检查一个“硬编码”JSON。更多解释请参见:https://stackoverflow.com/a/54126724/143475