如何创建用Ruby编写的Selenium测试套件?

时间:2011-10-04 20:30:01

标签: ruby selenium selenium-rc

我有一堆用Ruby编写的Selenium测试。我用IDE记录并导出HTML测试作为Ruby(Test :: Unit)测试。在我的TestingProject(在NetBeans中创建的Ruby项目)中,我只是创建一个新文件(TestFile.rb)并复制/粘贴从Selenium IDE导出的录制内容。过了一会儿,我有几个文件,每个文件都在测试我们应用程序的不同部分。

TestFile1.rb
TestFile2.rb
TestFile3.rb

目前要运行测试,我有一个main.rb文件,我会像这样调用这些测试文件:

#file name: main.rb
require "./FolderName/TestFile1.rb"
require "./FolderName/TestFile2.rb"
require "./FolderName/TestFile3.rb"

在ruby中,“require”方法获取文件的名称并将内容作为ruby代码执行。此方法维护已处理的文件列表,因此不会多次运行任何这些文件。但是,我无法控制执行文件的顺序,也不能在不声明两次的情况下重新运行某些文件。如何为我的测试创建一个真正的测试套件(以编程方式)?请包括步骤。谢谢。

PS:这:Create JUnit TestSuite in a non-static way对我没有帮助。我想在我的例子的上下文中的步骤。谢谢。

3 个答案:

答案 0 :(得分:0)

在你找到一个更好的答案之前,你可以使用eval ...

以一种有点贫民窟的方式做到这一点
def test1
  eval(File.open(File.expand_path('~/FolderName/TestFile1.rb')).read)
end

def test2
  eval(File.open(File.expand_path('~/FolderName/TestFile2.rb')).read)
end

def test3
  eval(File.open(File.expand_path('~/FolderName/TestFile3.rb')).read)
end

test1
test2
test3
test1
#etc

就像我说的那样,这是错误的做法,但希望当有人看到我这样做的可怕方式时,他们会提供更好的方式。

答案 1 :(得分:0)

这个怎么样?获取测试脚本文件并以任何方式(在这种情况下按字母顺序)对它们进行排序,并且一次只运行一个。

scripts = DIR.entries('~/FolderName').select { |e| e =~ /.+\.rb/ }
scripts.sort.each { |s| `#{RUBY} s`}

答案 2 :(得分:-1)

所以我认为您可以执行以下操作:

我假设每个人都已经进行了设置和拆卸,但是如果将它们映射为CSV,则可以执行以下操作

#file name: main.rb
require 'csv'

def test_case
    test_case = './FolderName/TestPlan.csv'
    descriptor = test_case.shift
    descriptor = descriptor.map { |key| key.to_sym }
    test_case.map { |test| Hash[descriptor.zip(test) ] }
end

def run
    setup
    yield
    teardown
end 

test_case.each do |test|
    run do
##someFlair
        puts "Running Test #{test[:RECORDNUM]} @ #{(Time.now.strftime("%m-%d-%Y_%H%M%S"))}"
        require test[://columnReferring"./FolderName/TestFile1.rb"//]
    end
end

这可能不是最好的方法,但我认为它可以工作。

编辑:添加了一些技巧,以显示是否将“ RECORDNUM”作为列添加到csv中,它可以告诉您还正在运行哪个测试。