WebSocket reconciliate wait for pending asynchronous wsListen checks

186 views
Skip to first unread message

Bill Ruddock

unread,
Jun 30, 2017, 10:25:16 AM6/30/17
to Gatling User Group
I am using Gatling 2.2.5 and trying to achieve the following:

open a websocket
send a HTTP POST request that triggers a server-side process that eventually sends a message to the websocket
wait for the websocket response
save a match from the websocket response

My original attempt for this has a race condition where the server-side process may complete before I start waiting for the websocket response (simplified snippet for demonstration):

  .exec(ws("Open websocket").open("/"))
  .exec(
    http("Trigger server-side process")
    .post("/path/to/process")
    .check(status.is(201))
  )
  // race condition: WebSocket response may have already been sent here
  .exec(
    ws("Await response")
    .sendText("""{"event":"ping"}""") // send an arbitrary message to enable setting a check
    .check(wsAwait.within(300 seconds).until(1).regex("""^(.*"event":"success".*)""").saveAs("ws_response")
  )

I am now trying to achieve a flow which removes this race condition but the Gatling DSL does not seem to quite support what I want:

  .exec(ws("Open websocket").open("/"))
  .exec(
    ws("Listen non-blocking for response")
    .sendText("""{"event":"ping"}""") // send an arbitrary message to enable setting a check
    .check(wsListen.within(300 seconds).until(1).regex("""^(.*"event":"success".*)""").saveAs("ws_response")
  .exec(
    http("Trigger server-side process")
    .post("/path/to/process")
    .check(status.is(201))
  )
  .exec(ws("Reconciliate WebSocket and HTTP states").reconciliate)

From experimentation and looking at the source code, it seems that reconciliate immediately cancels any pending checks, causing my script to fail. I want to wait until the websocket response has occurred and capture the saved variable into the session for future requests. I have tried making use of `asLongAs`, `during` et al but they do not seem to have access to the websocket state until reconciliate is called.

Alexander Mezhov

unread,
Oct 25, 2018, 8:23:37 AM10/25/18
to Gatling User Group
Does anyone know how to do it in v3.0?
Reply all
Reply to author
Forward
0 new messages