gpt4 book ai didi

ruby - Rspec测试针对Docker容器失败

转载 作者:行者123 更新时间:2023-12-02 20:15:11 25 4
gpt4 key购买 nike

免责声明:我是ruby,rspec等的新手。我正在尝试为我的docker容器找到一个测试框架

我有一个运行aws cli的docker容器。我已经对此进行了手动测试,并且可以正常工作,作为测试的一部分,我想获取AWS版本并进行检查。

我已经创建了这个测试

it "aws is the correct version" do
expect(aws_version).to include("aws")
end

def aws_version
command("aws --version").stdout
end

当我运行它时,我得到的是预期的空白,看起来它没有运行并返回了任何东西
1) Dockerfile aws is the coorect version
Failure/Error: expect(aws_version).to include("aws")
expected "" to include "aws"

# ./tests_spec.rb:37:in `block (2 levels) in <top (required)>'

我所有其他测试都针对容器正确进行。我在下面包含了我的dockerfile和test_spec

Dockerfile:
FROM ubuntu:16.04


ENV LAST_UPDATE=09-04-2017

#####################################################################################
# Current version is aws-cli/1.11.83 Python/2.7.12 Linux/4.4.0-75-generic botocore/1.5.46
#####################################################################################


RUN apt-get update && apt-get -y upgrade
RUN apt-get install python-pip -y
RUN pip install --upgrade pip
RUN pip install --upgrade awscli s3cmd python-magic
RUN export PATH=~/.local/bin:$PATH
RUN mkdir /root/.aws
COPY config /root/.aws
#COPY credentials /root/.aws
WORKDIR /root
ENTRYPOINT ["aws"]
CMD ["--version"]

test_spec.rb:
require "docker"
require "serverspec"

describe "Dockerfile" do
before(:all) do
@image = Docker::Image.build_from_dir('.')

set :os, family: :ubuntu
set :backend, :docker
set :docker_image, @image.id

@container = Docker::Container.create(
'Image' => @image.id,
)
@container.start
end

it "installs the right version Name of Ubuntu" do
expect(os_version).to include("xenial")
end

it "installs the right version of Ubuntu" do
expect(os_version).to include("Ubuntu 16.04.2")
end

it "installs required packages" do
expect(package("python-pip")).to be_installed
end


it "aws is the coorect version" do
expect(aws_version).to include("aws")
end

def aws_version
command("aws --version").stdout
end

def os_version
command("cat /etc/lsb-release").stdout
end
after(:all) do
@container.kill
@container.delete(:force => true)
end
end

最佳答案

非常简单(但是花了我一些时间):出于某种原因,aws --version命令将其输出泵送到stderr而不是stdout上。因此改为:

def aws_version
command("aws --version").stderr
end

另外,值得注意的是,默认情况下,您的所有容器都运行 aws --version命令,然后退出。因此,只要您的规格运行得足够快,您就可以了,但是,如果不这样,它们将随机失败。

根据您的规范,我将覆盖图像的默认入口点/ cmd,并放入一个简单的 while true; do sleep 100; done,使其保持 Activity 状态,直到您的 after块杀死该容器为止。

关于ruby - Rspec测试针对Docker容器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43915514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com