-
Notifications
You must be signed in to change notification settings - Fork 14
test_on_local
使用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
文件
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