首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Ratpack:构建简单高效的 HTTP 微服务(5)测试

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 应用进行测试等。
返回列表