Domanda

Il mio SUT, assomiglia a questo:

foo.py
bar.py
tests/__init__.py [empty]
tests/foo_tests.py
tests/bar_tests.py
tests/integration/__init__.py [empty]
tests/integration/foo_tests.py
tests/integration/bar_tests.py

Quando ho eseguito nosetests --with-coverage, Ho ottenere i dettagli per tutti i tipi di i moduli che preferisco ignorare.Ma non posso usare il --cover-package=PACKAGE opzione perché foo.py & bar.py non sono in pacchetto.(Vedere il thread dopo http://lists.idyll.org/pipermail/testing-in-python/2008-November/001091.html per i miei motivi per non metterli in un pacchetto.)

Posso limitare la copertura di uscita di soli foo.py & bar.py?

Aggiornamento - Supponendo che non c'è una risposta migliore di Nadia's di sotto, ho chiesto a un follow-up domanda: "Come faccio a scrivere alcuni (bash) shell script per convertire tutti i nomi di file corrispondenti nella directory di opzioni della riga di comando?"

È stato utile?

Soluzione

Si può usare in questo modo:

--cover-package=foo --cover-package=bar

Ho avuto un rapido sguardo a codice sorgente del naso per confermare: Questa è la linea

    if options.cover_packages:
        for pkgs in [tolist(x) for x in options.cover_packages]:

Altri suggerimenti

È possibile utilizzare:

--cover-package=.

o anche variabile d'ambiente set

NOSE_COVER_PACKAGE=.

Testato con il naso 1.1.2

Ho un sacco di alto livello di Python file/pacchetti e trova fastidioso per elencarli tutti manualmente utilizzando-cover-pacchetto, così ho fatto due alias per me.Alias nosetests_cover verrà eseguita la copertura con tutti i migliori a livello di Python file/pacchetti elencati in-copertina-pacchetto.Alias nosetests_cover_sort farà lo stesso e inoltre ordinare i risultati per la copertura percentuale.

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"

Note:

  • Questo è, dal mio .bashrc.Modificare in modo appropriato, se non usi bash.
  • Questi devono essere eseguiti dalla vostra directory di livello superiore.In caso contrario, il nome del pacchetto non sarà corretto e la copertura sarà in silenzio non riescono ad elaborare loro (cioèinvece di raccontare-da copertura-pacchetto non è corretto, si comporta come te non fornire la possibilità a tutti).
  • Attualmente sto usando Python 2.7.6 su Ubuntu 13.10, con il naso versione 1.3.0 e la copertura della versione 3.7.1.Questa è l'unica configurazione in cui ho provato questi comandi.
  • Nel tuo utilizzo, rimuovere --copertura cancellazione-e-cover-inclusive, se non soddisfare le vostre esigenze.
  • Se si desidera ordinare in ordine normale, invece di invertire l'ordine, sostituire -nr con -n nel comando di ordinamento.
  • Questi comandi si presuppone che tutti i top a livello di Python file/pacchetti sono senza un punto (diverso il punto ".py").Se questo non è vero per voi, leggete la sezione Dettagli per capire il comando parti, quindi modificare i comandi appropriati.

Dettagli:

Non ho la pretesa che questi sono i più efficienti i comandi per ottenere i risultati desiderati.Sono solo i comandi che mi è capitato di venire con.=P

La cosa principale da spiegare sarebbe l'argomento --copertura-pacchetto.Ma costruisce un elenco separato da virgole di alto livello di file Python/pacchetto di nomi (con ".py" spogliato da nomi di file) come segue:

  • \$ -- Sfugge il $ carattere in una stringa fra virgolette.
  • $( ) -- Inserisce il risultato del comando contenuto all'interno.
  • ls -- Elenca tutti i nomi presenti nella directory corrente (deve essere di livello superiore Python directory).
  • | sed -r 's/[.]py$//' -- Nell'elenco, sostituisce "foo_bar.py" con "foo_bar".
  • | fgrep -v '.' -- Nell'elenco, rimuove tutti i nomi senza un punto (es.rimuove foo_bar.pyc e notes.txt).
  • | paste -s -d ',' -- Modifiche della lista da newline-separato da una virgola.

Vorrei anche spiegare l'ordinamento.

  • 2>&1 -- Unisce stderr e stdout.
  • | fgrep '%' -- Rimuove tutte le linee di uscita senza % carattere.
  • | sort -nr -k 4 -- Ordina i restanti linee di invertire l'ordine numerico dal 4 ° colonna (che è la colonna per la percentuale di copertura).Se si desidera che il normale ordine invece di invertire l'ordine, sostituire -nr con -n.

Spero che questo aiuta qualcuno!=)

Se si utilizza copertura: py 3.0 , poi il codice nella directory Python è ignorato per default, tra cui la libreria standard e tutti i pacchetti installati.

Vorrei fare questo:

nosetests --with-coverage --cover-package=foo,bar tests/*

Io preferisco questa soluzione agli altri suggerito; è semplice ma si sono espliciti su quali pacchetti si desidera avere la copertura per. La risposta di Nadia comporta un sacco di battitura più ridondante, la risposta di Stuart utilizza sed e ancora crea un pacchetto invocando touch __init__.py, e --cover-package=. non funziona per me.

Per tutti coloro che cercano di fare questo con setup.cfg, le seguenti opere. Ho avuto qualche difficoltà a capire come specificare più pacchetti.

[nosetests]
with-coverage=1
cover-html=1
cover-package=module1,module2
touch __init__.py; nosetests --with-coverage --cover-package=`pwd | sed 's@.*/@@g'`

È possibile migliorare la risposta accettata in questo modo --cover-package=foo,bar

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top