因为公司自动化测试框架的一些要求,我们的ruby测试脚本(使用Test Unit)以如下形式组织:
authentication\(目录名为feature名字)
- 100_signature.rb (100为测试用例在TestLink对应的ID,后面为简单描述)
- 101_signature_with_invalid_key.rb
在每个测试脚本中,测试类根据ID命名,比如100_xxx.rb中code如下:
1 TC_100 < Test::Unit::TestCase 2 # … 3
这种组织形式给我们的日常执行带来了一些小麻烦,比如想执行一个folder下的所有测试用例,只有采用以下两种方式:
1)写个shell脚本,然后执行完后必须从很长的log中自己手工找出执行状况。
2)维护如下文件管理所有用例:
1 'test/unit/testsuite' 2 'test/unit/ui/console/testrunner' 3 4 'authentication/100_xxx.rb' 5 'authentication/101_xxx.rb' 6 7 Suites << Test::Unit::TestSuite 8 self.suit 9 suites = self.new('Suites') 10 suites << TC_100.suite 11 suites << TC_101.suite 12 13 14 15 Test::Unit::UI::Console::TestRunner.run(Suites)
但是这个方法有个问题,必须长期手工维护。比如每次添加新的用例就必须手动修改此文件以保持一致。
Ruby语言是强大的,灵活的,我们可以利用元编程的一些基本特性比如eval来轻松解决这个问题。在解决方案2的基础上新代码如下:
require require path = ARGV[0] $suite_names = Dir.foreach(path) do |filename| /d+_/ =~ filenam…………………………………………………………………………