谷歌测试环境综述

代码提交之前

写代码

谷歌的代码基本上全都在一个中心化的代码库中,这个代码库技术叫做Piper。在本地写好代码之后,可以生成pull request,内部叫做Changelist

代码编译

谷歌内部有一套分布式编译平台,叫做blaze,可以用来编译构建程序,以及跑单元测试(blaze本身不是拿来跑测试的,但提供了一个很方便的命令帮你去跑)。开源版本为bazel

容器镜像打包

内部有一个将代码或者数据打包的技术,叫做mpm(Midas Package Manager),参考这里。这个大概可以理解成外部的docker image,但并不完全等同。

单元测试

单元测试被提交到一个叫做forge的分布式系统上运行。

代码评审与presubmit test

谷歌使用内部的代码评审工具/UI叫做Critique
当Changelist被发送之后,会自动触发所有受影响项目的单元测试。分析决定要执行哪些测试的这个系统叫做TAP。

测试结果聚合平台

谷歌内部使用一个叫做Sponge的平台存储和检索各种测试运行结果/报告。

代码提交之后

Integration Tests 整合测试

我们内部使用名叫Guitar的系统进行整合测试的触发与执行。大约等同于外部的Jenkins
可以通过各种各样的设置,自动在提交以后触发Post-submit Tests

Tap greenness

代码提交以后(并入代码库之后),TAP会自动根据在新的代码库版本之上触发执行单元测试。并且持续报告结果

持续部署

谷歌使用名叫Rapid的系统进行自动发布部署

参考资料

  1. 谷歌归来:DevOps理念与集群管理实践
  2. Google Open Source Glossary 谷歌开源技术名词表
  3. The specific tools the Testing Grouplet, Testing Tech, Build Tools and others developed to improve testing development and efficiency at Google
  4. Advances in Continuous Integration Testing at Google
  5. Distributing Software in a Massively Parallel Environment
  6. Borg, Omega, and Kubernetes
  7. Release Engineering Best Practices at Google