Ruby元編程:執行某個目錄下的所有測試用例

目前手裏有個測試項目各個feature的測試用例都放在對應的子目錄下,雖然有自動化測試框架的幫助執行起來很方便,可是偶爾也有須要在本地執行某個feature的所有測試用例集合。由於本人對shell腳本不熟悉,因此Ruby的問題仍是用Ruby來解決。shell

每一個測試腳本的命名遵循以下規範:Testlink ID + 測試用例名字。好比100_invalid_signature.rb表示該測試用例在Testlink裏的ID是100,用來測試無效簽名。在腳本的實現中,測試用例的名字就對應爲TC_100。例子代碼以下:框架

1 class TC_100 < Test::Unit::TestCase
2   # ...
3 end

既然有規範存在,那麼一切都好說。我只要把100_invalid_signature.rb文件讀入,那麼經過文件名分析就知道必然存在一個測試用例類名爲TC_100,把它塞到測試集合中,最後運行這個測試集合就能夠了。例子代碼以下:測試

 1 require 'test/unit/testsuite'
 2 require 'test/unit/ui/console/testrunner'
 3 
 4 path = ARGV[0]    # 測試腳本所在的目錄
 5 $suite_names = []
 6 
 7 Dir.foreach(path) do |filename|
 8   if /d+_/ =~ filename    # 咱們的命名規範是數字開頭,下劃線而後是簡單描述。
 9     require "#{path}/#{filename}"
10     testcase_id = filename.split('_')[0]
11     $suite_names << "TC_#{testcase_id}"
12   end
13 end
14 
15 class Suites << Test::Unit::TestSuite
16   def self.suit
17     suites = self.new('Suites')
18     suite_names.each do |suite_name|
19       suites << eval("::#{suite_name}.suite")    # 這段是關鍵,利用eval就等於動態的插入了一段代碼。
20     end
21   end
22 end
23  
24 Test::Unit::UI::Console::TestRunner.run(Suites)
相關文章
相關標籤/搜索