我有很多顶级 Python 文件/包,并且发现使用 --cover-package 手动列出它们很烦人,所以我为自己做了两个别名。Aliasnosetests_cover
将覆盖 --cover-package 中列出的所有顶级 Python 文件/包。Aliasnosetests_cover_sort
将执行相同的操作,并另外按覆盖百分比对结果进行排序。
nosetests_cover_cmd="nosetests --with-coverage --cover-erase --cover-inclusive --cover-package=\$( ls | sed -r 's/[.]py$//' | fgrep -v '.' | paste -s -d ',' )"
alias nosetests_cover=$nosetests_cover_cmd
alias nosetests_cover_sort="$nosetests_cover_cmd 2>&1 | fgrep '%' | sort -nr -k 4"
笔记:
- 这是来自我的 .bashrc 文件。如果您不使用 bash,请适当修改。
- 这些必须从您的顶级目录运行。否则,包名称将不正确,coverage 将默默地无法处理它们(即,它不会告诉您您的 --cover-package 不正确,它会表现得就像您根本没有提供该选项一样)。
- 我目前在 Ubuntu 13.10 上使用 Python 2.7.6,鼻子版本 1.3.0 和覆盖版本 3.7.1。这是我测试这些命令的唯一设置。
- 在您的使用中,如果 --cover-erase 和 --cover-inclusive 不符合您的需求,请删除它们。
- 如果要按正常顺序而不是倒序排序,请在排序命令中替换
-nr
为。-n
- 这些命令假定所有顶级 Python 文件/包的命名都没有点(“.py”中的点除外)。如果这对您来说不正确,请阅读下面的详细信息部分以了解命令部分,然后根据需要修改命令。
细节:
我并不是说这些是实现我想要的结果的最有效的命令。它们只是我碰巧想出的命令。=P
主要要解释的是 --cover-package 的参数。它构建以逗号分隔的顶级 Python 文件/包名称列表(从文件名中删除“.py”),如下所示:
\$
-- 转义$
双引号字符串中的字符。
$( )
-- 插入其中包含的命令的结果。
ls
-- 列出当前目录中的所有名称(必须是顶级 Python 目录)。
| sed -r 's/[.]py$//'
-- 在列表中,将“foo_bar.py”替换为“foo_bar”。
| fgrep -v '.'
-- 在列表中,删除所有不带点的名称(例如删除 foo_bar.pyc 和 notes.txt)。
| paste -s -d ','
-- 将列表从换行符分隔为逗号分隔。
我还应该解释排序。
2>&1
-- 加入标准错误和标准输出。
| fgrep '%'
-- 删除所有没有%
字符的输出行。
| sort -nr -k 4
-- 按第 4 列(即覆盖百分比列)以相反的数字顺序对剩余的行进行排序。如果您想要正常顺序而不是反向顺序,请替换-nr
为-n
.
希望这对某人有帮助!=)