【问题标题】:Data Driven Testing with Ruby's Test::Unit for Selenium使用 Ruby 的 Test::Unit for Selenium 进行数据驱动测试
【发布时间】:2010-10-20 05:54:26
【问题描述】:

我对 Ruby 和 Selenium 都很陌生,我只是想找出构建测试工具的最佳方法。我正在使用 Rake、Rake::TestTask 和 Test::Unit 来驱动它。我有一个套件,我想为每个浏览器/操作系统组合运行一次。我不知道如何参数化我的测试,我已经习惯使用 Junit4 和 TestNG。

require 'rake'
require 'rake/testtask'

browsers = ['IE on Windows', 'Firefox on Windows', 'Firefox on Mac', 'Safari on Mac']

task :default => [:run_tasks]

task :create_tasks do
  browsers.each do |browser|    
    Rake::TestTask.new("selenium_units:#{browser}") do |t|
      t.libs << "lib"
      t.pattern = 'test/*_test.rb'
      t.verbose = true
      t.warning = true
      t.opts = "BROWSER=\"#{browser}\""
    end
  end  
end

task :run_tasks => [:create_tasks]
task :run_tasks => browsers.map { |e| "selenium_units:"+ e }

我真的希望能够在我的套件或机箱设置中读取 BROWSER=。有什么建议吗?或者在 Ruby 中是否有更好的方法?

【问题讨论】:

    标签: ruby unit-testing selenium rake testunit


    【解决方案1】:

    在对源代码进行大量挖掘之后,我发现了一个没有记录的功能。 Test::Unit 测试运行器除了在命令行上执行您的测试用例,依靠自动运行器运行该类特定类的任何用例用例之外,不做任何事情。所以,当他们在 -- 之后说什么会作为选项传递时,他们的意思是命令行选项,而不是一些变量或参数。

    所以... 添加

    t.options = '-- -foo -bar=baz'
    

    实际上会将这些传递到您的 ARGV 中,并且您需要手动处理它们。将这些 args 放入工厂类中以获取适当的 Selenium 实例对我有用。

    【解决方案2】:

    这可能不是您要问的。但我已经在 Python 中解决了完全相同的问题,并在博客中讨论了它 Parameterizing Your Tests。我相信您可以在 Ruby 中使用相同的方法,但不确定它与您所做的相比如何。我很想知道其他人是如何解决这个问题的,但没有找到太多的文档。

    【讨论】:

    • 感谢您的链接。完全相同的问题,并且可以预见,类似的解决方案。我确实考虑过编写我自己的测试运行器,类似于你的,但是尽管测试库相对不成熟,但我想让一切都尽可能接近“ruby”的方式。写得很好。
    猜你喜欢
    • 2011-05-22
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多