使用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%)
答案 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)