本文补充unittest中discover()方法,加载不同模块(路径)下所有用例执行
本编作为makeSuite()方法的一个补充,在实际项目中,我们调试阶段可能需要执行固定几个模块的用例(一个目录下个别模块,不是所有模块)。
demo如下:
上图YPT目录下是我们所有的用例的模块,但我们只想执行前三个模块,废话不多说
代码如下:
import unittest
suite = unittest.TestSuite() # 构造一个测试套件suite
loader = unittest.TestLoader() # 实例化,定义一个存放获取用例case集
for name in moudleName: # moudleName是我们需要执行的三个模块名[moudle1, moudle2, moudle3]
current_path = Any_Path(projectName, name) # 拼接每个模块的绝对路径,Any_Path()是我自己封装的方法,你们可以用自己的。
discover = loader.discover(start_dir=current_path, pattern=matching, top_level_dir=projectName) # 注意:projectName 为'YPT'用例模块的上级目录名
suite.addTest(discover) # 加载所有模块下的用例case
if __name__=="__main__":
runner = unittest.TextTestRunner()
runner.run(suite) #开始执行测试套件
这里需要注意:discover()方法的三个参数,star_dir:模块的绝对路径;pattern:需要去匹配的用例py文件,一般写test*.py,这个根据你们实际项目写;top_level_dir:这个参数一般都我们都写的None,只适用于执行一次,for循环再次执行就会被赋值成上个执行的start_dir路径值,就会导致后续执行报错“Path must be within the project”。因此这里我们不能再写None,需要给它赋值:运行模块的上一级目录名(存放py文件模块的上一级这里注意是目录名,不是绝对路径)。