使用 kitchen-docker 做自动化测试


用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?

我特地为这个做了个演示,你移步到 kitchen-test-demo

下面是演示:

进入正确的目录

$ 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

0 个评论

要回复文章请先登录注册