Pytest-Tutorial für Anfänger: Vorrichtungen, Parametrisierung und reale Beispiele

  1. Startseite
  2. Blog
  3. Testautomatisierung

Testautomatisierung

Pytest-Tutorial für Anfänger: Vorrichtungen, Parametrisierung und reale Beispiele

Mit Pytest können Sie Python-Tests mit einfachen Funktionen und einfachen Assert-Anweisungen schreiben. Erstellen Sie Schritt für Schritt eine kleine Testsuite, lesen Sie echte Fehlerausgaben und lernen Sie die Funktionen kennen, die Sie täglich verwenden werden.

10 Min. Lesezeit
Pytest-Tutorial für Anfänger: Vorrichtungen, Parametrisierung und reale Beispiele

Das Wichtigste

  • Pytest findet Funktionen mit dem Namen test_* und überprüft sie mit einfachen assert-Anweisungen.
  • Fixtures ermöglichen eine wiederverwendbare Einrichtung und Bereinigung, die einfach durch Benennung als Argumente angefordert wird.
  • @pytest.mark.parametrize führt einen Test mit vielen Eingaben durch.
  • Fügen Sie gemeinsam genutzte Geräte in conftest.py ein, und Sie müssen sie nicht importieren.

Wenn Sie es vermieden haben, Tests zu schreiben, weil sie sich wie eine lästige Pflicht anfühlen, sollte dieses Pytest-Tutorial Ihre Meinung ändern. Pytest macht den größten Teil der Zeremonie überflüssig: Es gibt keine Klassen, von denen geerbt werden kann, und keine speziellen Assertionsmethoden, die man sich merken muss. Ein Test kann nur aus zwei Zeilen bestehen.

Wir werden einen kleinen Einkaufswagen bauen und ihn Schritt für Schritt testen. Wir haben alles auf Python 3.13 mit Pytest 9.2 ausgeführt und die angezeigte Ausgabe ist real, obwohl wir die Dateipfade und Timing-Details gekürzt haben, die auf Ihrem Computer abweichen werden.

Warum Pytest?

Python wird mit unittest ausgeliefert, was gut funktioniert, aber pytest ist normalerweise die bequemere Wahl. Hier ist jeweils derselbe Check:

Aufgabe Unittest pytest
Gleichheit prüfen self.assertEqual(a, b) behaupten a == b
Überprüfen Sie eine Ausnahme self.assertRaises(...) pytest.raises(...)
Teststruktur Eine Klasse, die von TestCase erbt Eine einfache Funktion
Einrichtung und Bereinigung setUp und tearDown Methoden Wiederverwendbare Vorrichtungen
Viele Eingaben subTest Schleifen parametrisieren

Pytest kann auch Ihre vorhandenen unittest Tests ausführen, sodass Sie schrittweise umsteigen können. Es verfügt außerdem über ein großes Plugin-Ökosystem, darunter pytest-cov für die Abdeckung und pytest-xdist für parallele Ausführungen.

Installieren Sie Pytest

Erstellen Sie zunächst eine virtuelle Umgebung, wie in unserem Tutorial zur virtuellen Python-Umgebung erläutert, und installieren Sie sie dann:

pip install pytest
pytest --version

# pytest 9.2.0

Erstellen Sie einen Projektordner mit zwei Dateien, cart.py und test_cart.py. Pytest findet Tests automatisch, indem es Benennungsregeln befolgt: Dateien mit den Namen test_*.py oder *_test.py, Funktionen, die mit test beginnen, und Klassen, die mit Test beginnen. Wenn ein Test nicht abgeholt wird, ist zunächst eine Nichtübereinstimmung der Namen zu prüfen.

Der zu testende Code

# cart.py
class Cart:
    def __init__(self):
        self.items = []

    def add(self, name, price, qty=1):
        if qty < 1:
            raise ValueError("qty must be at least 1")
        self.items.append((name, price, qty))

    def total(self, discount=0):
        subtotal = sum(price * qty for _, price, qty in self.items)
        return round(subtotal * (1 - discount / 100), 2)

Deine ersten Tests

# test_cart.py
from cart import Cart

def test_empty_cart_is_free():
    assert Cart().total() == 0

Das ist ein vollständiger Test. Führen Sie pytest aus dem Projektordner aus und es wird ein bestandener Test gemeldet. Wenn Sie einen Importfehler erhalten, führen Sie ihn als python -m pytest aus, wodurch der aktuelle Ordner zum Importpfad hinzugefügt wird.

Lesefehler

Hier glänzt Pytest wirklich. Hier ist ein Test mit einem bewusst falschen Erwartungswert:

def test_wrong_total():
    c = Cart()
    c.add("Keyboard", 1500)
    assert c.total() == 1400

Und das wurde gedruckt, als wir es ausgeführt haben:

    def test_wrong_total():
        c = Cart()
        c.add("Keyboard", 1500)
>       assert c.total() == 1400
E       assert 1500.0 == 1400
E        +  where 1500.0 = total()

FAILED fail_example.py::test_wrong_total - assert 1500.0 == 1400
============================== 1 failed in 0.12s ==============================

Die > markiert die fehlerhafte Zeile und die E-Zeilen zeigen die tatsächlichen Werte. Sie mussten keine benutzerdefinierte Nachricht hinzufügen, da Pytest assert Anweisungen umschreibt, damit sie berichten können, was sie verglichen haben. Das Gleiche gilt für Listen und Wörterbücher, wobei genau darauf hingewiesen wird, welche Elemente sich unterscheiden.

Ausnahmen testen

Fehlerbehandlung ist ebenfalls Verhalten und verdient Tests. pytest.raises besteht nur dann, wenn der Block die erwartete Ausnahme auslöst:

import pytest

def test_rejects_zero_qty():
    with pytest.raises(ValueError, match="at least 1"):
        Cart().add("Pen", 10, qty=0)

Das optionale Argument match prüft die Nachricht mithilfe eines regulären Ausdrucks, sodass nicht versehentlich ein anderes Argument ValueError übergeben wird. Um zu erfahren, wie Sie Fehler wie diesen auslösen und behandeln, lesen Sie unseren Leitfaden zur Python-Ausnahmebehandlung.

Vorrichtungen: wiederverwendbare Einrichtung

Bei den meisten Tests muss zunächst etwas vorbereitet werden. Ein Gerät ist eine Funktion, die es bereitstellt. Dekorieren Sie es mit @pytest.fixture, und jeder Test, der es als Argument benennt, erhält das Ergebnis:

@pytest.fixture
def cart():
    c = Cart()
    c.add("Keyboard", 1500)
    c.add("Mouse", 500, qty=2)
    return c

def test_total(cart):
    assert cart.total() == 2500

Jeder Test erhält standardmäßig einen neuen Warenkorb, sodass sich die Tests nicht gegenseitig beeinflussen können. Pytest gleicht den Argumentnamen mit dem Namen des Fixtures ab, und Sie rufen das Fixture nie selbst auf. @pytest.fixture ist ein Dekorator, den wir in Python-Dekoratoren erklärt erklären.

Aufräumen mit Ertrag

Verwenden Sie yield anstelle von return, wenn Sie anschließend aufräumen müssen. Code nach yield wird ausgeführt, wenn der Test abgeschlossen ist, auch wenn er fehlgeschlagen ist:

@pytest.fixture
def temp_db():
    print("\nopen db")
    yield {"users": []}
    print("close db")

def test_db(temp_db):
    assert temp_db["users"] == []

Wenn Sie mit -s laufen, um die gedruckte Ausgabe anzuzeigen, wurde bestätigt, dass die Bestellung geöffnet war. Testen Sie sie und schließen Sie sie dann.

Fixture-Bereich und conftest.py

Standardmäßig wird ein Fixture einmal pro Test ausgeführt. Bei teuren Setups wie einer Datenbank oder einem Browser ändern Sie deren Lebensdauer mit scope:

Umfang Einmal pro erstellt
function (Standard) Testen
Klasse Testklasse
Modul Datei
Paket Paket
Sitzung Kompletter Testlauf

Legen Sie Fixtures, die von mehreren Dateien verwendet werden, in einer Datei namens conftest.py ab. Pytest lädt es automatisch, sodass Tests seine Fixtures ohne Import verwenden können. Seien Sie jedoch vorsichtig bei gemeinsam genutzten Bereichen, da eine von einem Test vorgenommene Änderung in den nächsten übergehen kann.

Parametrisieren: ein Test, viele Eingaben

Anstatt für jeden Wert einen Test zu kopieren, listen Sie die Fälle auf:

@pytest.mark.parametrize("discount, expected", [
    (0, 2500),
    (10, 2250),
    (100, 0),
])
def test_discount(cart, discount, expected):
    assert cart.total(discount) == expected

Jede Zeile wird zu einem eigenen Test, und Sie können dies in der ausführlichen Ausgabe unserer Ausführung der vollständigen Datei sehen:

test_cart.py::test_total PASSED                        [ 16%]
test_cart.py::test_discount[0-2500] PASSED             [ 33%]
test_cart.py::test_discount[10-2250] PASSED            [ 50%]
test_cart.py::test_discount[100-0] PASSED              [ 66%]
test_cart.py::test_rejects_zero_qty PASSED             [ 83%]
test_cart.py::test_empty_cart_is_free PASSED           [100%]

============================== 6 passed in 0.05s ==============================

Wenn eine Zeile fehlschlägt, werden die anderen weiterhin ausgeführt, und der Name sagt Ihnen genau, welche Werte das Problem verursacht haben. Beachten Sie, dass wir parametrisieren mit der Vorrichtung cart kombiniert haben. Um Werte auszuwählen, die wahrscheinlich Fehler finden, verwenden Sie die Randwertanalyse.

Tipp: Wenn Ihre Parameter lang oder unklar sind, übergeben Sie ids=["none", "ten", "full"], um jedem Fall im Bericht einen lesbaren Namen zu geben.

Nützliche Einbauten

Pytest enthält mehrere vorgefertigte Vorrichtungen. Diese beiden sind besonders praktisch und haben in unserem Test bestanden:

def test_write_report(tmp_path):
    report = tmp_path / "report.txt"
    report.write_text("passed")
    assert report.read_text() == "passed"

def read_mode():
    return os.environ.get("APP_MODE", "dev")

def test_mode(monkeypatch):
    monkeypatch.setenv("APP_MODE", "staging")
    assert read_mode() == "staging"

tmp_path gibt jedem Test einen eindeutigen temporären Ordner, sodass Tests niemals echte Dateien berühren. monkeypatch ändert Umgebungsvariablen oder Attribute und macht die Änderung rückgängig, wenn der Test endet. Ein weiteres nützliches Tool ist capsys, das die gedruckte Ausgabe erfasst, damit Sie sie überprüfen können.

Markierungen: Skip und Xfail

Markierungen fügen Tests Beschriftungen und Verhalten hinzu:

@pytest.mark.skip(reason="payment sandbox is down")
def test_payment():
    assert False

@pytest.mark.xfail(reason="floating point")
def test_rounding():
    assert 0.1 + 0.2 == 0.3

skip führt den Test überhaupt nicht durch. xfail führt es aus, erwartet jedoch einen Fehler, sodass Ihr Build nicht durch ein bekanntes Problem beschädigt wird. Mit den anderen zusätzlichen Tests in derselben Datei wurde unser Lauf als 3 passed, 1 skipped, 1 xfailed zusammengefasst. Dieser Rundungstest schlägt übrigens tatsächlich fehl: In der Gleitkomma-Arithmetik ist 0,1 + 0,2 nicht genau 0,3. Verwenden Sie pytest.approx(0.3), wenn Sie Dezimalzahlen vergleichen.

Sie können auch eigene Markierungen erstellen, z. B. @pytest.mark.slow, und diese mit pytest -m slow nur ausführen oder sie mit -m "not slow" weglassen. Registrieren Sie benutzerdefinierte Markierungen in Ihrer Konfigurationsdatei, um Warnungen zu vermeiden.

Nützliche Befehlszeilen-Flags

Befehl Was es bewirkt
pytest -v Zeigen Sie jeden Testnamen an
pytest -q Eine kürzere Zusammenfassung anzeigen
pytest -x Hören Sie beim ersten Fehler auf
pytest -k Rabatt Führen Sie Tests durch, deren Namen mit einem Wort übereinstimmen
pytest -s Ausgabe print anzeigen
pytest --lf Führen Sie nur die letzten Fehler erneut aus
pytest --pdb Öffnen Sie den Debugger bei einem Fehler
pytest test_cart.py::test_total Führen Sie einen bestimmten Test durch

Pytest in CI ausführen

Tests sind am wertvollsten, wenn sie bei jeder Änderung automatisch ausgeführt werden. Ein minimaler GitHub Actions-Job sieht so aus:

steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-python@v5
    with:
      python-version: "3.13"
  - run: pip install -r requirements.txt
  - run: python -m pytest

Pytest wird mit einem Code ungleich Null beendet, wenn Tests fehlschlagen, was dazu führt, dass die Pipeline stoppt. Wir haben diese Workflow-Datei nicht ausgeführt. Passen Sie sie daher an Ihr Projekt an. Unser GitHub Actions CI/CD-Leitfaden erklärt die Details. Pytest eignet sich auch gut für Browsertests, wie unser Selenium Python-Tutorial und unser Page Object Model-Tutorial zeigen.

Fazit

Sie haben jetzt alles, was Sie für die meisten Python-Testsuiten benötigen: einfache Asserts, Fixtures für die Einrichtung, Parametrisierung für Variationen und ein paar Flags für die Geschwindigkeit. Fangen Sie klein an. Wählen Sie eine Funktion aus, in der Sie kürzlich einen Fehler behoben haben, und schreiben Sie zunächst einen Test für diesen Fehler. Wenn Sie sich nicht sicher sind, was Sie auf den einzelnen Ebenen testen sollen, lesen Sie den Abschnitt über Einheits- und Integrationstests.

Häufige Fragen

Wofür wird Pytest verwendet?

Pytest ist ein Python-Testframework. Es wird für Unit-, Integrations- und API-Tests verwendet und funktioniert auch gut mit Browser-Tools wie Selenium und Playwright.

Ist Pytest besser als Unittest?

Viele Teams bevorzugen es wegen seiner einfacheren Syntax, Spielpläne und klareren Fehler. Unittest erfordert keine Installation und pytest kann auch vorhandene Unittest-Tests ausführen.

Was ist ein Fixture in Pytest?

Eine Vorrichtung ist eine Funktion, die etwas vorbereitet, das ein Test benötigt, beispielsweise Daten oder eine Verbindung. Tests erhalten es, indem sie es als Argument benennen.

Was ist conftest.py?

Es handelt sich um eine spezielle Datei zum Teilen von Fixtures und Hooks in Testdateien. Pytest lädt es automatisch, sodass seine Fixtures keine Importanweisung benötigen.

Warum findet Pytest meine Tests nicht?

Normalerweise handelt es sich um ein Namensproblem. Dateien sollten test_*.py oder *_test.py heißen und Funktionen sollten mit test beginnen. Überprüfen Sie außerdem, ob Sie es aus dem richtigen Ordner ausgeführt haben.

Lerne weiter

Arbeiten Sie mit Stack Quora

Benötigen Sie Hilfe beim Testen, WordPress oder SEO?

Wir helfen Teams, bessere Software zu liefern und ihre Websites zu erweitern. Sagen Sie uns, woran Sie gerade arbeiten, und wir schlagen Ihnen einen klaren nächsten Schritt vor.

Lesen Sie weiter

Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung

Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.

Künstliche Intelligenz

KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert

KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…

Artikel lesen →
DevOps

Erklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht

Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…

Artikel lesen →
Softwareentwicklung

API-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern

API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…

Artikel lesen →
Testautomatisierung

Spott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen

Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …

Artikel lesen →
Softwaretests

Code-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet

Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…

Artikel lesen →
Datenbanken & SQL

DELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck

DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen

SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…

Artikel lesen →
Softwareentwicklung

TypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler

TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…

Artikel lesen →
Softwareentwicklung

Python *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen

Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…

Artikel lesen →
Softwareentwicklung

Python-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet

Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…

Artikel lesen →
Künstliche Intelligenz

Was sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können

Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…

Artikel lesen →
DevOps

Überwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces

Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…

Artikel lesen →
DevOps

Docker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten

Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…

Artikel lesen →
Testautomatisierung

TDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte

TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…

Artikel lesen →
Softwaretests

Benutzerakzeptanztests (UAT): Prozess, Checkliste und reale Beispiele

Benutzerakzeptanztests erklärt: Wer führt ihn durch, wie unterscheidet er sich von der Qualitätssicherung, ein siebenstufiger Prozess, eine UAT-Test…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-NULL-Werte: IS NULL, COALESCE, NULLIF und die zu vermeidenden Fallen

SQL-NULL-Werte, die mit von uns ausgeführten Abfragen erklärt wurden: dreiwertige Logik, IS NULL, COALESCE, NULLIF, wie Aggregate, Joins und Sortier…

Artikel lesen →
Datenbanken & SQL

SQL CASE WHEN-Anweisung: Syntax, reale Beispiele und häufige Fehler

SQL CASE WHEN anhand der von uns ausgeführten Abfragen erklärt: einfache und durchsuchte Formulare, Bedingungsreihenfolge, Pivots mit SUM, COUNT-Tri…

Artikel lesen →
Softwareentwicklung

Was ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt

Was ist JWT? JSON Web Tokens erklärt: die drei Teile, ein Token, das in dem von uns ausgeführten Code erstellt und manipuliert wurde, JWT vs. Sitzun…

Artikel lesen →
Softwareentwicklung

Erklärte JavaScript-Ereignisschleife: Aufrufstapel, Mikrotasks und Timer mit Beispielen

Die JavaScript-Ereignisschleife wurde mit dem von uns ausgeführten Code erklärt: Aufrufstapel, Aufgaben- und Mikrotask-Warteschlangen, warum setTime…

Artikel lesen →
Softwareentwicklung

Erklärung von Python-Generatoren und -Ertrag: Sparen Sie Speicher mit echten Beispielen

Python-Generatoren und Yield anhand des von uns ausgeführten Codes erklärt: wie sie angehalten und fortgesetzt werden, gemessene Speichereinsparunge…

Artikel lesen →
Künstliche Intelligenz

Was sind Einbettungen? Vektoren und Kosinusähnlichkeit einfach erklärt

Was sind Einbettungen? Ein Leitfaden in einfacher Sprache zu Vektoren, Kosinusähnlichkeit und semantischer Suche, mit einem kleinen Beispiel, das wi…

Artikel lesen →
DevOps

Blau-Grün vs. Canary-Bereitstellung: Unterschiede, Kompromisse und Auswahl

Blue-Green vs. Canary-Bereitstellung erklärt: Funktionsweise, Kosten, Risiko und Rollback, stabiles Benutzer-Bucketing, das wir getestet haben, Date…

Artikel lesen →
Testautomatisierung

Flaky-Tests: Was sie verursacht und wie man sie endgültig behebt

Flaky-Tests wurden anhand von Demos erklärt, die wir durchgeführt haben: die Hauptursachen, wie man sie bestätigt und diagnostiziert, richtige Korre…

Artikel lesen →
Softwaretests

Lasttest vs. Stresstest: Unterschiede, Metriken und k6-Beispiele

Erläuterungen zu Lasttests und Stresstests: Was die einzelnen Tests beweisen, Spike- und Soak-Tests, welche Kennzahlen wichtig sind, warum Durchschn…

Artikel lesen →
Softwaretests

Testfall vs. Testszenario: Hauptunterschiede, Beispiele und wann man sie jeweils verwendet

Testfall vs. Testszenario erklärt: klare Definitionen, eine Tabelle nebeneinander, eine Funktion zum Zurücksetzen von Passwörtern, die von Szenarios…

Artikel lesen →
Datenbanken & SQL

SQL-Abfrageoptimierung: Ausführungspläne lesen und langsame Abfragen mit Zeitvorgaben beheben

An einer Million Zeilen getestete SQL-Abfrageoptimierung: Ausführungspläne lesen, die richtigen Indizes hinzufügen, nicht sargierbare Filter korrigi…

Artikel lesen →
Datenbanken & SQL

SQL UNION vs. UNION ALL: Unterschiede, Beispiele und getestete Leistung

SQL UNION vs. UNION ALL anhand der von uns ausgeführten Abfragen erklärt: Duplikate, die Regeln, denen beide folgen, ein echter Datenfehler, gemesse…

Artikel lesen →
Softwareentwicklung

Tutorial zur JavaScript-Abruf-API: GET, POST, Fehlerbehandlung und Zeitüberschreitungen

Ein JavaScript-Abruf-API-Tutorial, das auf einem lokalen Server getestet wurde: GET und POST, warum 404 nicht ausgelöst wird, ein wiederverwendbarer…

Artikel lesen →
Softwareentwicklung

Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen

Die Handhabung von Python-Dateien wird anhand des von uns ausgeführten Codes erklärt: Öffnungsmodi, Lesen großer Dateien, CSV, JSON, Pathlib, Binärd…

Artikel lesen →
Softwareentwicklung

Python-Klassen und -Objekte: OOP-Tutorial mit echten Beispielen

Python-Klassen und -Objekte erklärt mit Code, den wir ausgeführt haben: __init__, Methoden, Klassen- und Instanzattribute, Vererbung, Eigenschaften,…

Artikel lesen →
Künstliche Intelligenz

Was ist ein großes Sprachmodell? Wie LLMs funktionieren, ohne großen Hype erklärt

Was ist ein großes Sprachmodell? LLMs im Klartext erklärt: Token, Einbettungen, Aufmerksamkeit, Training, Temperatur- und Kontextfenster, eine klein…

Artikel lesen →
DevOps

Linux-Befehle für Anfänger: Der grundlegende Terminal-Leitfaden mit Beispielen

Linux-Befehle für Anfänger, gruppiert nach Aufgaben: Navigation, Dateien, Anzeigen von Protokollen, Grep, Pipes, Berechtigungen, Prozesse und Archiv…

Artikel lesen →
Testautomatisierung

Selenium vs. Playwright: Hauptunterschiede, Code im Vergleich und welche Sie wählen sollten

Selenium vs. Playwright im Vergleich: Architektur, Wartezeit, Browser- und Sprachunterstützung, Debugging, der gleiche Test in beiden Tools, Migrati…

Artikel lesen →
Softwaretests

Äquivalenzpartitionierung: Testdesigntechnik anhand von Beispielen erklärt

Erklärung der Äquivalenzpartitionierung: Wie man gültige und ungültige Partitionen findet, Beispiele für Alter, Passwörter und Gutscheine, von uns d…

Artikel lesen →
Softwaretests

Schweregrad vs. Priorität beim Softwaretest: Unterschiede, Matrix und reale Beispiele

Schweregrad vs. Priorität beim Softwaretest erklärt: klare Definitionen, eine Vier-Wege-Matrix mit Beispielen, Stufenskalen, wer die einzelnen Punkt…

Artikel lesen →
Datenbanken & SQL

Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

Ein SQL-Unterabfrage-Tutorial mit Abfragen, die wir ausgeführt haben: Skalar-, IN-, FROM- und SELECT-Unterabfragen, korrelierte Unterabfragen, EXIST…

Artikel lesen →
Datenbanken & SQL

SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

SQL-Transaktionen und ACID anhand einer von uns durchgeführten Banküberweisung erklärt: COMMIT, ROLLBACK, Sicherungspunkte, Sperren, Isolationsstufe…

Artikel lesen →
Softwareentwicklung

Spickzettel für Git-Befehle: Die Befehle, die Sie tatsächlich verwenden, mit Beispielen

Ein Git-Befehls-Spickzettel, gruppiert nach Aufgabe: Setup, Staging, Branches, Remotes, Stash, Verlauf und Rückgängigmachen von Fehlern, mit Ausgabe…

Artikel lesen →
Softwareentwicklung

Erklärte JavaScript-Versprechen: Dann, Catch, Promise.all und häufige Fehler

JavaScript-Versprechen erklärt mit Code, den wir ausgeführt haben: Zustände, dann und Fangketten, Fehlerbehandlung, Promise.all, allSettled, Rennen …

Artikel lesen →
Softwareentwicklung

Python-Wörterbuch-Tutorial: Methoden, Beispiele und gängige Muster

Ein Python-Wörterbuch-Tutorial mit Code, den wir ausgeführt haben: Diktate erstellen, lesen und aktualisieren, Schlüsselmethoden, Zusammenführung, V…

Artikel lesen →
Künstliche Intelligenz

Was ist RAG? Retrieval-Augmented Generation anhand eines Arbeitsbeispiels erklärt

Was ist RAG? Abruf-erweiterte Generierung Schritt für Schritt erklärt: Indizierung, Chunking, Einbettungen, Abruf, ein kleines funktionierendes Pyth…

Artikel lesen →
DevOps

Terraform-Tutorial für Anfänger: Infrastruktur als Code von der ersten Datei bis zu den Modulen

Ein Terraform-Tutorial für Anfänger: Beginnen Sie ohne Cloud-Konto, lernen Sie Init, Planen und Anwenden, dann Variablen, Ausgaben, Status, Module u…

Artikel lesen →
DevOps

Docker vs. Kubernetes: Hauptunterschiede, wie sie zusammenarbeiten und was Sie brauchen

Docker vs. Kubernetes erklärt: Was jeder tut, die gleiche App läuft mit beiden, Docker Compose und Swarm im Vergleich, die Dockershim-Änderung und w…

Artikel lesen →
Testautomatisierung

Pytest-Tutorial für Anfänger: Vorrichtungen, Parametrisierung und reale Beispiele

Ein Pytest-Tutorial für Anfänger mit Tests, die wir auf Pytest 9.2 durchgeführt haben: Assertions, Fixtures, Parametrize, Conftest, Markers, tmp_pat…

Artikel lesen →
Softwaretests

Software Testing Life Cycle (STLC): 6 Phasen, Einstiegs- und Ausstiegskriterien, Beispiel

Der Softwaretest-Lebenszyklus erklärt: sechs STLC-Phasen mit Ein- und Ausstiegskriterien, Ergebnisse, ein Beispiel für eine funktionierende Anmeldef…

Artikel lesen →
Softwareentwicklung

Git merge vs rebase: Unterschiede, Beispiele und wann man was nutzt

Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.

Artikel lesen →
Softwareentwicklung

Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet

Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…

Artikel lesen →
Datenbanken & SQL

SQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)

SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…

Artikel lesen →