使用 WebTestClient 测试服务器发送事件 (SSE)
Testing Server Sent Events (SSE) with WebTestClient
我想知道测试 SSE 的最佳方法是什么?
我想测试的是我想检查我发送的消息(使用 Kafka)是否与我在 SSE 中收到的消息相同。
我读到我可以使用 WebTestClient 做到这一点,但我不明白的是我如何连接到 SSE、发送消息然后检查我的消息是否正确。
我提供了以下代码:
public void sseIsRunning() {
WebTestClient client = WebTestClient.bindToServer()
.baseUrl("http://localhost:8080")
.build();
client.get()
.uri("/sse/1")
.accept(TEXT_EVENT_STREAM)
.exchange()
.expectStatus().isOk()
.returnResult(MyEvent.class);
StepVerifier.create(result.getResponseBody())
.expectNext(myEvent())
.thenCancel()
.verify();
}
private MyEvent myEvent() {
MyEvent myEvent = new MyEvent();
myEvent.setClientId(1);
return myEvent;
}
public void messageIsSent() {
kafka.sendMessage("myTopic", myEvent());
}
我遇到的问题是我必须订阅
public void sseIsRunning() {
WebTestClient client = WebTestClient.bindToServer()
.baseUrl("http://localhost:8080")
.build();
client.get()
.uri("/sse/1")
.accept(TEXT_EVENT_STREAM)
.exchange()
.expectStatus().isOk()
.returnResult(MyEvent.class)
.getResponseBody()
.subscribe(new Consumer<String>() {
@Override
public void accept(String event) {
// response map for MyEvent class
}
});
}
我想知道测试 SSE 的最佳方法是什么?
我想测试的是我想检查我发送的消息(使用 Kafka)是否与我在 SSE 中收到的消息相同。
我读到我可以使用 WebTestClient 做到这一点,但我不明白的是我如何连接到 SSE、发送消息然后检查我的消息是否正确。
我提供了以下代码:
public void sseIsRunning() {
WebTestClient client = WebTestClient.bindToServer()
.baseUrl("http://localhost:8080")
.build();
client.get()
.uri("/sse/1")
.accept(TEXT_EVENT_STREAM)
.exchange()
.expectStatus().isOk()
.returnResult(MyEvent.class);
StepVerifier.create(result.getResponseBody())
.expectNext(myEvent())
.thenCancel()
.verify();
}
private MyEvent myEvent() {
MyEvent myEvent = new MyEvent();
myEvent.setClientId(1);
return myEvent;
}
public void messageIsSent() {
kafka.sendMessage("myTopic", myEvent());
}
我遇到的问题是我必须订阅
public void sseIsRunning() {
WebTestClient client = WebTestClient.bindToServer()
.baseUrl("http://localhost:8080")
.build();
client.get()
.uri("/sse/1")
.accept(TEXT_EVENT_STREAM)
.exchange()
.expectStatus().isOk()
.returnResult(MyEvent.class)
.getResponseBody()
.subscribe(new Consumer<String>() {
@Override
public void accept(String event) {
// response map for MyEvent class
}
});
}