为unittest进行测试发现。从Python 2.7回滚到Python 2.4+
项目描述
这是从Python 2.7回滚到Python 2.4或更高版本(包括Python 3)的unittest测试发现机制和load_tests协议。
可以使用pip或easy_install安装discover。安装后,将当前目录切换到项目顶层目录并运行
python -m discover python discover.py
(如果您已安装setuptools或distribute,您还将有一个discover脚本可用。)
这将发现当前目录中的所有测试(有某些限制)。discover模块有多个选项来控制其行为(完整的用法选项显示在python -m discover -h)
Usage: discover.py [options] Options: -v, --verbose Verbose output -s directory Directory to start discovery ('.' default) -p pattern Pattern to match test files ('test*.py' default) -t directory Top level directory of project (default to start directory) For test discovery all test modules must be importable from the top level directory of the project.
例如,要使用不同的模式匹配测试模块,请运行
python -m discover -p '*test.py'
(对于像Bash这样的UNIX-like shell,您需要在测试模式周围加上引号,否则shell将尝试展开模式,而不是将其传递给发现。在Windows上,您必须不要在模式周围加上引号,因为Windows shell也会将引号传递给发现。)
测试发现是在 discover.DiscoveringTestLoader.discover 中实现的。除了将 discover 用作命令行脚本外,您还可以导入 DiscoveringTestLoader,它是 unittest.TestLoader 的子类,并在您的测试框架中使用它。
此方法从指定的起始目录找到并返回所有测试模块,递归到子目录中查找它们。只有与 pattern 匹配的测试文件才会被加载。(使用shell样式模式匹配。)
所有测试模块都必须可以从项目的顶层导入。如果起始目录不是顶层目录,则必须单独指定顶层目录。
load_tests 协议允许测试模块和包自定义它们如何被加载。这通过 discover.DiscoveringTestLoader.loadTestsFromModule 实现。如果测试模块定义了一个 load_tests 函数,则通过调用 load_tests 并传递三个参数: loader、standard_tests、None 来从模块中加载测试。
如果测试包名称(具有 __init__.py 的目录)与模式匹配,则将检查包中的 load_tests 函数。如果存在,则将其与 loader、tests、pattern 一起调用。
如果存在 load_tests,则发现将不会递归到包中,load_tests 负责加载包中的所有测试。
模式故意不以加载器属性的形式存储,以便包可以继续发现。存储 top_level_dir,以便 load_tests 不需要在 loader.discover() 中传递此参数。
discover.py 在一个 google code 项目中维护(在此处应发布错误和功能请求):http://code.google.com/p/unittest-ext/
discover.py 的最新开发版本可在以下位置找到:http://code.google.com/p/unittest-ext/source/browse/trunk/discover.py
变更日志
2010/06/11 0.4.0
添加了与 setuptools 兼容的测试收集器。在 setup.py 中设置“test_suite = ‘discover.collector’”。“setup.py test”将使用与 setup.py 相同目录的默认参数启动测试发现。
允许使用点模块名称而不是路径进行测试发现。
添加了 discover 脚本的 setuptools 兼容的入口点。
有缺陷的 load_tests 函数不会停止测试发现。将创建一个失败的测试来报告错误。
如果测试发现从错误的位置导入模块(通常是因为模块是全局安装的,并且用户期望在不同的位置运行针对开发版本的测试),则发现将因 ImportError 而停止,并报告问题。
在测试发现期间匹配文件是在 DiscoveringTestLoader._match_path 中完成的。此方法可以在子类中重写,例如,匹配完整文件路径或使用正则表达式进行匹配。
从 unittest2 迁移的发现测试。(这些测试需要 unittest2 来运行。)
与 Python 2.7 RC 1 中的 TestLoader 具有功能一致性。
2010/02/07 0.3.2
如果存在 load_tests,则它将标准测试作为 TestSuite 而不是测试列表传递。
2009/09/13 0.3.1
修复了当包目录与发现模式匹配时的问题。
2009/08/20 0.3.0
无法导入文件(例如,由于语法错误)不再会中断发现,但会报告为失败。
发现将不会尝试导入名称不是有效Python标识符的测试文件,即使它们与模式匹配。
discover-0.4.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 05c3fa9199e57d4b16fb653e02d65713adc1f89ef55324fb0c252b1cf9070d79 |
|
MD5 | 30bb643af4f5ea47fff572b5c346207d |
|
BLAKE2b-256 | 2d8928d437f7c96f4062860fed466d81e3d247c6a17aea687a0ecdb1aa30f2c3 |