谷歌测试环境综述
代码提交之前
写代码
谷歌的代码基本上全都在一个中心化的代码库中,这个代码库技术叫做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的系统进行自动发布部署。
参考资料
- 谷歌归来:DevOps理念与集群管理实践
- Google Open Source Glossary 谷歌开源技术名词表
- The specific tools the Testing Grouplet, Testing Tech, Build Tools and others developed to improve testing development and efficiency at Google
- Advances in Continuous Integration Testing at Google
- Distributing Software in a Massively Parallel Environment
- Borg, Omega, and Kubernetes
- Release Engineering Best Practices at Google