Ratpack:构建简单高效的 HTTP 微服务(5)测试
- UID
- 1066743
|
Ratpack:构建简单高效的 HTTP 微服务(5)测试
测试HTTP 微服务的测试是非常重要的一环。Ratpack 对 HTTP 应用的单元测试和集成测试都提供了良好的支持。由于 Ratpack 的应用的逻辑都在处理器链中,只需要对处理器进行单元测试,就可以覆盖 Ratpack 应用测试的绝大部分内容。Ratpack 提供了单元测试所需的支持工具 RequestFixture。通过 RequestFixture 可以向处理器的实现发送指定内容的 HTTP 请求,再对返回的响应进行验证。
在 中,SetHeaderHandler 是一个简单的处理器实现,根据请求中的 HTTP 头信息来生成新的 HTTP 头和响应。在实际的测试中,使用 RequestFixture 的 handle 方法来包装一个处理器的实现对象,同时对请求进行设置,接着对返回的结果 HandlingResult 进行验证。
清单 11. 处理器单元测试1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| public class HandlerTests {
public static class SetHeaderHandler implements Handler {
@Override
public void handle(Context context) throws Exception {
String userId = context.getRequest().getHeaders().get("X-UID");
String greeting = String.format("Hello, %s", userId);
context.getResponse().getHeaders().set("X-GREETING", greeting);
context.render(userId);
}
}
@Test
public void testSetHeader() throws Exception {
HandlingResult result = RequestFixture.handle(new SetHeaderHandler(), fixture -> {
fixture.header("X-UID", "Alex");
});
assertEquals("Alex", result.rendered(String.class));
assertEquals("Hello, Alex", result.getHeaders().get("X-GREETING"));
}
}
|
在集成测试方面,Ratpack 提供了 ApplicationUnderTest 来运行一个 Ratpack 应用,并提供对应的 TestHttpClient 来对该应用进行测试。在 中,simpleServer 方法创建了一个简单的 RatpackServer 对象。在进行测试时,使用 ApplicationUnderTest 的 of 方法从该 RatpackServer 中创建一个 ApplicationUnderTest 对象,然后使用 getHttpClient 方法得到进行测试的 TestHttpClient 对象,就可以使用该对象来发送请求并验证结果。
清单 12. Ratpack 应用集成测试1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public class IntegrationTests {
public RatpackServer simpleServer() throws Exception {
return RatpackServer.of(server -> {
server.handlers(chain -> {
chain.get(ctx -> {
ctx.render("Hello");
});
});
});
}
@Test
public void testSimpleServer() throws Exception {
ApplicationUnderTest application = ApplicationUnderTest.of(simpleServer());
TestHttpClient httpClient = application.getHttpClient();
assertEquals("Hello", httpClient.get().getBody().getText());
}
}
|
小结
随着微服务架构的流行,会有越来越多的大型系统被重新组织成多个独立的微服务。这些微服务之间可以使用 HTTP 协议来通讯和集成。Ratpack 作为一个轻量级的 HTTP 应用开发库,可以开发出高效并且占用资源少的 HTTP 微服务。本文对 Ratpack 库的重要部分进行了详细的说明,包括上下文对象和处理器的概念,基本的 HTTP 请求处理,异步和非阻塞的实现方式,响应式流处理和对 Ratpack 应用进行测试等。 |
|
|
|
|
|