发觉式测试


Version3.2 新增:

Unittest支持简单的发觉式测试。为了与发觉式测试兼容,所有测试文件都必须是可从项目顶级目录导入的模块或包(包括namespace packages)(因此,它们的文件名必须是有效的标识符)。

  1. Test Discovery(发觉式测试) 的作用是:假设你的项目文件夹里面四散分布着很多个测试文件。当你做回归测试的时候,一个一个地执行这些测试文件就太麻烦了。TestLoader.discover() 提供了一个可以在项目目录下自动搜索并运行测试文件的功能,并可以直接从命令行调用。

发觉式测试是在TestLoader.discover()中实现的,也可以从命令行中使用。基本的命令行用法是:

  1. cd project_directory
  2. python -m unittest discover
  1. 注意:作为一种快捷方式,python -m unittestpython -m unittest discover是等价的。如果要通过参数使用发觉式测试,必须显式地使用discover子命令。

发觉式测试的附属命令如下:

-v,—verbose

详细输出

-s,—start-directory 目录

发觉式测试的目录(.默认)

-p,—pattern 模式

匹配测试文件的模式(test*.py 默认)

-t,—top-level-directory 目录

项目的顶级目录(默认是项目的根目录)

命令-s,-p,-t 可以作为参数在命令行中执行。一下两行命令是等价的:

  1. python -m unittest discover -s project_directory -p "*_test.py"
  2. python -m unittest discover project_directory "*_test.py"

除了作为路径之外,还可以传递包名,例如,myproject.subpackage.test,作为开始目录。然后将导入您提供的包名,并将其在文件系统上的位置用作开始目录。

  1. 注意:
  2. 发觉式测试通过导入测试来加载她们。一旦发觉式测试发现您指定的开始目录中的所有测试文件,它就会将路径转换为要导入的包名。例如foo/bar/baz.py将作为foo.bar.baz导入。

如果你在全局范围内安装了一个包,并尝试在包的另一个副本上运行发觉式测试,那么可能导入错误位置的包。如果发生这种情况,发觉式测试将警告你并退出。

如果你将开始目录作为包名而不是目录路径,那么发觉式测试会假设它从开始目录导入的就是你想要的,因此不会收到警告。

测试模块和包可以通过load_tests协议自定义测试加载和发觉。

  1. Version 3.4中更改:发觉式测试支持 namespace packages