連載
OSSのサーバテスト自動化ツール徹底検証 2016年版 〜Serverspec編〜:実際に検証済み!OSS徹底比較(5)サーバテスト自動化【前編】(5/8 ページ)
各種オープンソースソフトウェアのうち、特に人気の高いOSSをピックアップ。実際の検証結果をまとめた本連載。今回と次回はサーバテスト自動化ツール「Serverspec」と「Infrataster」を紹介する。
テストスクリプトの実行
1.テストスクリプトの実行
以下のコマンドでServerspecのテストスクリプトが実行される。結果は標準出力に出力されるため、teeコマンドを利用し、ファイルにも保存している。
単一ホストを実行したい場合
$ rake spec:tissvv096 | tee tissvv096_test.log
全ホストを実行したい場合
$ rake spec | tee all_host_test.log
実行時のディレクトリのローカルに存在するRakefileを参照し、実行対象のテストスクリプトが選択、実行される。デフォルトで生成されるRakefileは以下の通り。上記コマンドの例のように、spec:[ホスト名]と指定すると、単一ホストのみが実行される。省略した場合は、./spec直下のホスト名を抽出し、1ホストごとに順番にテストスクリプトを実行するようになっている。
require 'rake' require 'rspec/core/rake_task' task :spec => 'spec:all' task :default => :spec namespace :spec do targets = [] Dir.glob('./spec/*').each do |dir| next unless File.directory?(dir) target = File.basename(dir) target = "_#{target}" if target == "default" targets << target end task :all => targets task :default => :all targets.each do |target| original_target = target == "_default" ? target[1..-1] : target desc "Run Serverspec tests to #{original_target}" RSpec::Core::RakeTask.new(target.to_sym) do |t| ENV['TARGET_HOST'] = original_target t.pattern = "spec/#{original_target}/*_spec.rb" end end end
2.ログ出力
テストスクリプトの実行により、以下の結果が出力される。
/usr/bin/ruby -I/usr/local/share/gems/gems/rspec-core-3.4.4/lib:/usr/local/share/gems/gems/rspec-support-3.4.1/lib /usr/local/share/gems/gems/rspec-core-3.4.4/exe/rspec --pattern spec/tissvv096/\*_spec.rb Command "yum check-update" exit_status should eq 0 Package "php" should be installed Package "php-mysql" should be installed Package "mariadb-server" should be installed with version "5.5" Service "mariadb" should be enabled should be running Port "3306" should be listening Command "mysqlshow -u root -pFM11AD2+ mysql" stdout should contain "Database" Command "mysqlshow" stdout should contain "Database" Command "mysqladmin ping" stdout should contain "mysqld is alive" Command "logrotate -vd /etc/logrotate.d/mariadb" stdout should contain "log does not need rotating" File "/var/www/wordpress/readme.html" should contain "Version 4.5.2" Command "mysqlshow -u wp_admin -pHB-F1XDJ WordPress" stdout should contain "WordPress" File "/var/www/wordpress/wp-config.php" should exist File "/var/www/wordpress/wp-config.php" should contain "define('DB_NAME',.*'WordPress');" should contain "define('DB_USER',.*'wp_admin');" should contain "define('DB_PASSWORD',.*'HB-F1XDJ');" should contain "define('AUTH_KEY',.*'FX702PFX801PPB100FX860PPB700PB500PB750PAI1000');" should contain "define('SECURE_AUTH_KEY',.*'FX702PFX801PPB100FX860PPB700PB500PB750PAI1000');" should contain "define('LOGGED_IN_KEY',.*'FX702PFX801PPB100FX860PPB700PB500PB750PAI1000');" should contain "define('NONCE_KEY',.*'FX702PFX801PPB100FX860PPB700PB500PB750PAI1000');" should contain "define('AUTH_SALT',.*'FX702PFX801PPB100FX860PPB700PB500PB750PAI1000');" should contain "define('SECURE_AUTH_SALT',.*'FX702PFX801PPB100FX860PPB700PB500PB750PAI1000');" should contain "define('LOGGED_IN_SALT',.*'FX702PFX801PPB100FX860PPB700PB500PB750PAI1000');" should contain "define('NONCE_SALT',.*'FX702PFX801PPB100FX860PPB700PB500PB750PAI1000');" Command "find /var/www/wordpress -not -user root -or -not -group root | wc -l | tr -d ' '" stdout should contain "^0$" File "/etc/httpd/conf.d/wordpress.conf" should exist File "/etc/httpd/conf.d/wordpress.conf" should contain "<VirtualHost *:80>\n ServerName tissvv096\n DocumentRoot /var/www/wordpress\n <Directory \"/var/www/wordpress\">\n AllowOverride All\n Options -Indexes\n </Directory>\n\n <Files wp-config.php>\n order allow,deny\n deny from all\n </Files>\n</VirtualHost>\n" Package "httpd" should be installed File "/etc/httpd/conf/httpd.conf.bak" should exist File "/etc/httpd/conf/httpd.conf" should contain "ServerName tissvv096" Service "httpd" should be enabled should be running Port "80" should be listening Command "firewall-cmd --list-all --zone=public" stdout should contain "services:.*ssh" stdout should contain "services:.*http" stdout should contain "services:.*mysql" stdout should contain "ports: " Command "curl http://tissvv096/wp-admin/install.php" stdout should contain "WordPress" Finished in 1.65 seconds (files took 0.58705 seconds to load) 39 examples, 0 failures
これだけのテスト項目が、わずか2秒弱で完了している。
Copyright © ITmedia, Inc. All Rights Reserved.