使用RSpec测试多个泊坞窗图像

时间:2016-10-31 16:42:56

标签: docker rspec

免责声明:对ruby和rspec来说是非常新的

我一直在尝试使用泊坞窗图片构建私人仓库作为我们不同项目的基本图像。我们还尝试将测试多个docker镜像作为测试套件的一部分。

我们虽然有rspec的奇怪问题,但似乎测试运行在错误的docker机器上。

目前,我们在一个单独的文件夹上有两个泊坞窗图像

.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── Jenkinsfile
├── README.md
├── Rakefile
├── nodejs
│   ├── 7.0
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   └── spec
│   │       └── image_spec.rb
│   └── README.md
├── python
│   ├── 2.7
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── docker-entrypoint.sh
│   │   ├── requirements.txt
│   │   └── spec
│   │       └── image_spec.rb
│   └── README.md
└── spec
    └── spec_helper.rb

这基本上是我们目前使用的结构,spec/spec_helper.rb使用默认/简单

require 'serverspec'
require 'docker'

RSpec.configure do |config|
  # Use color in STDOUT
  config.color = true

  # Use color not only in STDOUT but also in pagers and files
  config.tty = true

  # Use the specified formatter
  config.formatter = :documentation # :progress, :html, :textmate
end

这是我们正在使用的Rakefile内容

require 'rake'
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:rspec) do |t|
  t.pattern = Dir.glob('*/*/spec/*_spec.rb')
  t.rspec_opts = '--format documentation --require spec_helper --color'
end

task :default => :spec

我们遇到的问题是,当我们运行bundle exec rake rspec时,python/2.7/spec_image.rb测试失败,因为我们确定它们正在nodejs/7.0上运行。当我们运行bundle exec rspec python/2.7/spec/image_spec.rb时,它会成功运行。

image_spec.rb

python/2.7代码也是如此
require 'serverspec'
require 'docker'

DOCKER_FOLDER = "python/2.7"
describe "Python/2.7 Specs" do

  before :all do
    add_simplejson_to_requirements

    image = Docker::Image.build_from_dir(DOCKER_FOLDER,  ARG: 'requirements.txt')

    set :path, '/usr/local/bin:$PATH'
    set :os, family: :alpine
    set :backend, :docker
    set :docker_image, image.id
  end

  #test for python version 2.7
  it 'has python 2.7 installed' do
    expect(command('python -c "import sys; print(sys.version_info[:])"').stdout).to include\
      '2, 7'
  end

  it 'installs requirements.txt given as --build-arg' do
    expect(command('pip install simplejson==3.6.3').stdout).to include\
     'Requirement already satisfied'
  end

end

有人可以指出我们正确的方向吗?

由于

1 个答案:

答案 0 :(得分:0)

万一有人发现这个旧线程,我最近在测试多个图像/容器时遇到了同样的问题。我的解决方案是添加一个after(:all)块,该块在后端调用clear方法:

after(:all) do
  # Reset the docker backend so other images/containers can be tested.
  Specinfra::Backend::Docker.clear
end

有点臭,但能解决问题。更好的解决方案是创建自己的后端类,并从一开始就实现多图像/容器支持。