阅读(3618) (0)

unittest 测试发现

2022-08-01 11:14:08 更新

3.2 版中的新功能。

Unittest 支持简单的测试发现。为了与测试发现兼容,所有测试文件都必须是从项目的顶级目录导入的模块(包括命名空间包)(这意味着它们的文件名必须是有效的标识符)。

 测试发现,简单的说就是unittest支持自动匹配测试用例,这个扫描项目中的测试用例的过程就叫测试发现。

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

cd project_directory
python -m unittest discover

注意:
作为快捷方式,​python -m unittest ​等效于​ python -m unittest discover​。如果您想将参数传递给测试发现,则必须显式使用 ​discover ​子命令。

discover​子命令具有以下选项:

-v--verbose

详细输出

-s--start-directory directory

用于启动发现的目录(默认).

-p--pattern pattern

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

-t--top-level-directory directory

项目的顶级目录(默认为启动目录)

-s、-p 和 -t 选项可以作为位置参数按该顺序传入。以下两个命令行是等效的:

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

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

警告
测试发现通过导入测试来加载测试。一旦测试发现从您指定的 start 目录中找到所有测试文件,它就会将路径转换为要导入的包名称。例如 foo/bar/baz.py 将导入为 foo.bar.baz

如果全局安装了包,并尝试在包的其他副本上进行测试发现,则导入可能在错误的位置发生。如果发生这种情况,测试发现将警告您并退出。

如果将起始目录作为包名称而不是目录的路径提供,则 discover 会假定它从哪个位置导入是预期的位置,因此不会收到警告。

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

版本 3.4 的更改: 测试发现支持起始目录的命名空间包。请注意,您还需要指定顶级目录(例如 ​python -m unittest discover -s root/namespace -t root​)