【问题标题】:How to setup test preconditions before a ServerSpec test?如何在 ServerSpec 测试之前设置测试先决条件?
【发布时间】:2018-05-15 16:42:28
【问题描述】:

我正在编写一个简单的食谱,用于将 SSL 代理部署到服务器上。这本说明书最终将被其他部署 Web 服务的说明书使用,以便在它们前面设置 SSL 代理,但出于测试代理说明书本身的目的,它背后没有这样的服务。我对这本食谱的基本测试策略如下:

  1. 将盒子与测试厨房融合
  2. 将 ServerSpec(或可能的 Bats)与 test-kitchen 一起使用
    1. 通过在代理配置为转发到的端口上列出的框中启动 python SimpleHTTPServer 来设置测试,并在 index.html 文件中创建以供其服务。
    2. 断言当我点击https://localhost 时,我得到了 SimpleHTTPServer 正在服务的文件。
    3. 断言更多关于代理的事情(所有这些都要求它背后有一个服务。)
  3. 拆解。不需要拆掉任何东西,只要让 test-kitchen 毁掉盒子就行了。

所以我的问题是,使用 test-kitchen 和 ServerSpec 和/或 bats 设置这些测试先决条件的正确方法是什么?

【问题讨论】:

  • 所以我发现 Bats 支持设置和拆卸方法,因为它不是特定于厨师的。但是 bats 对于跨平台测试有点受限。仍在寻找是否有办法在 ServerSpec 中获得此功能。

标签: chef-infra test-kitchen serverspec


【解决方案1】:

如果设置和拆卸确实不是我正在测试的一部分,那么我通常只在每次测试之前运行的 Ruby 中执行它们(通常在 spec_helper.rb 中)。由于 serverspec 只是在测试厨房实例上逐行运行 ruby​​ 代码,因此我觉得没有必要在 serverspec 中提供提供设置/拆卸功能的东西(换句话说,没有排序问题或重复测试将需要调用 setup 或 teardown 方法)。

【讨论】:

  • 请原谅这是一个无知的问题,但我不是红宝石大师,对 who chef 生态系统来说相对较新。也就是说,这种方法是否适用于保证拆卸,还是我必须将所有测试放在救援块中以确保拆卸? (如果我想在开发期间重新运行测试而无需完全重新创建我的虚拟机,我发现我确实需要拆解而不是依赖厨房销毁)。
  • 通常的建议是完全销毁并重新创建 VM 以进行干净的测试。我通常使用kitchen convergekitchen verify 让测试通过,然后执行完整的kitchen test 以确保一旦我没有更多更改。您是否有理由不能在一个设置步骤中清理旧状态并重新设置?
  • 是的,这也是我正在做的事情。因此,在简单的情况下,将清理放在设置的顶部可能会起作用,但我可以看到更复杂的情况,多个规范具有相互冲突的设置需求。我不希望每个规范都必须知道如何拆解其他所有规范。最好每个人都有自己的处理方式。
  • 如果规范有一些难以清理的状态,我建议使用单独的测试套件。即使测试框架确实提供了拆卸步骤,也很难保证从头开始。
【解决方案2】:

老问题,但为了完整起见:
您可以在 serverspec 中使用 rspec 的 before

describe file('/tmp/testfile') do
  before do
    File.write('/tmp/testfile', 'Hello, world')
  end
  it { should exist }
  its(:content) { should include('Hello') }
end

https://github.com/jantman/serverspec-extended-types 中的 http_get 类型可以提供从 serverspec 中进行 HTTP 服务器测试所需的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多