J'ai beaucoup de fichiers/paquets Python de haut niveau et trouve ennuyeux de les énumérer tous manuellement à l'aide --cover-paquet, donc j'ai fait deux alias pour moi-même. Alias nosetests_cover
exécutera la couverture avec tous vos fichiers Python haut niveau/packages répertoriés en package --cover. Alias nosetests_cover_sort
fera de même et triera également vos résultats par pourcentage de couverture.
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"
Notes:
- C'est de mon .bashrc. Modifiez correctement si vous n'utilisez pas bash.
- Ceux-ci doivent être exécutés à partir de votre répertoire de niveau supérieur. Sinon, les noms de paquets seront incorrects et la couverture échouera silencieusement à les traiter (c.-à-d.au lieu de vous dire que votre --cover-package est incorrect, il agira comme si vous n'aviez pas fourni l'option du tout).
- J'utilise actuellement Python 2.7.6 sous Ubuntu 13.10, avec la version 1.3.0 et la version de couverture 3.7.1. C'est la seule configuration dans laquelle j'ai testé ces commandes.
- Lors de votre utilisation, supprimez --cover-erase et --cover-inclusive s'ils ne correspondent pas à vos besoins.
- Si vous souhaitez trier dans l'ordre normal plutôt que dans l'ordre inverse, remplacez
-nr
par -n
dans la commande de tri.
- Ces commandes supposent que tous vos fichiers/packages Python de niveau supérieur sont nommés sans point (autre que le point dans ".py"). Si ce n'est pas le cas, lisez la section Détails ci-dessous pour comprendre les parties de la commande, puis modifiez les commandes comme il convient.
Détails:
Je ne prétends pas que ce sont les commandes les plus efficaces pour atteindre les résultats que je veux. Ce sont juste les commandes que j'ai trouvées. = P
La principale chose à expliquer serait l'argument de --cover-package. Il construit la liste séparée par des virgules fichier Python haut niveau/noms de paquets (avec « .py » dépouillé des noms de fichiers) comme suit:
\$
- Protège le caractère $
dans une chaîne entre guillemets.
$()
- Insère le résultat de la commande contenue dans.
ls
- Répertorie tous les noms dans le répertoire courant (doit être le répertoire Python de niveau supérieur).
| sed -r 's/[.]py$//'
- Dans la liste, remplace "foo_bar.py" par "foo_bar".
| fgrep -v '.'
- Dans la liste, supprime tous les noms sans point (par exemple, supprime foo_bar.pyc et notes.txt).
| paste -s -d ','
- Modifie la liste de newline-separated à comma-separated.
Je devrais également expliquer le tri.
2>&1
- Rejoint stderr et stdout.
| fgrep '%'
- Supprime toutes les lignes de sortie sans caractère %
.
| sort -nr -k 4
- Trie les lignes restantes dans l'ordre numérique inverse par la 4ème colonne (qui est la colonne pour le pourcentage de couverture). Si vous souhaitez une commande normale au lieu de l'ordre inverse, remplacez -nr
par -n
.
Espérons que ça aide quelqu'un! =)
Avec les dernières versions du nez et de la couverture, le code dans les fichiers de test est ignoré sous le nez, vous ne devriez pas avoir besoin de spécifier le paquet à tout. – dbn