Testing 测试微服务?

Testing 测试微服务?,testing,go,integration-testing,microservices,Testing,Go,Integration Testing,Microservices,我知道这个问题有点主观,但我不知道该怎么办。目前,我正在使用Go+Go工具包编写一些微服务。我想以集成测试类型的方式测试这些微服务的端点,但我不确定如何进行。我唯一能想到的就是让shell脚本命中端点并检查响应。但这看起来像是胡涂,不是一个真正聪明的做法。我觉得应该有更好的办法。有人有什么建议吗?端到端测试的另一种方法是CDC 尽管进行一些端到端测试很有用,但它们也有一些缺点,如: 使用者服务必须知道如何启动提供者服务。这听起来像是不必要的信息,当服务数量开始增加时很难维护 启动服务可能很慢。

我知道这个问题有点主观,但我不知道该怎么办。目前,我正在使用Go+Go工具包编写一些微服务。我想以集成测试类型的方式测试这些微服务的端点,但我不确定如何进行。我唯一能想到的就是让shell脚本命中端点并检查响应。但这看起来像是胡涂,不是一个真正聪明的做法。我觉得应该有更好的办法。有人有什么建议吗?

端到端测试的另一种方法是CDC

尽管进行一些端到端测试很有用,但它们也有一些缺点,如:

  • 使用者服务必须知道如何启动提供者服务。这听起来像是不必要的信息,当服务数量开始增加时很难维护

  • 启动服务可能很慢。即使我们只讨论几秒钟,这也会增加构建时间的开销。如果一个消费者依赖于多个服务,这一切都开始累积起来

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

CDC的理念简述如下:

  • 使用者定义它对服务的特定请求的期望
  • 供应商和消费者就本合同达成一致
  • 供应商持续验证合同是否履行

  • 此信息取自。阅读更多关于这方面的内容,即使它是特定于Java的,它也会很有用。

    您可以使用包在标准的Go单元测试中完成这项工作。这允许您创建模拟
    请求
    响应编写器
    对象,这些对象可以传递给任何
    处理程序
    HandleFunc
    。创建相应的
    请求
    ,将其传递给处理程序,然后从
    响应记录器
    中读取响应,并对照预期响应进行检查


    如果您使用默认的mux(调用
    http.Handle()
    来注册处理程序),您可以针对
    http.DefaultServeMux
    进行测试。我过去在微服务中使用过它,效果很好。适用于基准测试处理程序、路由和中间件。

    您应该始终使用golang的本机测试每个单独的服务(请不要使用shell脚本!)。httptest看起来不错,但我认为拥有更细粒度的测试边界是很有帮助的——您的代码的每个功能块都应该有一个_test.go。较小的测试更容易维护

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


    我的2美分。

    这个问题似乎有点宽泛。看来你需要先去做一些研究,然后再提出一些具体的问题。这可能是一个好的开始。我不知道CDC将如何取代e2e测试,e2e通常包括UI,CDC会这样做吗?