我知道这个问题有点主观,但我不知道该怎么办。目前我正在使用Go + Go-kit编写一些微服务。我想以集成测试类型的方式测试这些微服务的端点,但我不确定如何去做。我唯一能想到的是使用shell脚本来命中端点并检查响应。但这看起来像kludge而不是一个真正聪明的做法。我觉得应该有更好的方法来做到这一点。有没有人有任何建议?
答案 0 :(得分:0)
端到端测试的另一种方法是Consumer-Driven Contract(CDC)。
尽管进行一些端到端测试很有用,但它们有一些缺点,如:
消费者服务必须知道如何启动提供者服务。这听起来像是不必要的信息,当服务数量开始增加时可能很难维护;
启动服务可能会很慢。即使我们只谈了几秒钟,这也增加了构建时间的开销。如果消费者依赖多种服务,这一切都会开始加起来;
提供者服务可能依赖于数据存储或其他服务来按预期工作。这意味着现在不仅需要启动提供商,还需要启动一些其他服务,可能是数据库。
CDC的想法很快被描述为:
答案 1 :(得分:0)
您可以使用httptest包在标准Go单元测试中执行此操作。这允许您创建可以传递给任何Request
或ResponseWriter
的模拟Handler
和HandleFunc
对象。您创建了相应的Request
,将其传递给您的处理程序,然后从ResponseRecorder
中读取响应,并根据预期的响应进行检查。
如果您使用默认的mux(调用http.Handle()
来注册处理程序),则可以对http.DefaultServeMux
进行测试。我过去曾将它用于微服务,效果很好。适用于处理程序,路由和中间件的基准测试。
答案 2 :(得分:0)
你应该总是使用golang的本地unit testing framework来测试每个服务(请不要使用shell脚本!)。 httptest似乎很好,但我认为有更细粒度的测试边界是有帮助的 - 你应该为你的代码的每个功能块都有一个_test.go。较小的测试更容易维护。
就涉及多个微服务的整体集成测试而言,您不应该在开发时进行这些测试。设置一个临时区域并在那里运行测试。
我的2美分。