foo
è un progetto Python con annidamento di directory profonde, tra cui ~ 30 unittest
file in varie sottodirectory. All'interno foo
s' setup.py
, ho added a custom "test" command correre internamentePassando argomenti (per argparse) con scoprimento unittest
python -m unittest discover foo '*test.py'
Si noti che questo utilizza la modalità unittest
's discovery.
Poiché alcuni test sono estremamente lenti, ho deciso di recente che i test dovrebbero avere "livelli". La risposta a this question ha spiegato molto bene come ottenere unittest
e argparse
per funzionare bene l'uno con l'altro. Così ora, posso eseguire un file unittest individuale, dire foo/bar/_bar_test.py
, con
python foo/bar/_bar_test.py --level=3
e solo livello 3 test vengono eseguiti.
Il problema è che io non riesco a capire come passare la bandierina su ordinazione (in questo caso "--level = 3" utilizzando scoprire tutto ciò che provo non riesce, ad esempio:.
$ python -m unittest discover --level=3 foo '*test.py'
Usage: python -m unittest discover [options]
python -m unittest discover: error: no such option: --level
$ python -m --level=3 unittest discover foo '*test.py'
/usr/bin/python: No module named --level=3
Come può passo --level=3
ai singoli Unittests? Se possibile, vorrei evitare di dividere diversi test a livello di file diversi.
Bounty Modifica
La pre-taglie (fine) soluzione suggerisce di utilizzare il sistema enviro variabili Questo non è male, ma sto cercando qualcosa di più pulito.
Modifica del test di corridore più file (ad esempio, python -m unittest scoprire foo '* test.py') a qualcos'altro va bene, a patto che:
- Esso consente la generazione di un unico rapporto per multiple-file unittests.
- Può in qualche modo supportare più livelli di test (utilizzando la tecnica nella domanda o utilizzando un altro meccanismo diverso).
Quindi, grazie per la tua risposta, ma non sono riuscito a capire se questo consentisse qualcosa come la capacità di scoprire tutti i file in una directory, quindi generare un unico rapporto per tutti loro. –
Usa 'unittest' per eseguire tutti i test. Quindi, sì, fornisce gli stessi report di "unittest". Gli esempi nella mia risposta usano il flag -v (verbose) per unittest per fornire dettagli su tutto il test, compresi quelli che sono stati saltati perché il livello di test era troppo basso. – RootTwo
Ah, vedo - interessante. Grazie per la tua risposta - la guarderà ancora un po '. Apprezzato! –