【问题标题】:Re-use websocket connection with Karate DSL [duplicate]使用空手道 DSL 重新使用 websocket 连接 [重复]
【发布时间】:2019-04-02 17:51:44
【问题描述】:

使用 Websocket,您通常不会连续打开和关闭连接,这就是为什么我尝试对功能文件中的所有测试使用相同的 Websocket + 我的编程逻辑也需要这样做,因为我目前不支持逻辑会话websocket 的顶部。

我尝试了以下不同的变体(callcallonce),但它对我不起作用。

Feature: Notify about created fixtures

    Background:
        * def openWs = call read ('classpath:openWebsocket.js')
        * def ws = callonce openWs

    Scenario: Request a new session
        * def createSessionRequest = { 'action': 'POST', 'resource': 'sessions', 'requestId': 'df9a64de-3c22-40f8-807a-7eba5a432c95', 'version': 1 }

        * string createSessionRequest = createSessionRequest
        * eval ws.send(createSessionRequest)

        * json response = karate.listen(5000)
        * match response == { requestId: 'df9a64de-3c22-40f8-807a-7eba5a432c95', status: 201, version: 1, payload: { sessionId: '#string' } }

    Scenario: Subscribe for fixture updates
        * def subscribeFixtureRequest = { 'action': 'SUB', 'resource': 'fixtures', 'requestId': 'fa9eb7a5-d658-4f4b-bfa5-bc3bf2909cf3', 'version': 1 }

        * string subscribeFixtureRequest = subscribeFixtureRequest
        * eval ws.send(subscribeFixtureRequest)

        * json response = karate.listen(5000)
        * match response == { requestId: 'fa9eb7a5-d658-4f4b-bfa5-bc3bf2909cf3', status: 200, version: 1 }

看起来它缓存了 websocket 实例,但在第一个场景之后它仍然关闭它,因此第二个失败。

日志如下所示(删除了一些不相关的行):

19:42:13.003 [main] TRACE com.intuit.karate - callonce waiting for lock: openWs
19:42:13.003 [main] INFO  com.intuit.karate - >> lock acquired, begin callonce: openWs
19:42:13.083 [nioEventLoopGroup-3-1] DEBUG c.i.k.netty.WebSocketClientHandler - websocket client connected
19:42:13.083 [main] INFO  com.intuit.karate - << lock released, cached callonce: openWs
19:42:13.092 [main] TRACE c.i.karate.netty.WebSocketClient - sent: {"action":"POST","resource":"sessions","requestId":"df9a64de-3c22-40f8-807a-7eba5a432c95","version":1}
19:42:13.093 [main] TRACE com.intuit.karate - entered listen wait state
19:42:13.169 [nioEventLoopGroup-3-1] TRACE c.i.k.netty.WebSocketClientHandler - websocket received text
19:42:13.169 [nioEventLoopGroup-3-1] TRACE com.intuit.karate - signal called: {"payload":{"sessionId":"ee542db6-808c-4100-b009-f9e22dce28db"},"requestId":"df9a64de-3c22-40f8-807a-7eba5a432c95","status":201,"version":1}
19:42:13.170 [main] TRACE com.intuit.karate - exit listen wait state, result: {"payload":{"sessionId":"ee542db6-808c-4100-b009-f9e22dce28db"},"requestId":"df9a64de-3c22-40f8-807a-7eba5a432c95","status":201,"version":1}
19:42:13.203 [nioEventLoopGroup-3-1] DEBUG c.i.k.netty.WebSocketClientHandler - websocket closing
19:42:13.204 [nioEventLoopGroup-3-1] DEBUG c.i.k.netty.WebSocketClientHandler - websocket client disconnected
19:42:13.249 [main] TRACE com.intuit.karate - callonce cache hit for: openWs
19:42:13.256 [main] TRACE c.i.karate.netty.WebSocketClient - sent: {"action":"SUB","resource":"fixtures","requestId":"fa9eb7a5-d658-4f4b-bfa5-bc3bf2909cf3","version":1}
19:42:13.257 [main] TRACE com.intuit.karate - entered listen wait state
19:42:18.257 [main] TRACE com.intuit.karate - exit listen wait state, result: null

有没有办法自己控制websocket的开启和关闭?

编辑:我检查了源代码,不幸的是,它与ScenarioExecutionUnit 绑定得非常紧密,这会在Scenario 的末尾关闭它。似乎有必要更改空手道的代码来支持这一点。

【问题讨论】:

  • 是的,也许你应该只使用一个Scenario,或者考虑贡献。我们需要决定是否需要灵活地保持 UI 自动化驱动程序也在功能级别上打开。也许是一个新的configure
  • 我已经通过更改空手道代码尝试了一些方法,但还没有成功。我将为此在 github 上创建一个问题,我们可以在那里讨论进一步的事情。

标签: websocket karate


【解决方案1】:

空手道将来会支持这个:https://github.com/intuit/karate/issues/718

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多