目前手裏有個測試項目各個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)