在python nosetest中排除目录和模块

21 投票
3 回答
15274 浏览
提问于 2025-04-18 10:04

我们使用nose来发现并运行测试。所有的测试都是按照TestCase的格式写的,所以任何测试运行器都可以执行它们。问题是我们有一些目录里面没有任何测试。但是测试运行器还是会从这些目录里寻找测试。如果其中一个目录有很多文件,它就会卡住。那么我该如何排除这个目录呢?

目前我执行的是

nosetests --processes=10 --verbosity 2

但是有一个叫scripts的目录,从里面发现测试需要很长时间。所以我想把它排除掉。我尝试了

nosetests --processes=10 --verbosity 2 --exclude='^scripts$'

但没有成功。

3 个回答

4

也许这不是提问者想要的答案,但我发现这个来自nose文档的小知识很有用,可以用来排除某个文件:

如果一个对象定义了一个叫做__test__的属性,并且这个属性的值不是True,那么这个对象就不会被收集,也不会收集它里面包含的任何对象。

11

你还可以使用 --ignore-files 这个参数来排除特定的文件。因为它使用的是正则表达式,所以你可以在 scripts/ 文件夹里给你的文件起一个特定的前缀,这样就可以用正则表达式来匹配这些文件。

# Exclude just one test file
nosetests your_package --ignore-files="tests_to_exclude\.py" -v
# Exclude all python scripts beginning with `testskip_`
nosetests your_package --ignore-files="testskip_.+\.py" -v

查看:Nose 文档

20

有一个专门用于这个任务的插件,叫做 nose-exclude

nose-exclude 是一个 Nose 插件,它可以让你轻松指定哪些文件夹在测试时要排除。

这个插件还有其他一些功能,其中之一是新增了一个命令行参数,叫做 exclude-dir

nosetests --processes=10 --verbosity 2 --exclude-dir=/path/to/scripts

除了通过命令行参数来设置,你还可以设置一个叫 NOSE_EXCLUDE_DIRS 的环境变量,或者在 .nosercnose.cfg 文件中设置 exclude-dir 配置项。

撰写回答