匹配条件不适用于sse

时间:2017-12-14 11:17:43

标签: scala server-sent-events gatling

使用jsonPath(或任何其他匹配器)时,我无法执行检查。

使用message时,我可以在会话中保存整个JSON消息

  .check(wsAwait
    .within(6 seconds)
    .until(1)
    .message.exists
    //.jsonpJsonPath("$.data").exists
    .saveAs("CID"))

稍后在场景中我可以打印整个消息

{"event":"ConversationCreated",
  "data":"{"conversationId":"0e21f93d-6b0c-441f-a01d-8b0aa4e14769",
           "customerInfo":null,"deviceInfo":null}"}

但是当使用pathJson匹配器时,我的检查超时

  .check(wsAwait
    .within(6 seconds)
    .until(1)
    // .message.exists
    .jsonpJsonPath("$.data").exists
    .saveAs("CID"))

运行时会产生

...
12:09:32.248 [ERROR] i.g.c.a.b.SessionHookBuilder$$anon$1 - 'hook-2' crashed with 'java.util.NoSuchElementException: key not found: CID', forwarding to the next one
...

---- Errors --------------------------------------------------------------------
> Check failed: Timeout                                               1 (100,0%)

1 个答案:

答案 0 :(得分:0)

我设法让它“有效”。

问题是在JSON中缺少esce。

当您通过sse发送一些数据时,您的客户端将同时接收数据和事件类型。 Gatling将它作为Json Object提供。如果您发送的数据也是Json Gatling将只是以简单的字符串传递它,而不进行任何修改,这会产生不正确的Json

实际工作:

{"event":"ConversationCreated",
  "data":"{"conversationId":"0e21f93d-6b0c-441f-a01d-8b0aa4e19",
           "customerInfo":null,"deviceInfo":null}"}

正确的:

{"event":"ConversationCreated",
  "data":"{\"conversationI\d":\"0e21f93d-6b0c-441f-a01d-8b0aa4e19\",
           \"customerInfo\":null,\"deviceInfo\":null}\"}

或者,不是将message保留在Json中,而是将其保存为对象:

case class Message(event: String, data: String)