标签: serverspec

使用serverspec使用相同的测试测试多个主机

Serverspec站点的"高级提示"部分显示了使用相同测试集测试多个主机的示例.我已经建立了一个我自己的例子(https://gist.github.com/neilhwatson/81249ad393800a76a8ad),但是有问题.

第一个问题是测试在第一次失败时停止,而不是继续通过该批次并保持计数.第二个是故障输出并不表示故障发生在哪个主机上.我该怎么做才能解决这些问题并为所有主机生成最终报告?

ruby rspec rspec3 serverspec

9
推荐指数
1
解决办法
915
查看次数

Rake/Rspec:如何使用--pattern来显示命令的第一个输出行?

问题:

如果我使用以下命令之一运行ServerSpec(基于RSpec)Rake:

  • rake
  • rake spec
  • rake spec:all
  • rake spec:<host>
  • bundle exec rake
  • ...

Rake stdout在serverspec输出之前打印它执行的命令:

/usr/bin/ruby1.9.1 
-I/var/lib/gems/1.9.1/gems/rspec-core-3.1.6/lib:/var/lib/gems/1.9.1/gems/rspec-support-3.1.2/lib 
/var/lib/gems/1.9.1/gems/rspec-core-3.1.6/exe/rspec 
--pattern spec/<host>/\*_spec.rb
Run Code Online (Sandbox Code Playgroud)

如果我手动传递目标主机来rspec这样...

TARGET_HOST=<host> rspec
Run Code Online (Sandbox Code Playgroud)

......行不会露面.

题:

如何防止Rake输出此行/命令?


我正在使用由...生成的默认Rakefile serverspec-init.

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)
    targets << File.basename(dir)
  end

  task :all     => targets
  task :default => :all

  targets.each do …
Run Code Online (Sandbox Code Playgroud)

ruby rake rspec serverspec

5
推荐指数
1
解决办法
1507
查看次数

即使出现故障,也要继续进行多主机测试

我已经构建了一些serverspec代码来在多个主机上运行一组测试.问题是当任何测试失败时,测试在当前主机上停止.即使测试失败,我希望它继续所有主机.

Rakefile:

namespace :spec do
  task :all => hosts.map {|h| 'spec:' + h.split('.')[0] }
  hosts.each do |host|
    begin
      desc "Run serverspec to #{host}"
      RSpec::Core::RakeTask.new(host) do |t|
        ENV['TARGET_HOST'] = host
        t.pattern = "spec/cfengine3/*_spec.rb"
      end
    rescue
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

完整代码:https: //gist.github.com/neilhwatson/1d41c696102c01bbb87a

ruby serverspec

5
推荐指数
1
解决办法
769
查看次数

main:Object的未定义方法`before'

我从下面的代码部分得到了上述错误.原因是什么?

 1  require 'spec_helper'
 2
 3  before(:all) do
 4    puts "ServerSpec tests on #{ENV['TARGET_HOST']}"
 5  end
Run Code Online (Sandbox Code Playgroud)

完整错误:

/home/newatson/src/serverspec/spec/cfengine3/common_spec.rb:3:in `<top (required)>': undefined method `before' for main:Object (NoMethodError)
        from /home/newatson/.gem/ruby/1.9.1/gems/rspec-core-3.2.3/lib/rspec/core/configuration.rb:1226:in `load'
        from /home/newatson/.gem/ruby/1.9.1/gems/rspec-core-3.2.3/lib/rspec/core/configuration.rb:1226:in `block in load_spec_files'
        from /home/newatson/.gem/ruby/1.9.1/gems/rspec-core-3.2.3/lib/rspec/core/configuration.rb:1224:in `each'
        from /home/newatson/.gem/ruby/1.9.1/gems/rspec-core-3.2.3/lib/rspec/core/configuration.rb:1224:in `load_spec_files'
        from /home/newatson/.gem/ruby/1.9.1/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:97:in `setup'
        from /home/newatson/.gem/ruby/1.9.1/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:85:in `run'
        from /home/newatson/.gem/ruby/1.9.1/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:70:in `run'
        from /home/newatson/.gem/ruby/1.9.1/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:38:in `invoke'
        from /home/newatson/.gem/ruby/1.9.1/gems/rspec-core-3.2.3/exe/rspec:4:in `<top (required)>'
        from /home/newatson/.gem/ruby/1.9.1/bin/rspec:19:in `load'
        from /home/newatson/.gem/ruby/1.9.1/bin/rspec:19:in `<main>'
Run Code Online (Sandbox Code Playgroud)

ruby rspec serverspec

4
推荐指数
1
解决办法
2772
查看次数

Serverspec:检查目录是否为空

我想检查一下现有目录是否为空(不包含任何文件或子目录)。

我尝试了以下方法:

describe file('/path/to/file') do
    it { should be_empty }
end
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。(当然,因为在文档中没有提到。)

重要提示:我不想测试目录是否存在-它确实存在并且无法更改。

现在,我的解决方案如下所示:

describe command('ls /data/nginx/cache/services | grep -q .') do
    its(:exit_status) { should eq 1 }
end
Run Code Online (Sandbox Code Playgroud)

但这不使用Serverspec资源类型“文件”。有没有更好的方法来测试文件夹为空?

ruby chef-infra test-kitchen serverspec

3
推荐指数
1
解决办法
1491
查看次数

标签 统计

ruby ×5

serverspec ×5

rspec ×3

chef-infra ×1

rake ×1

rspec3 ×1

test-kitchen ×1