-
Notifications
You must be signed in to change notification settings - Fork 141
Expand file tree
/
Copy pathPingPongWebSocketsTest.cs
More file actions
57 lines (47 loc) · 1.8 KB
/
Copy pathPingPongWebSocketsTest.cs
File metadata and controls
57 lines (47 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using NBomber.CSharp;
using NBomber.Data;
using NBomber.WebSockets;
namespace Demo.WebSockets;
public class PingPongWebSocketsTest
{
// To run this example you need to spin up local server examples/simulators/WebSocketsSimulator
// The server should run on localhost:60528
public void Run()
{
var payload = Data.GenerateRandomBytes(sizeInBytes: 500);
var scenario = Scenario.Create("ping_pong_websockets", async ctx =>
{
using var websocket = new WebSocket(new WebSocketConfig());
var connect = await Step.Run("connect", ctx, async () =>
{
await websocket.Connect("ws://localhost:60528/ws");
return Response.Ok();
});
var ping = await Step.Run("ping", ctx, async () =>
{
await websocket.Send(payload);
return Response.Ok(sizeBytes: payload.Length);
});
var pong = await Step.Run("pong", ctx, async () =>
{
using var response = await websocket.Receive(ctx.ScenarioCancellationToken);
// var str = Encoding.UTF8.GetString(response.Data.Span);
// var user = JsonSerializer.Deserialize<T>(response.Data.Span);
return Response.Ok(sizeBytes: response.Data.Length);
});
var disconnect = await Step.Run("disconnect", ctx, async () =>
{
await websocket.Close();
return Response.Ok();
});
return Response.Ok();
})
.WithWarmUpDuration(TimeSpan.FromSeconds(3))
.WithLoadSimulations(
Simulation.KeepConstant(1, TimeSpan.FromSeconds(30))
);
NBomberRunner
.RegisterScenarios(scenario)
.Run();
}
}