我有一个充满Python单元测试的heirarchical文件夹。它们都是可导入的“.py”文件,用于定义TestCase对象。此文件夹包含许多嵌套子目录中的数千个文件,并由其他人编写。我无权更改它,我只需要运行它。
我想生成一个包含该文件夹中所有TestCase的TestSuite对象。有一种简单而优雅的方法吗?
由于
答案 0 :(得分:4)
nose 应用程序可能对您有用,可以直接使用,也可以显示如何实现它。
http://code.google.com/p/python-nose/似乎是主页。
基本上,您要做的是走源树(os.walk
),使用imp.load_module
要加载模块,请使用unittest.defaultTestLoader
将测试从模块加载到TestSuite
,然后以任何方式使用它来使用它。
或者至少这与我在自定义TestRunner
实施中所做的大致相同
(bzr get http://code.liw.fi/coverage-test-runner/bzr/trunk
)。
答案 1 :(得分:2)
查看unittest.TestLoader(https://docs.python.org/library/unittest.html#loading-and-running-tests)
和os.walk(https://docs.python.org/library/os.html#files-and-directories)
您应该能够使用TestLoader遍历您的包树,以构建一个可以运行的套件。
有些事情。
runner = unittest.TextTestRunner()
superSuite = unittest.TestSuite()
for path, dirs, files in os.walk( 'path/to/tree' ):
# if a CVS dir or whatever: continue
for f in files:
# if not a python file: continue
suite= unittest.defaultTestLoader.loadTestsFromModule( os.path.join(path,f)
superSuite .addTests(suite ) # OR runner.run( suite)
runner.run( superSuite )
您可以简单地在每个测试中运行树(runner.run(suite)
)或,您可以累积所有单个套件中的superSuite
并将整个质量作为单个套件运行测试(runner.run( superSuite )
)。
您不需要同时执行这两项操作,但我在上述(未经测试的)代码中包含了两组建议。
答案 2 :(得分:1)
Python Library source的测试目录显示了方式。 README文件描述了如何为库模块编写Python回归测试。
开头"""Regression test.
This will find all modules whose name is "test_*" in the test
directory, and run them.