如何在Ruby中为多个环境创建配置文件?

时间:2011-03-22 18:11:32

标签: ruby unit-testing file configuration environment

我不想让你感到困惑,所以我想做的是以下几点:

我有三种环境:

www.env1.com
www.env2.com
www.env3.com

我想根据我想要运行脚本的环境创建一些定义设置阶段的东西,即:

当前设置:

def setup
  @verification_errors = []
  @selenium = Selenium::Client::Driver.new(
    :host => "localhost",
    :port => 4444,
    :browser => "*firefox C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
    :url => "www.env1.com",
    :timeout_in_second => 60
  )

  @selenium.start_new_browser_session
end

我想要的是什么:

def setup
  @verification_errors = []
  @selenium = Selenium::Client::Driver.new( 
    :host => "localhost",
    :port => 4444,
    :browser => "*firefox C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
    **:url => This parameter configurable from a file or other source.**
    :timeout_in_second => 60
  )

  @selenium.start_new_browser_session
end

如果可以,我可以切换环境而无需重写所有测试用例。

希望你能帮助我,我真的需要这样做。

1 个答案:

答案 0 :(得分:3)

YAML是一种用于处理配置信息的出色数据序列化语言。它comes with Ruby所以你只需这样做:

require 'yaml'

将其加载,然后输入:

configuration = YAML::load_file('path/to/yamldata.yaml')

所有配置数据都将在configuration变量中提供。

通常我会通过编写一些Ruby代码为我的YAML文件创建一个存根,定义包含它的配置哈希,然后告诉YAML为我生成文件。 load_file的{​​{3}}和dump的{​​{1}}。

对于你正在做的事情,我会创建一个像:

这样的哈希
configuration = {
  'env1' => "www.env1.com",
  'env2' => "www.env2.com",
  'env3' => "www.env3.com",
}

使用YAML :: dump(配置)返回:

--- 
env1: www.env1.com
env2: www.env2.com
env3: www.env3.com

您要写入.yaml文件,然后在运行时加载并访问它:

@selenium = Selenium::Client::Driver.new( 
  :host => "localhost",
  :port => 4444,
  :browser => "*firefox C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
  :timeout_in_second => 60
  :url => configuration['env1'],
)

您可以使用其他键替换'env1'以使用env2或env3。

Rails使用YAML使一个文件处理应用程序的开发,测试和生产信息。在工作中我使用它做类似的事情,其中​​一个文件包含我们的应用程序的开发和生产环境信息,以及我们需要维护的一些哈希的定义,但不希望必须修改代码来执行此操作。 / p>