Jak sprawdzić, które testy zostały uruchomione podczas wykonywania polecenia manage.py test w Django

80

Po zakończeniu wykonywania testów za pomocą manage.py testpolecenia Django na konsolę wypisywana jest tylko liczba pomyślnie zakończonych testów.

(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'...

Czy jest jakiś sposób, aby zobaczyć:

  1. które testy zostały faktycznie wykonane
  2. z jakiego modułu
  3. w jakiej kolejności

Nie znalazłem żadnego rozwiązania w dokumencie.

Mariusz Jamro
źródło

Odpowiedzi:

128

Możesz przejść -v 2do testpolecenia:

python manage.py test -v 2

Po uruchomieniu tego polecenia otrzymasz coś takiego (używam django 2, możesz zignorować migracje / elementy bazy danych):

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!  >----------------------------+

Przy okazji, voznacza gadatliwość (możesz też użyć --verbosity=2):

python manage.py test --verbosity=2

Oto fragment z python manage.py test --help:

-v {0,1,2,3}, --verbosity {0,1,2,3}

Poziom gadatliwości; 0 = minimalne wyjście, 1 = normalne wyjście, 2 = szczegółowe wyjście, 3 = bardzo szczegółowe wyjście

Nigel Tufnel
źródło
22

Odpowiedź Nigela jest świetna i zdecydowanie najmniejsza bariera wejścia. Możesz jednak uzyskać jeszcze lepsze informacje zwrotne django_nose(i nie jest to trudne do skonfigurowania;).

Poniżej pochodzi z: BDD z Pythonem

Po pierwsze: zainstaluj niektóre wymagania:

pip install nose pinocchio django_nose

Następnie dodaj następujące elementy do settings.py

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

Następnie przeprowadź testy w normalny sposób:

python manage.py test

Wynik powinien wyglądać mniej więcej tak:

wprowadź opis obrazu tutaj

Uwaga: Komentarze w testach mogą być wykorzystane do uzyskania jeszcze lepszych wyników niż tylko nazwa.

na przykład:

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

Podczas wykonywania testu wyświetli komunikat „Coś powinno się zdarzyć”.

Dodatkowe punkty: możesz również wygenerować / wyprowadzić pokrycie kodu:

pip install coverage

Dodaj następujące elementy do swojego NOSE_ARGS w settings.py: '--with-coverage', '--cover-html', '--cover-package=.', '--cover-html-dir=reports/cover'

na przykład:

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

Po uruchomieniu otrzymasz ładne podsumowanie pokrycia kodu python manage.py testoraz zgrabny raport HTML wreports/cover

toast38coza
źródło
Cześć @ toast38coza. To całkiem fajne. Jestem nowy w Pythonie i miło jest zobaczyć dobrze sformatowane wyniki testu. Szukałem dokumentacji dla NOSE_ARGS, ale nic z tego, co znalazłem, nie pokazuje - ze specyfikacją i podobnymi. Czy możesz mi na to wskazać? Zasadniczo staram się zapobiec powtarzaniu się nosa: „Podobne do TransactionTestCase, ale użyj transaction.atomic()do uzyskania izolacji testu ......... nTestCase może być konieczne (np. Testowanie niektórych zachowań transakcyjnych)”.
Macario Tala
@MacarioTala argument --with-spec pochodzi z pinocchiowtyczki (możesz ją zainstalować za pomocą pip). Zobacz, gdzie jest napisane: „najpierw zainstaluj niektóre wymagania” powyżej.
toast38coza
Tak. Mam to zainstalowane. Spróbuję więc znaleźć dokumentację dotyczącą pinokio. Dzięki!
Macario Tala
1
W interesie udostępniania, zamieniłem pinokio, ponieważ było trochę zbyt gadatliwe, i zamiast rozwidlać go, znalazłem to: gfxmonk.net/dist/0install/rednose.xml , może ci się też spodobać.
Macario Tala,