欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

用docker 做自动化测试教程

发布时间:2016-07-06 20:50  回复:0  查看:3103   最后回复:2016-07-06 20:50  
用docker 来启用应用和微服务是很多人用docker的目的,我今天介绍的是,如何用docker 做 自动化测试 。 

前提
请务必将 Kitchen test 的 Getting started 浏览一遍,保证其介绍的所有命令你都能正确的理解和使用。
为什么要自动化测试?
你想过没有,每次你对代码做了修改,增加新功能,修复某个bug,你如何保障你的代码依旧是健康的,不会产生新的问题。 手工一个个去排查是非常耗时的,而且容易遗漏。 

自动化测试就是在你提交的新代码前,你自己可以预先检测一下。在代码递交到代码仓库后被合并(merge)后,让CI/CD 工具(jenkins,bamboo,等等)自动测试新代码是否工作。 因为一切过程都是自动化,能省去很多维护的时间,保证递交的代码通过测试后,可以正常部署到实例上。
自动化测试的方式
自动化测试的方式有很多,类型也分 unit test,acceptance test,integration test, serverspec test, etc 

我们今天着重讲的是,使用kitchen-docker 这个组件来做自动化测试。 
kitchen-docker 是什么?
kitchen-docker 是chef 公司出品的kitchen test 的一个开源社区的插件。看完我一开始提到的kitchen test 的getting start guide 后,你就能体会到kitchen test 能做什么了。 

通常我们在自己的电脑环境中,用vagrant虚拟机做测试。使用kitchen-docker 后,就是调用docker 镜像和容器来做测试的媒体了。速度上会比vagrant快,尤其是在macbook上,安装了native docker for mac
如何使用 kitchen-docker?
下面是演示:
进入正确的目录
$ git clone  https://github.com/BWITS/kitchen-test-demo.git
$ cd kitchen-test-demo
$ find . -name ".kitchen.yml"
./kitchen-docker-ansible-serverspec/roles/demo/.kitchen.yml
./kitchen-docker-chef/.kitchen.yml
./kitchen-vagrant-ansible-serverspec/roles/demo/.kitchen.yml
./kitchen-vagrant-chef/.kitchen.yml

$ cd kitchen-docker-ansible-serverspec/roles/demo
列出测试实例
$ kitchen list
Instance           Driver  Provisioner      Verifier    Transport  Last Action
default-centos-72  Docker  AnsiblePlaybook  Serverspec  Ssh        Verified

#创建实例
$ kitchen create
-----> Starting Kitchen (v1.10.2)
-----> Creating <default-centos-72>...
   0.0.0.0:32790
   [SSH] Established
   Finished creating <default-centos-72> (0m0.10s).
-----> Kitchen is finished. (0m0.25s)
准备环境
如果测试的是ansible playbook,那么kitchen test 就会运行ansible-playbook安装该角色所有的应用配置
$ kitchen converge
-----> Starting Kitchen (v1.10.2)
-----> Converging <default-centos-72>...
...
   Transferring files to <default-centos-72>
   Using /etc/ansible/ansible.cfg as config file

   PLAYBOOK: default.yml **********************************************************
   1 plays in /tmp/kitchen/default.yml
...
   PLAY RECAP *********************************************************************
   localhost                  : ok=2    changed=0    unreachable=0    failed=0

   Finished converging <default-centos-72> (0m6.56s).
-----> Kitchen is finished. (0m6.71s)
检测
$ kitchen verify
-----> Starting Kitchen (v1.10.2)
-----> Setting up <default-centos-72>...
...
   Installing ruby, bundler and serverspec remotely on server
   Running Serverspec
   /usr/local/bin/rspec

   Package "httpd"
     should be installed

   Finished in 0.07733 seconds (files took 0.40255 seconds to load)
   1 example, 0 failures

   Finished verifying <default-centos-72> (0m0.89s).
-----> Kitchen is finished. (0m1.41s)


你可以加新的测试代码到 kitchen-docker-ansible-serverspec/roles/demo/test/integration/default/serverspec/default_spec.rb

如果想要快速的了解如何添加新的测试代码,请看 serverspec resources
用jenkings/bamboo做自动化测试
代码递交后,我们一般会用jenkins或者bamboo做build和deploy(可以自动触发),在build的过程里,你可以添加新任务做测试: 
cd kitchen-docker-ansible-serverspec/roles/demo
kitchen test

kitchen test = kitchen create + kitchen converge + kitchen verify + kitchen destroy
kitchen-docker 的缺陷
你不可能用kitchen-docker 去测试 docker container 的运行情况。这个只能转用kitchen-vagrant

我还没有找到如何一次测试所有的ansible roles。现在只能做到一个个测




原文来自:dockone.io
您还未登录,请先登录

热门帖子

最新帖子