web-dev-qa-db-fra.com

Comment voir quels tests ont été exécutés pendant la commande de test manage.py de Django

Une fois l'exécution des tests terminée à l'aide de Django's manage.py test commande seul le nombre de tests réussis est imprimé sur la console.

(virtualenv) G:\Project\>python manage.py test
Creating test database for alias 'default'...
True
..
----------------------------------------------------------------------
Ran 2 tests in 0.017s

OK
Destroying test database for alias 'default'...

Existe-t-il un moyen de voir:

  1. quels tests ont été exécutés
  2. à partir de quel module
  3. dans quel ordre

Je n'ai trouvé aucune solution dans le doc.

66
Mariusz Jamro

Tu peux passer -v 2 à la commande test:

python manage.py test -v 2

Après avoir exécuté cette commande, vous obtiendrez quelque chose comme ceci (j'utilise Django 2, n'hésitez pas à ignorer les migrations/les trucs de base de données):

Creating test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...
Operations to perform:
  Synchronize unmigrated apps: messages, staticfiles
  Apply all migrations: admin, auth, contenttypes, sessions
Synchronizing apps without migrations:
  Creating tables...
   Running deferred SQL...
Running migrations:
  Applying contenttypes.0001_initial... OK
  ...
  Applying sessions.0001_initial... OK
System check identified no issues (0 silenced).
test_equal_hard (polls.tests.TestHard) ... ok      <--------+
test_equal_simple (polls.tests.TestSimple) ... ok  <--------+
                                                            |
                                                            |
           That's your tests!  >----------------------------+

Soit dit en passant, v signifie verbosité (vous pouvez également utiliser --verbosity=2):

python manage.py test --verbosity=2

Voici l'extrait du python manage.py test --help:

-v {0,1,2,3}, --verbosité {0,1,2,3}

Niveau de verbosité; 0 = sortie minimale, 1 = sortie normale, 2 = sortie détaillée, 3 = sortie très détaillée

104
Nigel Tufnel

La réponse de Nigel est excellente et certainement l'option de barrière à l'entrée la plus basse. Cependant, vous pouvez obtenez des commentaires encore meilleurs avec Django_nose (et ce n'est pas ça difficile à configurer;).

Ce qui suit est de: BDD avec Python

Premièrement: installez certaines exigences:

pip install nose pinocchio Django_nose

Ajoutez ensuite ce qui suit à settings.py

TEST_RUNNER = 'Django_nose.NoseTestSuiteRunner'
NOSE_ARGS = ['--with-spec', '--spec-color']

Exécutez ensuite vos tests comme d'habitude:

python manage.py test

La sortie devrait ressembler à ceci:

enter image description here

Remarque: Les commentaires sous vos tests peuvent être utilisés pour donner une sortie encore meilleure que juste le nom.

par exemple.:

def test_something(self):
    """Something should happen"""
    ...

Sortira "Quelque chose devrait arriver" lors de l'exécution du test.

Pour des points supplémentaires: Vous pouvez également générer/produire votre couverture de code:

pip install coverage

Ajoutez ce qui suit à votre NOSE_ARGS dans settings.py: '--with-coverage', '--cover-html', '--cover-package=.', '--cover-html-dir=reports/cover'

par exemple.:

NOSE_ARGS = ['--with-spec', '--spec-color', 
         '--with-coverage', '--cover-html', 
         '--cover-package=.', '--cover-html-dir=reports/cover']

Ensuite, vous obtiendrez un bon résumé de la couverture du code lorsque vous exécutez python manage.py test ainsi qu'un rapport html soigné dans reports/cover

16
toast38coza