1

目前,我通过在“使用 Ruby 启动命令提示符”终端中使用 rake gem 一次在我的测试套件(由 Selenium Ruby Webdriver 编写)中运行所有 selenium 脚本。

为此,我必须创建一个名称为“rakefile.rb”的文件,其内容如下,并在我的终端中调用“rake”:(我已经根据我之前帖子中的一个人的指南了解了这些知识)。

task :default do
    FileList['file*.rb'].each { |file| ruby file }
end

但是,如果有一个脚本在执行时失败,运行将被终止。

任何人请帮助指导我如何修改“rakefile.rb”,以便如果有一个脚本失败,那么系统将忽略它并继续运行我的测试套件中的下一个脚本?

另外,您能否建议我一种在将脚本运行到一个输出文件时将所有结果写入的方法?或者每个脚本的结果都放在每个输出文件中,并且输出文件将显示失败的脚本列表。任何帮助表示赞赏。非常感谢。

4

2 回答 2

1

您可以使用beginandrescue来捕获测试脚本中的任何故障。

就像是

begin
 raise "Ruby test script failed"
rescue
 puts "Error handled"
end

在你的情况下会是这样的

task :default do
    FileList['file*.rb'].each { |file| 
    begin
      ruby file
    rescue
      puts "Test script failed because of #{$!}"
    end 
    }
end

并且在写入一个类似的文件时

task :default do
    $stdout = File.new('console.out', 'w')
    $stdout.sync = true
    FileList['*.rb'].each { |file| 
    begin
      ruby file
    rescue
      puts "test script failed because of #{$!}"
    end 
    }
end

这样做是覆盖 $stdout 以重定向控制台输出。

于 2012-12-14T15:46:20.003 回答
0

我在一个单元框架内运行我的所有测试。我自己使用测试单元,但你也可以使用 rspec。这也使您能够将断言添加到代码中,然后由单元框架报告。如果一个测试失败或出错,您可以继续下一个测试。

我的 rakefile 的简化版本如下所示

require 'rake/testtask'

#this will run all tests in directory with no dependencies 
Rake::TestTask.new do |t|
  t.libs << "test"
  t.test_files = FileList['FAL*.rb']
  t.verbose = true
end

#or you could run individual files like this

task :FAL001 do 
  ruby "FAL001.rb"
end

每个测试用例看起来像这样

require "test-unit"
gem "test-unit"
require "selenium-webdriver"

class FAL001 < Test::Unit::TestCase
  def testFAL001 #methods that begin with test are automatically run 
    #selenium code goes here 
    assert_true(1 == 1)
  end
  def test002 
    #another test goes here 
  end
end
于 2012-12-14T21:22:17.543 回答