空手道中特征文件的异步执行

时间:2019-01-23 13:03:03

标签: karate

我有一个正在使用空手道模拟游戏的活动。 一个API返回一个响应,但经过一段时间的延迟(模拟工作负载的处理),它还会调用另一个API

我想实现以下目标:

Client --> Calls Karate Mock (Call A)
Client <-- Karate Mock Returns
----Interaction ends here ----

After 30 seconds or so..
Client Listener <-- Karate Mocks Posts (Call B)

我目前所在的是

Blocking: 

Client --> Calls Karate Mock (Call A)
Client Listener <-- Karate Mocks Posts (Call B)
Client <-- Karate Mock Returns (This is blocked until Call B happens)

在单独的功能文件中有B调用,我可以从另一个功能文件中调用它。

所以我想我在空手道中为异步调用而苦苦挣扎。

我确实创建了一个Java类,该类可以实现异步执行,但是我不确定如何从中调用功能文件。 那将立即为我解决这个问题。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

实际上,这应该很容易,使用Java线程,并且该示例应该清楚:

Scenario: pathMatches('/hardcoded')
    * def response = { hello: 'world' }
    * def fun = function(){ karate.log('*** before'); java.lang.Thread.sleep(5000); karate.log('*** after') }
    * eval new java.lang.Thread(fun).start()

请注意,JS function(){}会自动转换为Java可运行的,这很方便。您应该能够使用karate.call()从JS函数调用第二个功能,该功能可以完成您需要的POST。