Pytest Coverage

Coverage jest pluginem sprawdzającym pokrycie kodu testami wyrażone w procentach. pytest-cov jest dodatkiem do pytest ułatwiający pracę z coverage - oryginalnym pluginem napisanym dla języka python. Dodatek ten oprócz wszystkich możliwości standardowej biblioteki, pozwala dodatkowo uruchomić sprawdzenie pokrycia kodu podczas testowana (dodatkowe parametry do pytest), pozwala wraz z pluginem pytest-xdist uruchimić testowanie na kilku wątkach.

Instalacja

$ pip install pytest-cov

Konfiguracja

Możemy skonfigurować oryginalny plik .coveragerc a później wskazać go podczas uruchomienia konfiguracji. Więcej informacji o konfiguracji znajdziemy w dokumentacji coverage

[run]
omit = tests/*

Uruchomienie pytest wraz ze wskazaniem pliku do kofiguracji dla coverage.

pytest --cov-config .coveragerc --cov=myproj myproj/tests/

Generowanie raportów

Posiadamy kilka opcji podczas generowania raportów:

  • term - uruchomienie raportu w terminalu
  • term-missing - uruchomienie raportu w terminalu wraz z informacją jakie linie kodu zostały przetestowane
  • html - generowanie raportu html
  • xml - generowanie raportu xml
  • annotate - tworzy nam kopię plików i oznacza w nich co zostało przetestowane
  • :skip-covered - opcja z pominięciem kodu który jest przetestowany w 100%

skip-covered można łączyć wraz z innymi generatorami w celu pominięcia raportu który jest pokryty w 100%.

$ pytest --cov-report term --cov=myproj tests/

-------------------- coverage: platform linux2, python 2.6.4-final-0 ---------------------
Name                 Stmts   Miss  Cover
----------------------------------------
myproj/__init__          2      0   100%
myproj/myproj          257     13    94%
myproj/feature4286      94      7    92%
----------------------------------------
TOTAL                  353     20    94%
$ pytest --cov-report term:skip-covered --cov=myproj tests/
$ pytest --cov-report html
         --cov-report xml
         --cov-report annotate
         --cov=myproj tests/

Debagowanie i IDE

Podczas gdy mamy zainstalowany dodatek używa on sys.settrace jako dostęp do kontekstu. Dlatego wykorzystując jakiekolwiek IDE należy wyłączyć plugin aby nie powodował problemów podczas wykorzystywnia np. break point.

$ pytest –no-cov

Markery

Jest to marker pozwalający nam na całkowite wyłączenie konkretnego testu podczas tworzenia raportu kodu pokrytego testami.

@pytest.marker.no_cover
def test_foobar():
    ...