使用 Ruby 的 Test::Unit for Selenium 进行数据驱动测试

发布于 2024-07-17 05:24:09 字数 818 浏览 9 评论 0原文

我对 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 中是否有更好的方法来做到这一点?

I'm pretty new to both Ruby and Selenium and I'm just trying to figure out the best way to build my test harness. I'm using Rake, Rake::TestTask, and Test::Unit to power this. I have a suite that I'd like to run once for each browser/os combination. I can't figure out how to parameterize my tests though, something I've become accustomed to with Junit4 and 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 }

I'd really like to be able to read that BROWSER= in the setup of my Suites or Cases. Any suggestions or is there plainly a better way of doing this in Ruby?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

难理解 2024-07-24 05:24:09

经过大量挖掘源代码后,我发现了一个没有如此记录的功能。 Test::Unit 测试运行程序除了在命令行上执行测试用例之外,不执行任何操作,依赖于自动运行程序来运行该类特定类的任何用例。 因此,当他们在 -- 之后说出任何内容时,将作为选项传递,他们指的是命令行选项,而不是某些变量或参数。

所以...
添加

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

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

After a lot of digging through the source I found a not so documented feature. The Test::Unit test runner doesn't do anything besides executing your test cases on the commandline relying on an autorunner to run any case cases of that class specific class. So, when they say anything after -- will be passed as options, they mean command line options, not some variable or parameter.

so...
adding

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

Will actually pass those into your ARGV and you are expected to process them manually. Taking those args and throwing them into a factory class to grab the appropriate Selenium instance will work for me.

洛阳烟雨空心柳 2024-07-24 05:24:09

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

This may not be what you are asking. But I've solved the exact same problem in Python and blogged about it in
Parameterizing Your Tests. I am sure you can use the same approach in Ruby, not sure how it compares with what you've done. I am interested to know how others have solved this problem though, and haven't found much documentation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文