【Deis文档】贡献之测试 Deis


注:本文翻译自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)

0 个评论

要回复文章请先登录注册