我正在编写一个与 REST 应用程序一起使用的测试 spock 项目,该应用程序又与数据库一起使用。
问题在于,当拉取其余请求时,infa 没有时间写入数据库,您必须发明这些东西。
如何实现在满足某些条件之前执行的方法。我能够实现的只是:
class Helper {
static def waitForResponse(Closure closure, int size = 1) {
int count = 0
BaseResponse response = closure.call()
while (response.body.size != size && count <= 15) {
response = closure.call()
log.info("try to get response, count: ${count}, response: ${response}")
if (response.body.size != size) {
sleep 200
}
count++
}
checkSuccess(response)
return response.body
}
}
}
这只能满足那些格式为表格的请求,即使那样它也不能完全按照我需要的方式工作。响应可能是 List<Mar>
你需要类似的东西:
class Waiter {
BaseResponse response = waitForResponse({someMetod(someParam)}, it.someField == "someValue")
// либо
BaseResponse response = waitForResponse({someMetod(someParam)}, {it.someField == "someValue"})
}
那些。someMetod(someParam) 将每隔 200ms 执行一次,直到满足条件或尝试用完
也许我根本就挖错了草原,还有更优雅的东西?
PS我只是一个测试人员,所以关于如何优化数据库工作的建议不太可能帮助我:(
传递另一个
Closure,您在其中设置条件:然后你可以这样称呼它:
或者创建辅助函数以使检查更容易和更高级:
someParseFunction是一个函数,可以获取BaseResponse并从中获取您需要的内容。您可以根据需要为不同的场景制作尽可能多的此类功能。我也喜欢做 DLS,这样你就可以这样写:
为此,请创建一个辅助方法: