Skip to content

test_on_local

fsword edited this page Mar 1, 2017 · 1 revision

如何进行本地测试

使用docker的一个方便之处在于可以在单机上进行分布式系统的集成测试,这使得我们可以很容易的用高层测试验证功能,而减少对低层测试的维护负担。

手工验证

shelter 源文件根目录下可以直接执行

$ ./prepare.sh localhost
$ docker-compose build # 构建镜像
$ docker-compose up -d # 启动整个系统

这两条命令将在docker宿主机上启动系统的全部容器,它们之间自动建立了相互的协作关系。

使用浏览器可以访问这个系统,地址为: http://localhost ,缺省的管理员账号密码为: admin/shetler12345

自动验证

对分布式系统进行自动化测试需要一个独立的客户端,shelter的源代码目录下有一个integration_test目录,此目录下有一个Dockerfile,因此可以构建成一个独立的容器,不过在研发过程中,我们可以直接运行——

$ cd integration_test
$ bundle install # 安装依赖的gem包
$ ./run.sh       # 启动测试命令(cucumber)

集成测试

上一步的自动验证,本质上是借助一个http客户端,连接到已经启动的系统中进行自动测试,实际上我们可以把这两个部分放在一起自动完成,在 integration_test 目录下,我们借助 docker-compose 命令可以一步搞定

$ cd integration_test
$ docker-compose up -d # 启动各节点(包括测试节点)
$ docker-compose logs -f test # 查看测试结果

实际上,shelter就是通过这种方式借助travis进行自动化持续集成的,具体细节可以查看源代码目录下的.travis.yml文件

如果你使用虚拟机(或者 boot2docker、docker-machine)

docker只能对容器和宿主机进行端口映射,如果你的docker安装在虚拟机中,那么宿主机并不是localhost,这时首先要——

查找宿主机地址

linux下的docker daemon来说,linux系统一般也就是宿主机了,但是如果你使用了docker-machine,那么docker-machine所管理的虚拟机才是 docker的宿主机,这时访问localhost就不对了。

使用 docker-machine 的用户,可以用下列命令查询宿主机ip

$ docker-machine ip default

注意:如果管理多个虚拟机,那么需要把上述命令中的 default 换成实际的节点名称。

与此类似,boot2docker实际上也是在Mac OS中运行了一个很轻量级的虚拟机,所以你要查询到实际的宿主机ip以便进行访问

$ boot2docker ssh /sbin/ifconfig

不过 Docker for Mac 用户则不同,虽然它也用了虚拟机,但是这个虚拟机和Mac本身也是有映射的,所以不必这么麻烦。

使用实际的宿主机地址

查找到宿主机地址后,我们要重新执行预处理脚本:

$ ./prepare.sh <real_host>

然后就可以重新构建镜像并启动了

$ docker-compose build
$ docker-compose up -d