如何使附加的pyunit python脚本搜索子文件夹中的测试

How can i make the attached pyunit python script search for tests in subfolders

下面的python脚本搜索并执行当前文件夹中的所有pyunit测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
"""Regression testing framework

This module will search for scripts in the same directory named
XYZtest.py.  Each such script should be a test suite that tests a
module through PyUnit.  (As of Python 2.1, PyUnit is included in
the standard library as 'unittest'.)  This script will aggregate all
found test suites into one big test suite and run them all at once.
"""


import sys, os, re, unittest

def regressionTest():
    path = os.path.abspath(os.path.dirname(sys.argv[0]))
    files = os.listdir(path)
    print 'You are HERE! ' ,os.getcwd()
    test = re.compile(".test\.py$", re.IGNORECASE)
    files = filter(test.search, files)
    filenameToModuleName = lambda f: os.path.splitext(f)[0]
    moduleNames = map(filenameToModuleName, files)
    modules = map(__import__, moduleNames)
    load = unittest.defaultTestLoader.loadTestsFromModule
    return unittest.TestSuite(map(load, modules))

if __name__ =="__main__":
    unittest.main(defaultTest="regressionTest")

如何在子文件夹中搜索测试文件。

可能是这样的:

1
import sys, os, re, unittest, fnmatch
1
2
3
    for root, dirs, files in os.walk(path):
        for filename in fnmatch.filter(files, pattern):
            print os.path.join(root, filename)


变化:

1
2
def regressionTest():
   path = os.path.abspath(os.path.dirname(sys.argv[0]))

到:

1
2
def regressionTest(somearg):
   path = os.path.abspath(os.path.dirname(somearg))

然后:

1
2
for root, dirs, files in os.walk(path):
    regressionTest(root)