У меня есть много файлов и пакетов Python на верхнем уровне, и найти его раздражающим, чтобы перечислить их все вручную, используя --cover-package, поэтому я сделал два псевдонима для себя. Псевдоним nosetests_cover
будет запускать покрытие со всеми вашими файлами/пакетами Python верхнего уровня, перечисленными в пакете -cover. Псевдоним nosetests_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.
- Их необходимо запустить из каталога верхнего уровня. В противном случае имена пакетов будут некорректными, и покрытие будет без проблем обрабатывать их (т.вместо того, чтобы сообщать вам, что ваш --cover-пакет неверен, он будет действовать так же, как вы не предоставили вариант вообще).
- В настоящее время я использую Python 2.7.6 на Ubuntu 13.10 с носовой версией 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
- Соединения stderr и stdout.
| fgrep '%'
- Удаляет все выходные линии без символа %
.
| sort -nr -k 4
- Сортирует оставшиеся строки в обратном порядке по четвертому столбцу (который является столбцом процента покрытия). Если вы хотите нормальный порядок вместо обратного порядка, замените -nr
на -n
.
Надеюсь, это поможет кому-то! =)
С последними версиями носа и покрытием, код в тестовых файлах игнорируются под носом, так что вам не нужно указать пакет в все. – dbn