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

时间:2018-04-24 01:42:04

标签: docker go microservices

我正在学习微服务架构,但现在有些混乱。

情况

  • golang写的4个项目
    1. orderService
    2. userService
    3. 工具
    4. 网络(转发HTTP请求)
  • orderServiceuserServiceweb通过grpc进行沟通
  • 通过web转发至orderServiceuserService
  • 的所有API请求
  • orderServiceuserService拥有自己的独立数据库
  • 他们都在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中集成测试四个微服务所必需的。

3 个答案:

答案 0 :(得分:3)

如果您更改Go代码,则必须重新编译;这不是异常的。 Go代码快速编译,这通常不是什么大问题。

我不确定你为什么要反复运行govendor。如果您正在处理依赖关系,则暂时更容易展开它。

为了加快速度,请不要在开发过程中使用Docker;至少不是Go代码。由于Go本身没有任何依赖性,因此这样做没有任何优势。您仍然可以在Docker中运行支持服务(例如数据库),但您不必一直重建并重新启动它。

答案 1 :(得分:1)

您没有解释您想要做什么样的测试。你这样做的方式似乎是你在运行带有数据库的实例,所以我把它当作集成测试。

我认为你在做这个之前已经写了单元测试。

如果您希望独立测试,我建议您使用http://onsi.github.io/ginkgo/

这将帮助您测试大多数api和业务场景,并单独测试orderService和userService的流程。

答案 2 :(得分:1)

首先,除非依赖性发生变化,否则我认为不必重复去供应商。它不应该经常发生。

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

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