gpt4 book ai didi

java - Vert.x 异步测试

转载 作者:行者123 更新时间:2023-11-29 06:28:33 25 4
gpt4 key购买 nike

我是 vert.x 的新手。我正在尝试运行一些基本测试和基准测试等来评估框架(所以我可能做错了很多!)

我感兴趣的一件事是运行“ Controller ”级别测试的性能成本。我设置了一个应该反复启动和拆除 httpclient 的测试。

@Repeat(100)
@Test
public void testMyApplication(TestContext context) {

final Async async = context.async(1);
vertx.createHttpClient().getNow(8080, "localhost", "/",
response -> {
response.handler(body -> {
context.assertTrue(body.toString().contains("Hello"));
context.assertEquals(200, response.statusCode());
async.complete();
});
});
async.awaitSuccess();
}

然而,这偶尔会失败。

SEVERE: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:8080

什么是启动多个客户端并确保测试按顺序或以某种受控并行性运行的更好方法?

最佳答案

好的,

这里发生的事情是,由于异步调用,有时可以在调用 async.complete 之前启动新测试。因此,已经有一个测试服务器在端口 8080 上运行。

解决方案是通过配置传递一个端口,并在测试中使用一个随机端口。

      server.requestHandler(router::accept)
.listen(
config().getInteger("http.port", 8080),
...

测试变成

@Before
public void setUp(TestContext context) throws Exception {
ServerSocket socket = new ServerSocket(0);
port = socket.getLocalPort();
socket.close();

DeploymentOptions options = new DeploymentOptions()
.setConfig(new JsonObject().put("http.port", port)
);
vertx = Vertx.vertx();
vertx.deployVerticle(HelloVerticle.class.getName(), options,
context.asyncAssertSuccess());
}
...

@Repeat(100)
@Test
public void testMyApplication(TestContext context) {

final Async async = context.async();
vertx.createHttpClient().getNow(port, "localhost", "/",
response -> {
response.handler(body -> {
context.assertTrue(body.toString().contains("Hello"));
context.assertEquals(200, response.statusCode());
async.complete();
});
});
}

这篇博文帮助很大 http://vertx.io/blog/vert-x-application-configuration/

关于java - Vert.x 异步测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44784130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com