applying a check to an SSE message

48 views
Skip to first unread message

Ashley Hindmarsh

unread,
Nov 23, 2017, 7:00:00 AM11/23/17
to Gatling User Group
I'm trying to construct a check on a test over server sent events, to test that they were received within a short timeframe.

I started with a simple check, using a regex. This completes with success when the message arrives.
.check(wsAwait.within(15 seconds).until(1).regex("""timestamp"""))

However, I've failed to get a more complex check to work, which examines the message body to extract a "sent" timestamp from the message and compare with the received time:

.check(wsAwait.within(15 seconds).until(1).jsonPath("$.data.timestamp").ofType[Long].transform( ts => java.lang.System.currentTimeMillis() - ts ).lessThan(5000L))

In this case, the check just times-out. I changed the final assertion to 'greaterThan()' and it still fails.

The messages are received ok (by switching debug on for the SSE agent).

e.g.
Received message '{"data":"{"user_id":"51d04790-df95-3bca-8c83-a5af6748a1ff","timestamp":1511434385963,"payload":{"@type":"DocumentNotificationPayload","document_id":"de670ed1-1a96-325b-9d77-95fbf7d96123","event_type":"updated","last_modified_timestamp":1511434385963}}"}'
So I'm sure the jsonPath is correct, and I'm marshalling it correctly.

regards
 Ash

Ashley Hindmarsh

unread,
Nov 23, 2017, 7:01:53 AM11/23/17
to Gatling User Group
Sorry forgot to say this is Gatling 2.2.4.

A bit more context...

sse("notifications")
.open(s"${connectPath}")
.header("Authorization", "${authHeader}")
.check(....)

Ashley Hindmarsh

unread,
Nov 28, 2017, 7:24:59 AM11/28/17
to Gatling User Group
Ok, i worked around the problem by using a regexp over the JSON, although it's pretty fragile.

  Ash
Reply all
Reply to author
Forward
0 new messages