我正在尝试使用重试,以检查答案中是否存在包含给定ID的对象。
这是我所做的尝试之一:
Background:
* url 'https://jsonplaceholder.typicode.com'
Scenario: get all users and then get the first user by id
Given path 'users'
When method get
Then status 200
* def first = response[0]
Given path 'users'
And retry until response[0].id == first.id
When method get
Then status 200
Given path 'users'
And retry until response[*].id == first.id
When method get
Then status 200
第一个重试有效,但是第二个重试会产生错误,因为[*]无法与retry命令一起使用。但是,当使用retry
而不是javascript函数时,如何检查first.id是否存在于响应数组中的至少一个对象中?
答案 0 :(得分:1)
是的,表达式必须是纯JS,并且不能混合使用JsonPath。但是,由于您可以定义和重用函数,因此这是一种实现方法:
* def response = [{ id: 1 }, { id: 2 }, { id: 3 }]
* def hasId = function(id){ return karate.filter(response, function(x){ return x.id == id }).length != 0 }
* assert hasId(1)
* assert !hasId(9)
所以现在这应该起作用:
And retry until hasId(first.id)
请注意,有一种很少使用的karate.match()
也可能有用,但是除非您使用快捷方式,否则它不直接支持contains
。