Chef-testing-cookbook-with-test-kitchen

提供:Dev Guides
移動先:案内検索

シェフ-テストキッチン付きテストクックブック

テストキッチンはChefの統合テストフレームワークです。 クックブックを使用してVMがインスタンス化および収束された後に実行されるテストの作成が可能になります。 テストはVM上で実行され、すべてが期待どおりに機能することを確認できます。

これは、ChefSpecのノードコントラクトであり、Chefの実行のみをシミュレートします。 Test Kitchenは実際のノードを起動し、Chefを実行します。

設定する

これを行うには、仮想マシンの管理に役立つVagrantをマシンにインストールする必要があります。 次に、クックブックの依存関係を管理するために、本棚をインストールしてVagrantにフックする必要があります。

  • ステップ1 *-クックブックのデフォルトのレシピを編集します。
vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb
file "/tmp/greeting.txt" do
   content node['my_cookbook']['greeting']
end
  • ステップ2 *-クックブックの属性を編集します。
vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/attributes/default.rb
default['my_cookbook']['greeting'] = "Ohai, Chefs!"
  • ステップ3 *-gemファイルを編集して、必要なRuby gemをインストールします。
vipin@laptop:~/chef-repo $ subl Gemfile
gem 'test-kitchen', '~> 2.0.0.alpha.7'
gem 'kitchen-vagrant'
  • ステップ4 *-必要なRuby gemをインストールします。
vipin@laptop:~/chef-repo $ bundle install
...TRUNCATED OUTPUT...
Installing test-kitchen (1.0.0.alpha.7)
Installing kitchen-vagrant (0.10.0) ...TRUNCATED OUTPUT...
  • ステップ5 *-クックブックに.kitchen.ymlファイルを作成します。
vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl .kitchen.yml
---
driver_plugin: vagrant
driver_config:
   require_chef_omnibus: true
platforms:
   - name: ubuntu-12.04
  driver_config:
      box: opscode-ubuntu-12.04
      box_url:
         https://opscode-vm.s3.amazonaws.com/vagrant/
            opscode_ubuntu12.04_provisionerless.box
suites:
   - name: default
   run_list:
      - recipe[minitest-handler]
      - recipe[my_cookbook_test]
attributes: { my_cookbook: { greeting: 'Ohai, Minitest!'} }
  • ステップ6 *-クックブック内にテストディレクトリを作成します。
vipin@laptop:~/chef-repo/cookbooks/<Cookbook Name>$ mkdir test
  • ステップ7 *-統合テスト用のテストクックブックを作成します。
vipin@laptop:~/chef-repo/cookbooks/<Cookbook Name>/test $ knife
cookbook create my_cookbook_test
** Creating cookbook my_cookbook_test
** Creating README for cookbook: my_cookbook_test
** Creating CHANGELOG for cookbook: my_cookbook_test
** Creating metadata for cookbook: my_cookbook_test
  • ステップ8 *-テストクックブックのデフォルトレシピを編集します。
vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl
test/cookbooks/my_cookbook_test/recipes/default.rb
include_recipe 'my_cookbook::default'
  • ステップ9 *-クックブック内にミニテスト仕様を作成します。
vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ mkdir -p
   test/cookbooks/my_cookbook_test/files/default/tests/minitest

vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl
   test/cookbooks/my_cookbook_test/files/default/tests/minitest/default_test.rb

require 'minitest/spec'
describe_recipe 'my_cookbook::default' do
   describe "greeting file" do
      it "creates the greeting file" do
         file("/tmp/greeting.txt").must_exist
      end

      it "contains what's stored in the 'greeting' node
         attribute" do
         file('/tmp/greeting.txt').must_include 'Ohai, Minitest!'
      end
end
  • ステップ10 *-メインクックブックのBerksfileを編集します。
vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl Berksfile
site :opscode
metadata
cookbook "apt"
cookbook "minitest-handler"
cookbook "my_cookbook_test", path:
"./test/cookbooks/my_cookbook_test"

セットアップのテスト

vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ kitchen test
-----> Starting Kitchen (v1.0.0.alpha.7)
...TRUNCATED OUTPUT...
-----> Converging <default-ubuntu-1204>
-----> Installing Chef Omnibus (true)
...TRUNCATED OUTPUT...
Starting Chef Client, version 11.4.4
[2013-06-29T18:33:57+00:00] INFO: ** *Chef 11.4.4* **
[2013-06-29T18:33:58+00:00] INFO: Setting the run_list to
["recipe[minitest-handler]", "recipe[my_cookbook_test]"]
from JSON
...TRUNCATED OUTPUT...
# Running tests:
recipe::my_cookbook::default::greeting
file#test_0001_creates the greeting file = 0.00 s = .
recipe::my_cookbook::default::greeting
file#test_0002_contains what's stored in the 'greeting'
node attribute = 0.00 s = .
Finished tests in 0.011190s, 178.7277 tests/s, 178.7277
assertions/s.
2 tests, 2 assertions, 0 failures, 0 errors, 0 skips
...TRUNCATED OUTPUT...
-----> Kitchen is finished. (2m5.69s)