pytest

PyTest

https://docs.pytest.org

Installation

pip install pytest

Return-Codes

Namen von Test-Dateien -Klassen, -Funktionen müssen immer mit test_ beginnen.

EXIT CODE DESCRIPTION
0 Test cases/test suites are executed successfully and end result was PASS
1 Test cases/test suites were executed, but some tests FAILED
2 Test execution was stopped by the user
3 Unknown error occurred when the tests were executed
4 Usage of pytest command is incorrect
5 No tests were collected

Fixtures

Test-Fixtures bieten eine ähnliche Funktionalität wie Tear-Up und Tear-Down für klassische UnitTests.

Scope

Die Gültigkeit erstreckt sich standardmäßig auf eine Funktion, kann aber mit dem Parameter scope erweitert werden.

FIXTURE SCOPE EXPLANATION
Function Fixture is executed/run once per test session
Session One fixture is created for the entire test session
Class Only one fixture is created per class of tests
Module Fixture is created once per module

pytest: Erweiterungen

Coverage für pytest

https://coverage.readthedocs.io

pip install pytest-cov
Ausführen

Die Ausgabe zeigt an, ob alle Tests ausgeführt wurden. Wenn ein Test durch Umbenennung deaktiviert wurde, kann dies mit dem Coverage-Modul geprüft werden.

pytest --cov=/pfad/zum/test_ordner
Ergebnis (Beispiel)
pytest --cov=src/pyhasse/tests/
============================= test session starts ==============================
platform darwin -- Python 3.7.3, pytest-4.6.2, py-1.7.0, pluggy-0.12.0
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('/Users/peter/pyhasse/src/pyhasse.acm/.hypothesis/examples')
rootdir: /Users/peter/pyhasse/src/pyhasse.acm, inifile: setup.cfg
plugins: cov-2.7.1, hypothesis-3.84.5
collected 17 items

src/pyhasse/tests/test_acm_rowsumcolsum.py ...                           [ 17%]
src/pyhasse/tests/test_acm_rowsumcolsum_2.py ...                         [ 35%]
src/pyhasse/tests/test_acm_rowsumcolsum_withoutprints.py ...             [ 52%]
src/pyhasse/tests/test_acm_self_6_4.py ...                               [ 70%]
src/pyhasse/tests/test_check_K.py ...                                    [ 88%]
src/pyhasse/tests/test_user_list.py .                                    [ 94%]
src/pyhasse/tests/test_user_zeta_d_not_in_list.py .                      [100%]

---------- coverage: platform darwin, python 3.7.3-final-0 -----------
Name                                                       Stmts   Miss  Cover
------------------------------------------------------------------------------
src/pyhasse/tests/test_acm_rowsumcolsum.py                    60      0   100%
src/pyhasse/tests/test_acm_rowsumcolsum_2.py                  60      0   100%
src/pyhasse/tests/test_acm_rowsumcolsum_withoutprints.py      65      0   100%
src/pyhasse/tests/test_acm_self_6_4.py                        60      0   100%
src/pyhasse/tests/test_check_K.py                             55      0   100%
src/pyhasse/tests/test_user_list.py                           21      0   100%
src/pyhasse/tests/test_user_zeta_d_not_in_list.py             28      0   100%
------------------------------------------------------------------------------
TOTAL                                                        349      0   100%


========================== 17 passed in 0.30 seconds ===========================

Selenium für pytest

pip install pytest-html

Test-Cases

Trennung von Testcode und Testdaten

https://smarie.github.io/python-pytest-cases/