7.3 测试 Deis
Deis 是一个有许多活动件( moving parts)的分布式系统,这使得彻底的测试每一个变化是至关重要的。
DEIS 也是一套对应于目录中的源代码库的组件。大部分的组件是 Docker 容器,两个是命令行客户端,一个包含文档。组件有源码级别的单元测试和黑盒类型的功能测试。集成测试校验组件组合在一起作为一个系统的行为。
Deis 的 GitHub pull requests 是通过在 http://ci.deis.io 的一个 Jenkins 持续集成(CI) 系统自动测试的。贡献者在提任何变更到 Deis 代码库之前,应该运行相同的本地测试。
设置环境变量
为了运行所有测试,你将需要:
- Vagrant 1.6.5 或更新版
- VirtualBox 4.3 或更新版
- Docker 1.3.0
- PostgreSQL server
该测试假设在你的 $GOPATH 中有 Deis 源码:
$ go get -u -v github.com/deis/deis
$ cd $GOPATH/src/github.com/deis/deis
启动一个 Docker Registry
Deis 的功能测试构建 Docker 镜像和在本地测试它们。镜像是被 pushed 到一个 Docker registry 的,以至于集成测试可以以二进制购件测试它们 - 就像真实世界 Deis 从 Docker Hub 拉取镜像。
如果你还没有为你的测试和持续部署提供一个可访问的 Docker registry,在本地启动一个:
$ make dev-registry
registry
To use local boot2docker registry for Deis development:
export DEV_REGISTRY=192.168.59.103:5000
运行测试
每个组件的单元和功能测试在它们各自的目录。集成测试,脚本,和支持的 go 包在项目根的 tests/
目录。
脚本在 tests/bin
目录,是最佳的启动位置。这些测试 Deis 的各个部分。然后启动一个 Vagrant 集群并以一个系统测试它们。它们调用 tests/bin/test-setup.sh
脚本来测试重要的环境变量,如果丢失了环境变量,将退出并输出有帮助的信息。
test-setup.sh 脚本也准备测试环境。而且会在测试完成后恢复过来。如果有一个测试失败,脚本会收集详细的组件日志,压缩它们,并放置在 $HOME。如果 s3cmd 在测试服务器上安装并且配置,脚本将上传日志到 Amazon S3。这是 Jenkins CI 基础设施如何被配置,因此贡献者可以访问日志来看他们的 PR 怎样失败的。
test-integration.sh:
- 运行文档测试
- 构建 Docker 镜像并使用 $BUILD_TAG 打 tag
- 运行单元和功能测试
- 创建 3 个节点的 Vagrant CoreOS 集群
- 推送 Docker 镜像到 registry
- 使用 registry 镜像为 Deis 提供集群
- 运行所有的集成测试
- 大概需要一小时
$ ./tests/bin/test-integration.sh
>>> Preparing test environment <<<
DEIS_ROOT=/Users/matt/Projects/src/github.com/deis/deis
DEIS_TEST_APP=example-go
...
>>> Running integration suite <<<
make -C tests/ test-full
...
>>> Test run complete <<<
test-smoke.sh
- 运行文档测试
- 构建 Docker 镜像并使用 $BUILD_TAG 打 tag
- 运行单元和功能测试
- 创建 3 个节点的 Vagrant CoreOS 集群
- 推送 Docker 镜像到 registry
- 使用 registry 镜像为 Deis 提供集群
- 运行一个“冒烟测试”,推送和扩展一个 app
- 大概需要 45 分钟
test-latest.sh
- 安装最新的 deis 和 deisctl 发行版
- 创建 3 个节点的 Vagrant CoreOS 集群
- 使用最新的发行镜像为 Deis 提供集群
- 大概需要 30 分钟
运行特定的测试
以这种方式为单个组件运行测试:
$ make -C logger test # unit + functional
$ make -C controller test-unit
$ make -C router test-functional
定制化测试运行
文件 tests/bin/test-setup.sh
是对环境变量可影响测试行为的最佳参考。这里有一些重要的:
HOST_IPADDR
- 可与功能测试通信的 Docker 容器地址,可能是主机 IP 或 一个被分配给了 boot2docker。DEIS_TEST_APP
- Deis 示例 app 使用的名字, 它使从 GitHub (default: example-go)克隆的。DEIS_TEST_AUTH_KEY
- 用于注册 Deis controller 的 SSH 秘钥 (default: ~/.ssh/deis)DEIS_TEST_SSH_KEY
- 用于登陆到 controller 机器的 SSH 秘钥 (default: ~/.vagrant.d/insecure_private_key)DEIS_TEST_DOMAIN
- 用于测试的域名(default: local3.deisapp.com)