ipytest¶
Setup¶
[1]:
# Set the file name (required)
__file__ = "testing.ipynb"
# Add ipython magics
# Add ipython magics
import ipytest
import pytest
ipytest.autoconfig()
Test Case¶
[2]:
%%ipytest
def test_sorted():
assert sorted([4, 2, 1, 3]) == [1, 2, 3, 4]
. [100%]
1 passed in 0.00s
Test Fixture¶
[3]:
%%ipytest
@pytest.fixture
def dict_list():
return [
dict(a="a", b=3),
dict(a="c", b=1),
dict(a="b", b=2),
]
def test_sorted__key_example_1(dict_list):
assert sorted(dict_list, key=lambda d: d["a"]) == [
dict(a="a", b=3),
dict(a="b", b=2),
dict(a="c", b=1),
]
def test_sorted__key_example_2(dict_list):
assert sorted(dict_list, key=lambda d: d["b"]) == [
dict(a="c", b=1),
dict(a="b", b=2),
dict(a="a", b=3),
]
.. [100%]
2 passed in 0.01s
Testparametrisierung¶
[4]:
%%ipytest
@pytest.mark.parametrize(
"input,expected",
[
([2, 1], [1, 2]),
("zasdqw", list("adqswz")),
],
)
def test_examples(input, expected):
actual = sorted(input)
assert actual == expected
.. [100%]
2 passed in 0.01s
Referenz¶
%%run_pytest …
¶
IPython-Magic, die zuerst die Zelle und dann run_pytest
ausführt. In der Zelle übergebene Argumente werden direkt an pytest weitergeleitet. Zuvor sollten mit import ipytest.magics
die Magics importiert worden sein.
ipytest.run_pytest(module=None, filename=None, pytest_options=(), pytest_plugins=())
¶
führt die Tests im bestehenden Modul (standardmäßig main
) mit pytest aus.
Argumente:
module
: das Modul, das die Tests enthält. Wenn nicht angegeben wird, wird__main__
verwendet.filename
: Dateiname der Datei, die die Tests enthält. Wenn nichts angegeben wird, wird das__file__
-Attribut des übergebenen Moduls verwendet.pytest_options
: zusätzliche Optionen, die an pytest übergeben werdenpytest_plugins
: zusätzliche pytest-Plugins
ipytest.run_tests(doctest=False, items=None)
¶
Argumente:
doctest
: Wenn als WertTrue
angegeben wird, wird nach Doctests gesucht.items
: Das globals-Objekt, das die Tests enthält. WennNone
angegeben wird, wird das globals-Objekt aus dem Call Stack ermittelt.
ipytest.clean_tests(pattern="test*", items=None)
¶
löscht diejenigen Tests, deren Namen dem angegebenen Muster entsprechen.
In IPython werden die Ergebnisse aller Auswertungen in globalen Variablen gespeichert, sofern sie nicht explizit gelöscht werden. Dieses Verhalten impliziert, dass beim Umbenennen von Tests die vorherigen Definitionen weiterhin gefunden werden, wenn sie nicht gelöscht werden. Diese Methode zielt darauf ab, diesen Prozess zu vereinfachen.
Ein effektive Methode besteht darin, mit clean_tests
eine Zelle zu beginnen, dann alle Testfälle zu definieren und schließlich run_tests
aufzurufen. Auf diese Weise funktioniert das Umbenennen von Tests wie erwartet.
Argumente:
pattern
: Ein glob-Pattern, das verwendet wird, um die zu löschenden Tests zu finden.items
: Das globals-Objekt, das die Tests enthält. WennNone
angegeben wird, wird das globals-Objekt aus dem Call Stack ermittelt.
ipytest.collect_tests(doctest=False, items=None)
¶
sammelt alle Testfälle und sendet sie an unittest.TestSuite
.
Die Argumente sind die gleichen wie für ipytest.run_tests
.
ipytest.assert_equals(a, b, *args, **kwargs)
¶
vergleicht zwei Objekte und wirft eine Exception, wenn sie nicht gleich sind.
Die Methode ipytest.get_assert_function
bestimmt die zu verwendende Assert-Implementierung in Abhängigkeit von den folgenden Argumenten:
a, b
: die zwei zu vergleichenden Objekte.args, kwargs
: (Schlüsselwort)-Argumente, die an die zugrundeliegende Testfunktion übergeben werden.
ipytest.get_assert_function(a, b)
¶
bestimmt die zu verwendende Assert-Funktion in Abhängigkeit von den Argumenten.
Wenn eines der Objekte numpy.ndarray
, pandas.Series
, pandas.DataFrame
oder pandas.Panel
ist, werden die von numpy
und pandas
bereitgestellten Assert-Funktionen zurückgegeben.
ipytest.unittest_assert_equals(a, b)
¶
vergleicht zwei Objekte mit der assertEqual
-Methode von unittest.TestCase
.