在selenium ruby​​测试中,我可以将设置和拆解方法合并到一个位置进行所有测试吗?

时间:2010-12-29 22:25:20

标签: ruby selenium

在我的ruby Selenium Tests中,每次测试都有很多相同的代码。如何在测试之间最好地共享代码?例如,我的s​​etup和teardown方法在每个文件中是相同的,如何将它们从每个文件中删除到一个共享文件中,或者甚至可能?

def setup
    @verification_errors = []
    @selenium = Selenium::Client::Driver.new \
    :host => "#$sell_server",
    :port => 4444,
    :browser => "#$browser",
    :url => "http://#$network.#$host:2086/",
    :timeout_in_second => 60

    @selenium.start_new_browser_session
end

def teardown
    @selenium.close_current_browser_session
    assert_equal [], @verification_errors
end

我已尝试将设置放在共享模块和必需文件中,但两者都存在需要访问启动的@selenium对象的其他方法的继承的不同问题。如果有一个用于共享代码的设计,那么什么是好的设计呢?

2 个答案:

答案 0 :(得分:0)

我不确定你正在使用什么测试框架,但是在rspec中你可以把它放到你的spec_helper文件中,然后做一个before(:each)/ after(:each)。我会检查您选择的框架的回调文档。

答案 1 :(得分:0)

对于测试单元框架 - 似乎可以创建一个SharedTest类,使用setup和teadown方法继承Test :: Unit :: Testcase。然后只是将测试文件子类化为SharedTest。我发现的唯一不利后果是我必须添加一个test_default方法,该方法在SharedTest中不执行任何操作以使其工作。如果我将我的测试方法test_default命名为覆盖它并且看起来没问题,但不是很具描述性......

sharedtest.rb

class SharedTest < Test::Unit::Testcase
  def setup
    @verification_errors = []
    @selenium = Selenium::Client::Driver.new \
    :host => "#$sell_server",
    :port => 4444,
    :browser => "#$browser",
    :url => "http://#$network.#$host:2086/",
    :timeout_in_second => 60

    @selenium.start_new_browser_session
 end

 def teardown
    @selenium.close_current_browser_session
    assert_equal [], @verification_errors
 end

 def test_default
   #puts self
 end
end

T01_testcasename.rb

 class Test_01_whatever < SharedTest
   def test_default
      #test code
   end

我仍然愿意接受更好的解决方案,但这似乎对我有用。

相关问题