2017-05-05 96 views
2

我知道这个问题有点主观,但我迷失在这里做什么。目前我正在使用Go + Go-kit编写一些微服务。我想用集成测试类型的方式来测试这些微服务的端点,但我不确定如何去做。我能想到的唯一的事情就是让shell脚本碰到端点并检查响应。但这看起来像是混乱,而不是一个真正的聪明的做法。我觉得应该有更好的方法来做到这一点。有没有人有什么建议?测试微服务?

+0

这个问题似乎有点宽泛。看来你需要先去做一些研究,然后再回来一些具体的问题。 [这](https://martinfowler.com/articles/microservice-testing/)可能是一个好的开始。 –

回答

0

端对端测试的另一种方法是Consumer-Driven Contract(CDC)。

虽然是有一些终端到终端的测试非常有用,他们也有一些缺点,如:

  • 消费者服务必须知道如何启动提供商的服务。这听起来像是不必要的信息,当服务数量开始增加时可能难以维持;

  • 启动服务可能会很慢。即使我们只谈几秒钟,也会增加开销时间。如果消费者依赖于多种服务,这一切都开始累加;

  • 提供者服务可能依赖于数据存储或其他服务按预期工作。这意味着现在不仅需要启动提供程序,还需要一些其他服务,可能是数据库。

CDC的想法描述不久为:

  1. 消费者定义了它从一个特定的请求到服务
  2. 的提供者和消费者在合同上达成一致预计
  3. 供应商不断验证合同是否得到履行

此信息取自here。详细了解这个article,即使它特定于Java,它也会很有用。

0

您可以使用httptest包在标准Go单元测试中执行此操作。这允许您创建可以传递给任何HandlerHandleFunc的模拟对象RequestResponseWriter。您创建相应的Request,将其传递给您的处理程序,然后从ResponseRecorder中读取响应,并根据预期的响应进行检查。

如果您使用默认多路复用器(呼叫http.Handle()注册处理程序),则可以使用http.DefaultServeMux进行测试。我过去曾将它用于微服务,并取得了良好的效果。适用于基准处理程序,路由和中间件。

0

您应该始终使用golang的原生unit testing framework来测试每个单独的服务(请勿使用shell脚本!)。 httptest似乎很好,但我认为它有更好的测试边界是有帮助的 - 你应该为你的代码的每个功能块真正拥有一个_test.go。较小的测试更容易维护。

就涉及多个微服务的整体集成测试而言,您不应在开发时进行这些测试。设置临时区域并在那里运行测试。

我的2美分。