suites=unittest.defaultTestLoader.discover('testcase',pattern='test*.py')
基于该方法查看其源码,其中有一段代码令人寻味<最后三行>,如下。
def discover(self, start_dir, pattern='test*.py', top_level_dir=None):
'''以上代码省略,只复制了最后三行'''
if not is_namespace:
tests = list(self._find_tests(start_dir, pattern))
return self.suiteClass(tests)
再找到_find_tests方法如下:
tests = list(self._find_tests(start_dir, pattern)) 的list方法直接把这个生成器生成的数据一次性拿出来,没有起到生成器的作用,故对其做一定的改变如下。
将discover()改为一个生成器函数,等待更上层处理。
配合beautifulreport生成测试报告,需要在report模块对这个生成器做进一步处理。只需要将report方法中的注释的一行改为标红的代码即可。这时候就是一个模块一个模块的导入,运行。这里利用了生成器的惰性机制,当然也可以在外部做限定,使之一次只能导入一个模块(相对简单,这里不表)。
验证:
导入时就会打印红色标记内容。
未做更改时会一次性打印出来,再行运行用例one by one(奈何母语不过关,用一个接一个有点太口语化)。
配合beautifulreport如下: