Docker 如果有多个微服务,我应该如何集成测试它们?

Docker 如果有多个微服务,我应该如何集成测试它们?,docker,go,microservices,Docker,Go,Microservices,我正在学习微服务架构,但现在有一些困惑 情况 有4个项目是用golang 订单服务 用户服务 工具 web(转发HTTP请求) orderService,userService,web通过grpc 所有api请求通过web转发到orderService或userService orderService和userService有各自独立的数据库 它们都在docker容器中 混乱 当我想测试一个请求时,我必须执行以下步骤: cd orderService govender update +ve

我正在学习微服务架构,但现在有一些困惑

情况
  • 有4个项目是用
    golang
  • 订单服务
  • 用户服务
  • 工具
  • web(转发
    HTTP
    请求)
  • orderService
    userService
    web
    通过
    grpc
  • 所有api请求通过
    web
    转发到
    orderService
    userService
  • orderService
    userService
    有各自独立的数据库
  • 它们都在
    docker
    容器中
混乱 当我想测试一个请求时,我必须执行以下步骤:

cd orderService
govender update +vendor
go build

cd userService
govender update +vendor
go build

cd web
govender update +vendor
go build

docker-compose build
docker-compose up
当我更改一些代码时,我必须再次执行此步骤。

我认为这是不科学和不正常的。我想知道是否所有这些步骤都是在docker中集成测试四个微服务所必需的。

您没有解释要进行哪种测试。您这样做似乎是在使用数据库运行实例,因此我将其视为一个集成测试

我假设您在执行此操作之前已经编写了单元测试

如果你想独立测试,我建议使用


这将帮助您测试大多数API和业务场景,并分别测试orderService和userService的流程。

您没有解释要进行哪种测试。您这样做似乎是在使用数据库运行实例,因此我将其视为一个集成测试

我假设您在执行此操作之前已经编写了单元测试

如果你想独立测试,我建议使用


这将帮助您测试大多数API和业务场景,并分别测试orderService和userService的流程。

如果更改Go代码,则必须重新编译;这并不反常。Go代码编译速度很快,所以这通常不是什么大问题

我不知道你为什么要反复运行Govendo。如果您正在处理依赖项,则通常更容易暂时取消对其的支持


为了加快速度,在开发过程中不要使用Docker;至少对于Go代码来说不是这样。因为Go本身没有任何依赖项,所以这样做没有任何好处。您仍然可以在Docker中运行备份服务(例如数据库),但不必一直重建和重新启动这些服务。

如果更改Go代码,则必须重新编译;这并不反常。Go代码编译速度很快,所以这通常不是什么大问题

我不知道你为什么要反复运行Govendo。如果您正在处理依赖项,则通常更容易暂时取消对其的支持


为了加快速度,在开发过程中不要使用Docker;至少对于Go代码来说不是这样。因为Go本身没有任何依赖项,所以这样做没有任何好处。您仍然可以在Docker中运行支持服务(例如数据库),但您不必一直重建和重新启动这些服务。

首先,我认为没有必要重复使用go供应商,除非依赖关系发生了变化。这不应该经常发生

其次,Golang确实要求您构建/编译,因此如果您进行更改,您必须重新构建服务。然而,大多数情况下,您应该只对一项服务进行更改,以使您的生活更轻松。这将使开发过程中的测试和调试更容易


最后,有几种方法可以使用docker加快开发速度。我建议继续使用docker,因为它将使您的devops生活更轻松,尽管您不必这样做。为简单起见,您可以将构建步骤移动到Docker容器。您需要做的是将包含依赖项的dir复制到容器中并在容器内构建(或者只需在容器内执行
go-run
)。这对于开发来说是可以的。如果希望有一组用于开发和部署的容器定义,可以编写一个脚本来编译每个服务,将二进制文件复制到一个目录中,并让docker从该目录中复制二进制文件。几行python脚本就足够了。这还有使用docker compose的额外好处,在这里,您只需单击一下就可以建立整个服务。然后,您还可以使用另一个docker容器编写集成测试启动器,该容器将运行您的测试一次并退出

首先,我不认为有必要重复go供应商,除非依赖关系发生了变化。这不应该经常发生

其次,Golang确实要求您构建/编译,因此如果您进行更改,您必须重新构建服务。然而,大多数情况下,您应该只对一项服务进行更改,以使您的生活更轻松。这将使开发过程中的测试和调试更容易


最后,有几种方法可以使用docker加快开发速度。我建议继续使用docker,因为它将使您的devops生活更轻松,尽管您不必这样做。为简单起见,您可以将构建步骤移动到Docker容器。您需要做的是将包含依赖项的dir复制到容器中并在容器内构建(或者只需在容器内执行
go-run
)。这对于开发来说是可以的。如果希望有一组用于开发和部署的容器定义,可以编写一个脚本来编译每个服务,将二进制文件复制到一个目录中,并让docker从该目录中复制二进制文件。几行python脚本就足够了。这还有使用docker compose的额外好处,在这里,您只需单击一下就可以建立整个服务。然后,您还可以使用另一个docker容器编写集成测试启动器,该容器将运行您的测试一次并退出

是的,这是一个集成测试,我以前写过单元测试是的,这是一个集成测试,而且