Vagrant环境的自动化测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vagrant环境的自动化测试相关的知识,希望对你有一定的参考价值。
在许多项目中,我使用Vagrant和Puppet来获得用于开发的实时环境的副本。有时特别是在小型项目中,我经常需要进行更改,我重新配置了流浪盒,但它失败了!
是否有可能使用持续集成测试Vagrant框?
我需要检查盒子没有错误,并运行一些自定义测试,如打开一个网页。
Vagrant vs other choices for acceptance testing
在详细介绍之前,Vagrant绝对是本地验收测试的首选,因为它非常易于设置。但是,在CI环境中进行测试要困难得多,因为您必须设置所有各种部分才能使其正常工作(Ruby,Vagrant,Virtualbox等)。 Docker是一个很好的选择,因为它很轻巧,而且很多CI工具都内置了基于Docker的测试(例如Travis,Gitlab CI,CircleCI)。
我详细介绍了使用Docker的here。它并不完美,因为容器不是真正的机器:你不能测试像sysctl或swap这样的东西。但它有利于测试基本的Puppet模块(包,配置文件服务)。
您有两个主要选择来测试您的Puppet代码:
Beaker-rspec
Beaker是Puppet的Release Engineering团队编写的一个工具,用于测试Puppet Enterprise堆栈。后来Beaker-rspec诞生了,为Puppet模块测试提供了更像rspec的体验。
您编写的验收测试如下所示:
require 'spec_helper_acceptance'
describe 'cockpit class' do
context 'default parameters' do
# Using puppet_apply as a helper
it 'should work idempotently with no errors' do
pp = <<-EOS
class { '::cockpit': }
EOS
# Run it twice and test for idempotency
apply_manifest(pp, :catch_failures => true)
apply_manifest(pp, :catch_changes => true)
end
describe package('cockpit') do
it { is_expected.to be_installed }
end
describe service('cockpit') do
# it { is_expected.to be_enabled }
it { is_expected.to be_running }
end
context 'Cockpit should be running on the default port' do
describe command('sleep 15 && echo "Give Cockpit time to start"') do
its(:exit_status) { should eq 0 }
end
describe command('curl 0.0.0.0:9090/') do
its(:stdout) { should match /Cockpit/ }
end
end
end
end
然后针对选定的“管理程序”运行测试。所以在你的情况下,这将是流浪汉,我假设使用Virtualbox。
您配置主机配置文件,如下所示:
HOSTS:
centos-72-x64:
roles:
- master
platform: el-7-x86_64
box: puppetlabs/centos-7.2-64-nocm
hypervisor: vagrant
CONFIG:
type: foss
然后使用环境变量调用测试来选择要安装的Puppet版本等(它将默认为Puppet的最新版本以及您设置为默认的任何框):
$ PUPPET_INSTALL_VERSION="1.5.2" PUPPET_INSTALL_TYPE=agent BEAKER_set="centos-7-x64" bundle exec rake acceptance
/Users/petersouter/.rbenv/versions/2.3.3/bin/ruby -I/Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib:/Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rspec-support-3.5.0/lib /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/exe/rspec spec/acceptance
/Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/beaker-rspec-5.3.0/lib/beaker-rspec/helpers/serverspec.rb:43: warning: already initialized constant Module::VALID_OPTIONS_KEYS
/Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/specinfra-2.67.2/lib/specinfra/configuration.rb:4: warning: previous definition of VALID_OPTIONS_KEYS was here
Beaker::Hypervisor, found some vagrant boxes to create
==> centos-72-x64: VM not created. Moving on...
Bringing machine 'centos-72-x64' up with 'virtualbox' provider...
==> centos-72-x64: Importing base box 'puppetlabs/centos-7.2-64-nocm'...
有很多输出(我将我的日志设置为详细,但你也可以让它只在失败时显示),但最终你会得到一个通过测试:
以下是我在Serverfault上给出的Beaker-rspec的答案:
以下是解释Beaker-rspec和Puppet的其他一些链接:
- https://alexharv074.github.io/2016/05/13/setting-up-puppet-module-testing-from-scratch-part-ii-beaker-for-module-testing.html
- https://simp-project.atlassian.net/wiki/display/SD/Debugging+Acceptance+Tests+Using+Beaker
Test-kitchen
test-kitchen实际上是一个Chef工具,但有人将它分叉以支持Puppet(和Ansible)。我没有这方面的经验,但基本上它以非常类似的方式工作:你设置一个配置来测试,比如Vagrant盒子,然后以spec文件的形式编写测试:
require 'serverspec'
include Serverspec::Helper::Exec
include Serverspec::Helper::DetectOS
RSpec.configure do |c|
c.before :all do
c.path = '/sbin:/usr/sbin'
end
end
describe package('ntp') do
it { should be_installed }
end
describe service('ntp') do
it { should be_running }
end
这里有一些很好的链接:
- https://www.cedric-meury.ch/2016/10/test-driven-infrastructure-with-puppet-docker-test-kitchen-and-serverspec-yury-tsarev-gooddata/
- http://ehaselwanter.com/en/blog/2014/05/08/using-test-kitchen-with-puppet/
以上是关于Vagrant环境的自动化测试的主要内容,如果未能解决你的问题,请参考以下文章