Pytest-tutorial voor beginners: armaturen, parametriseren en echte voorbeelden

  1. Home
  2. Blog
  3. Testautomatisering

Testautomatisering

Pytest-tutorial voor beginners: Fixtures, parametriseren en echte voorbeelden

Met Pytest kun je Python-tests schrijven met duidelijke functies en duidelijke assert-statements. Bouw stap voor stap een kleine testsuite, lees de echte foutmeldingen en leer de functies kennen die u elke dag zult gebruiken.

10 min leestijd
Pytest-tutorial voor beginners: armaturen, parametriseren en echte voorbeelden

Belangrijkste punten

  • Pytest vindt functies met de naam test_* en controleert deze met gewone assert-instructies.
  • Fixtures bieden herbruikbare configuratie en opschoning, eenvoudigweg aangevraagd door ze als argumenten te benoemen.
  • @pytest.mark.parametrize voert één test uit met veel invoer.
  • Plaats gedeelde armaturen in conftest.py en u hoeft ze niet te importeren.

Als je het schrijven van toetsen hebt vermeden omdat ze een hele klus zijn, zou deze pytest-tutorial je van gedachten moeten doen veranderen. Pytest verwijdert het grootste deel van de ceremonie: er zijn geen klassen om van te erven en geen speciale beweringsmethoden om te onthouden. Een test kan uit slechts twee regels bestaan.

We bouwen een klein winkelwagentje en testen het stap voor stap. We hebben alles op Python 3.13 uitgevoerd met pytest 9.2, en de getoonde uitvoer is echt, hoewel we de bestandspaden en timingdetails hebben bijgesneden die op uw machine zullen verschillen.

Waarom pytest?

Python wordt geleverd met unittest, wat goed werkt, maar pytest is meestal de handigste keuze. Hier is dezelfde cheque in elk:

Taak unittest pytest
Controleer gelijkheid self.assertEqual(a, b) beweren a == b
Vink een uitzondering aan self.assertRaises(...) pytest.raises(...)
Teststructuur Een klasse die erft van TestCase Een eenvoudige functie
Opstellen en opruimen setUp en tearDown methoden Herbruikbare armaturen
Veel ingangen subTest lussen parametriseren

Pytest kan ook uw bestaande unittest tests uitvoeren, zodat u geleidelijk kunt overstappen. Het heeft ook een groot plug-in-ecosysteem, inclusief pytest-cov voor dekking en pytest-xdist voor parallelle runs.

Installeer pytest

Maak eerst een virtuele omgeving, zoals uitgelegd in onze tutorial over de virtuele Python-omgeving, en installeer deze vervolgens:

pip install pytest
pytest --version

# pytest 9.2.0

Maak een projectmap met twee bestanden, cart.py en test_cart.py. Pytest vindt tests automatisch door de naamgevingsregels te volgen: bestanden met de naam test_*.py of *_test.py, functies die beginnen met test en klassen die beginnen met Test. Als een test niet wordt opgepakt, is een verkeerde naamgeving het eerste dat moet worden gecontroleerd.

De code om te testen

# 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)

Je eerste testen

# test_cart.py
from cart import Cart

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

Dat is een volledige test. Voer pytest uit vanuit de projectmap en rapporteert één geslaagde test. Als u een importfout krijgt, voert u deze uit als python -m pytest, waardoor de huidige map aan het importpad wordt toegevoegd.

Fouten bij het lezen

Dit is waar pytest echt schittert. Hier is een test met een opzettelijk verkeerde verwachte waarde:

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

En dit is wat het afdrukte toen we het uitvoerden:

    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 ==============================

De > markeert de falende regel en de E regels tonen de werkelijke waarden. Je hoefde geen aangepast bericht toe te voegen, omdat pytest assert instructies herschrijft, zodat ze kunnen rapporteren wat ze hebben vergeleken. Hetzelfde geldt voor lijsten en woordenboeken, waarbij precies wordt aangegeven welke items verschillen.

Uitzonderingen testen

Foutafhandeling is ook gedrag en verdient tests. pytest.raises slaagt alleen als het blok de verwachte uitzondering oplevert:

import pytest

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

Het optionele argument match controleert het bericht met behulp van een reguliere expressie, zodat een ander argument ValueError niet per ongeluk voorbijkomt. Lees onze handleiding over Python-uitzonderingsafhandeling voor meer informatie over hoe u dit soort fouten kunt melden en afhandelen.

Armaturen: herbruikbare opstelling

Bij de meeste tests moet eerst iets worden voorbereid. Een fixture is een functie die hierin voorziet. Versier het met @pytest.fixture, en elke test die het als argument noemt, krijgt het resultaat:

@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

Elke test krijgt standaard een nieuw winkelwagentje, dus tests kunnen elkaar niet beïnvloeden. Pytest koppelt de argumentnaam aan de naam van het armatuur, en u roept het armatuur nooit zelf aan. @pytest.fixture is een decorateur, wat we uitleggen in Python-decorateurs uitgelegd.

Opruimen met rendement

Gebruik yield in plaats van return als je achteraf moet opruimen. Code na yield wordt uitgevoerd wanneer de test is voltooid, zelfs als deze is mislukt:

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

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

Het uitvoeren van -s om de afgedrukte uitvoer weer te geven, bevestigde dat de bestelling open was, test en vervolgens werd gesloten.

Armatuurbereik en conftest.py

Standaard wordt een armatuur eenmaal per test uitgevoerd. Voor dure instellingen, zoals een database of browser, verander je de levensduur ervan met scope:

Reikwijdte Eenmaal per gemaakt
function (standaard) Proef
klasse Test klasse
module Bestand
pakket Pakket
sessie Hele proefrit

Plaats de apparaten die door verschillende bestanden worden gebruikt in een bestand met de naam conftest.py. Pytest laadt het automatisch, zodat tests de armaturen kunnen gebruiken zonder te importeren. Wees echter voorzichtig met gedeelde scopes, omdat een wijziging die door de ene test wordt aangebracht, naar de volgende kan lekken.

Parametriseren: één test, veel invoer

In plaats van een test voor elke waarde te kopiëren, vermeldt u de gevallen:

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

Elke rij wordt zijn eigen test, en je kunt dit zien in de uitgebreide uitvoer van onze run van het volledige bestand:

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 ==============================

Als één rij mislukt, worden de andere nog steeds uitgevoerd en vertelt de naam u precies welke waarden het probleem hebben veroorzaakt. Merk op dat we parametriseren hebben gecombineerd met het armatuur cart. Als u waarden wilt kiezen die waarschijnlijk bugs zullen opleveren, gebruikt u grenswaardeanalyse.

Tip: Als uw parameters lang of onduidelijk zijn, geeft u ids=["none", "ten", "full"] door om elke case een leesbare naam in het rapport te geven.

Handige inbouwarmaturen

Pytest bevat diverse kant-en-klare armaturen. Deze twee zijn vooral handig, en beide zijn geslaagd in onze run:

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 geeft elke test een unieke tijdelijke map, zodat tests nooit echte bestanden raken. monkeypatch verandert omgevingsvariabelen of attributen, en maakt de wijziging ongedaan wanneer de test eindigt. Een andere nuttige is capsys, waarin de afgedrukte uitvoer wordt vastgelegd, zodat u deze kunt controleren.

Markeringen: overslaan en xfail

Markeringen voegen labels en gedrag toe aan tests:

@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 voert de test helemaal niet uit. xfail voert het uit, maar verwacht een mislukking, dus een bekend probleem vernietigt je build niet. Met de andere extra tests in hetzelfde bestand, is onze run samengevat als 3 passed, 1 skipped, 1 xfailed. Die afrondingstest faalt overigens echt: in de drijvende-kommaberekening is 0,1 + 0,2 niet precies 0,3. Gebruik pytest.approx(0.3) bij het vergelijken van decimalen.

Je kunt ook je eigen markeringen maken, zoals @pytest.mark.slow, en alleen die met pytest -m slow uitvoeren, of ze weglaten met -m "not slow". Registreer aangepaste markeringen in uw configuratiebestand om waarschuwingen te voorkomen.

Handige opdrachtregelvlaggen

Commando Wat het doet
pytest -v Toon elke testnaam
pytest -q Laat een kortere samenvatting zien
pytest -x Stop bij de eerste mislukking
pytest -k korting Voer tests uit waarvan de naam overeenkomt met een woord
pytest -s Toon print uitvoer
pytest --lf Voer alleen de laatste mislukkingen opnieuw uit
pytest --pdb Open de debugger bij een fout
pytest test_cart.py::test_total Voer één specifieke test uit

Pytest uitvoeren in CI

Tests zijn het meest waardevol als ze bij elke wijziging automatisch worden uitgevoerd. Een minimale GitHub Actions-taak ziet er als volgt uit:

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 wordt afgesloten met een code die niet nul is wanneer tests mislukken, waardoor de pijplijn stopt. Wij hebben dit workflowbestand niet uitgevoerd, dus pas het aan uw project aan. In onze GitHub Actions CI/CD-handleiding worden de details uitgelegd. Pytest werkt ook goed voor browsertests, zoals blijkt uit onze Selenium Python-tutorial en Page Object Model-tutorial.

Tot slot

Je hebt nu wat je nodig hebt voor de meeste Python-testsuites: duidelijke beweringen, armaturen voor de installatie, parametrisering voor variaties en een paar vlaggen voor snelheid. Begin klein. Kies een functie waarin u onlangs een bug heeft opgelost en schrijf eerst een test voor die bug. Als je niet zeker weet wat je op elk niveau moet testen, lees dan over unit- versus integratietesten.

Veelgestelde vragen

Waar wordt pytest voor gebruikt?

Pytest is een Python-testframework. Het wordt gebruikt voor unit-, integratie- en API-tests, en werkt ook goed met browsertools zoals Selenium en Playwright.

Is pytest beter dan unittest?

Veel teams geven er de voorkeur aan vanwege de eenvoudigere syntaxis, de wedstrijden en de duidelijkere fouten. unittest heeft geen installatie nodig en pytest kan ook bestaande unittest-tests uitvoeren.

Wat is een armatuur in pytest?

Een armatuur is een functie die iets voorbereidt dat een test nodig heeft, zoals data of een verbinding. Tests ontvangen dit door het als argument te benoemen.

Wat is conftest.py?

Het is een speciaal bestand voor het delen van armaturen en hooks in testbestanden. Pytest laadt het automatisch, dus de armaturen hebben geen importinstructie nodig.

Waarom vindt pytest mijn tests niet?

Meestal is het een naamgevingsprobleem. Bestanden moeten test_*.py of *_test.py heten, en functies moeten beginnen met test. Controleer ook of u het vanuit de juiste map hebt uitgevoerd.

Blijf leren

Werk met Stack Quora

Hulp nodig met testen, WordPress of SEO?

We helpen teams betere software te leveren en hun sites te laten groeien. Vertel ons waar u mee bezig bent en wij stellen een duidelijke volgende stap voor.

Blijf lezen

Meer handleidingen over testen, AI en moderne ontwikkeling

Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.

Kunstmatige intelligentie

AI-hallucinaties uitgelegd: waarom taalmodellen dingen verzinnen en hoe ze te verminderen

AI-hallucinaties uitgelegd: wat ze zijn, waarom taalmodellen ze produceren, veelvoorkomende typen, hoe je ze kunt verminderen met aarding en aanwijz…

Lees artikel →
DevOps

Omgevingsvariabelen uitgelegd: .env-bestanden, geheimen en configuratie goed gedaan

Omgevingsvariabelen uitgelegd met Python-voorbeelden die we hebben uitgevoerd: ze lezen en instellen, waarom elke waarde een string is, .env-bestand…

Lees artikel →
Softwareontwikkeling

API-snelheidsbeperking uitgelegd: algoritmen, headers en afhandeling van 429-fouten

API-snelheidsbeperking uitgelegd met een simulatie die we hebben uitgevoerd: token-bucket, vast venster, schuifvenster, 429 reacties, headers van sn…

Lees artikel →
Testautomatisering

Spotten in Python: unittest.mock, patch en de fouten die tests doen liegen

Spotten in Python met unittest.mock, getest: Mock en return_value, side_effect, patchen waar een naam wordt gebruikt, spec en autospec, spotdatums e…

Lees artikel →
Softwaretesten

Codedekking uitgelegd: lijn versus filiaaldekking en wat 100% werkelijk betekent

Codedekking uitgelegd met een echte dekking.py-run: dekking van lijnen, vertakkingen en condities, een rapport lezen, waarom 100% dekking nog steeds…

Lees artikel →
Databases & SQL

DELETE versus TRUNCATE versus DROP in SQL: verschillen, terugdraaien en wanneer elk te gebruiken

DELETE versus TRUNCATE versus DROP uitgelegd met geteste SQL: wat elk verwijdert, terugdraaien, triggers, identiteitsreset, snelheid en hoe PostgreS…

Lees artikel →
Databases & SQL

SQL-weergaven uitgelegd: creëer, gebruik en vermijd de valkuilen, met voorbeelden

SQL-weergaven uitgelegd met query's die we hebben uitgevoerd: een weergave maken, live resultaten, kolommen verbergen, prestaties, bijwerkbare en ge…

Lees artikel →
Softwareontwikkeling

TypeScript-interface versus type: echte verschillen, getest met de compiler

TypeScript-interface versus type, gecontroleerd met de echte compiler: wat beide kunnen doen, wat slechts één kan doen, samenvoegen van declaraties,…

Lees artikel →
Softwareontwikkeling

Python *args en **kwargs uitgelegd: flexibele functies met duidelijke voorbeelden

Python *args en **kwargs uitgelegd met code die we hebben uitgevoerd: in- en uitpakken, parametervolgorde, argumenten die alleen trefwoorden en posi…

Lees artikel →
Softwareontwikkeling

Python Lambda-functies: syntaxis, echt gebruik en wanneer u ze niet moet gebruiken

Python lambda-functies uitgelegd met code die we hebben uitgevoerd: syntaxis, sorteren met sleutel, kaart en filter, sluitingen, de laat-bindende va…

Lees artikel →
Kunstmatige intelligentie

Wat zijn AI-agenten? Hoe ze werken, met een eenvoudige agentloop die u kunt uitvoeren

Wat zijn AI-agenten? Een duidelijke gids voor de agentenlus, tools, geheugen en vangrails, met een kleine Python-lus die we hebben uitgevoerd, echte…

Lees artikel →
DevOps

Monitoring versus waarneembaarheid: het echte verschil, met logboeken, statistieken en sporen

Monitoring versus waarneembaarheid uitgelegd: bekende en onbekende fouten, logboeken, statistieken en sporen, een walkthrough voor afrekenincidenten…

Lees artikel →
DevOps

Docker-volumes versus bindingsmounts: bewaar containergegevens op de juiste manier

Docker-volumes versus bind-mounts uitgelegd: waarom containergegevens verdwijnen, benoemde volumes, bind-mounts, tmpfs, Compose-voorbeelden, back-up…

Lees artikel →
Testautomatisering

TDD versus BDD: belangrijkste verschillen, één functie die op beide manieren is gebouwd en wanneer deze moet worden gebruikt

TDD versus BDD uitgelegd met één kortingsfunctie die in beide richtingen is gebouwd: rood-groen-refactor met code die we hebben uitgevoerd, gegeven-…

Lees artikel →
Softwaretesten

Gebruikersacceptatietesten (UAT): proces, checklist en echte voorbeelden

Gebruikersacceptatietesten uitgelegd: wie voert het uit, hoe het verschilt van QA, een proces in zeven stappen, een UAT-testcase-sjabloon, een check…

Lees artikel →
Databases & SQL

SQL NULL-waarden uitgelegd: IS NULL, COALESCE, NULLIF en de te vermijden vallen

SQL NULL-waarden uitgelegd met query's die we hebben uitgevoerd: logica met drie waarden, IS NULL, COALESCE, NULLIF, hoe aggregaten, joins en sorter…

Lees artikel →
Databases & SQL

SQL CASE WHEN-instructie: syntaxis, echte voorbeelden en veelvoorkomende fouten

SQL CASE WHEN uitgelegd met vragen die we hebben uitgevoerd: eenvoudige en doorzochte formulieren, volgorde van de voorwaarden, draaipunten met SUM,…

Lees artikel →
Softwareontwikkeling

Wat is JWT? JSON-webtokens uitgelegd met een werkend voorbeeld

Wat is JWT? JSON Web Tokens uitgelegd: de drie delen, een token gebouwd en waarmee is geknoeid in de code die we hebben uitgevoerd, JWT versus sessi…

Lees artikel →
Softwareontwikkeling

JavaScript-gebeurtenislus uitgelegd: call-stack, microtaken en timers met voorbeelden

De JavaScript-gebeurtenislus uitgelegd met code die we hebben uitgevoerd: call-stack, taak- en microtask-wachtrijen, waarom setTimeout 0 niet onmidd…

Lees artikel →
Softwareontwikkeling

Python-generatoren en opbrengst uitgelegd: bespaar geheugen met echte voorbeelden

Python-generatoren en opbrengst uitgelegd met code die we hebben uitgevoerd: hoe ze pauzeren en hervatten, gemeten geheugenbesparingen, pijplijnen, …

Lees artikel →
Kunstmatige intelligentie

Wat zijn inbeddingen? Vectoren en cosinusovereenkomst eenvoudig uitgelegd

Wat zijn insluitingen? Een gids in duidelijke taal over vectoren, cosinusovereenkomst en semantisch zoeken, met een klein voorbeeld dat we hebben ui…

Lees artikel →
DevOps

Implementatie van blauwgroen versus kanarie: verschillen, afwegingen en hoe te kiezen

Blauw-groen versus kanarie-implementatie uitgelegd: hoe elk werkt, kosten, risico's en terugdraaien, stabiele gebruikersbucket die we hebben getest,…

Lees artikel →
Testautomatisering

Schilferige tests: wat de oorzaak ervan is en hoe u ze voorgoed kunt oplossen

Zwakke tests uitgelegd met demo's die we hebben uitgevoerd: de belangrijkste oorzaken, hoe je er een kunt bevestigen en diagnosticeren, goede oploss…

Lees artikel →
Softwaretesten

Belastingtesten versus stresstesten: verschillen, statistieken en k6-voorbeelden

Belastingtesten versus stresstesten uitgelegd: wat elk bewijst, piek- en soak-tests, de statistieken die er toe doen, waarom gemiddelden misleiden, …

Lees artikel →
Softwaretesten

Testcase versus testscenario: belangrijkste verschillen, voorbeelden en wanneer deze te gebruiken

Testcase versus testscenario uitgelegd: duidelijke definities, een tabel naast elkaar, één functie voor het opnieuw instellen van wachtwoorden, over…

Lees artikel →
Databases & SQL

Optimalisatie van SQL-query's: lees uitvoeringsplannen en repareer langzame query's, met timing

Optimalisatie van SQL-query's getest op een miljoen rijen: lees uitvoeringsplannen, voeg de juiste indexen toe, repareer niet-sargeerbare filters, g…

Lees artikel →
Databases & SQL

SQL UNION versus UNION ALL: verschillen, voorbeelden en geteste prestaties

SQL UNION versus UNION ALL uitgelegd met de query's die we hebben uitgevoerd: duplicaten, de regels volgen beide, een echte databug, gemeten prestat…

Lees artikel →
Softwareontwikkeling

JavaScript Fetch API-tutorial: GET, POST, foutafhandeling en time-outs

Een JavaScript Fetch API-tutorial getest tegen een lokale server: GET en POST, waarom 404 niet gooit, een herbruikbare helper, queryreeksen, time-ou…

Lees artikel →
Softwareontwikkeling

Python-bestandsverwerking: lezen, schrijven, CSV, JSON en pathlib met voorbeelden

Het verwerken van Python-bestanden uitgelegd met code die we hebben uitgevoerd: open modi, met het lezen van grote bestanden, CSV, JSON, pathlib, bi…

Lees artikel →
Softwareontwikkeling

Python-klassen en -objecten: OOP-zelfstudie met echte voorbeelden

Python-klassen en -objecten uitgelegd met code die we hebben uitgevoerd: __init__, methoden, klasse versus instantie-attributen, overerving, eigensc…

Lees artikel →
Kunstmatige intelligentie

Wat is een groot taalmodel? Hoe LLM's werken, uitgelegd zonder de hype

Wat is een groot taalmodel? LLM's uitgelegd in duidelijke taal: tokens, inbedding, aandacht, training, temperatuur- en contextvensters, een kleine d…

Lees artikel →
DevOps

Linux-opdrachten voor beginners: de essentiële terminalgids met voorbeelden

Linux-opdrachten voor beginners, gegroepeerd op taak: navigatie, bestanden, logboeken bekijken, grep, pipelines, machtigingen, processen en archieve…

Lees artikel →
Testautomatisering

Selenium versus toneelschrijver: belangrijkste verschillen, code vergeleken en welke te kiezen

Selenium versus Playwright vergeleken: architectuur, wachten, browser- en taalondersteuning, debuggen, dezelfde test in beide tools, migratieadvies …

Lees artikel →
Softwaretesten

Equivalentiepartitionering: testontwerptechniek uitgelegd met uitgewerkte voorbeelden

Equivalentiepartitionering uitgelegd: hoe je geldige en ongeldige partities kunt vinden, uitgewerkte voorbeelden voor leeftijden, wachtwoorden en ko…

Lees artikel →
Softwaretesten

Ernst versus prioriteit bij het testen van software: verschillen, matrix en echte voorbeelden

Ernst versus prioriteit bij het testen van software uitgelegd: duidelijke definities, een vierwegmatrix met voorbeelden, niveauschalen, wie deze bep…

Lees artikel →
Databases & SQL

Tutorial voor SQL-subquery's: typen, gecorreleerde subquery's en BESTAAN met voorbeelden

Een SQL-subquery-tutorial met query's die we hebben uitgevoerd: scalaire, IN-, FROM- en SELECT-subquery's, gecorreleerde subquery's, EXISTS, de NOT …

Lees artikel →
Databases & SQL

SQL-transacties en ACID uitgelegd: COMMIT-, ROLLBACK- en isolatieniveaus

SQL-transacties en ACID uitgelegd met een bankoverschrijving die we hebben uitgevoerd: COMMIT, ROLLBACK, savepoints, locks, isolatieniveaus, dirty r…

Lees artikel →
Softwareontwikkeling

Git Commands Cheat Sheet: de commando's die je daadwerkelijk gebruikt, met voorbeelden

Een spiekbriefje voor Git-opdrachten, gegroepeerd op taak: setup, staging, branches, remotes, stash, geschiedenis en fouten ongedaan maken, met uitv…

Lees artikel →
Softwareontwikkeling

JavaScript-beloften uitgelegd: vervolgens catch, Promise.all en veelvoorkomende fouten

JavaScript-beloften uitgelegd met code die we hebben uitgevoerd: staten, dan en catch-ketens, foutafhandeling, Promise.all, allSettled, race en wat …

Lees artikel →
Softwareontwikkeling

Zelfstudie Python-woordenboek: methoden, voorbeelden en veelvoorkomende patronen

Een Python-woordenboektutorial met code die we hebben uitgevoerd: dictaten, sleutelmethoden, samenvoeg-, begrips-, tel- en groeperingspatronen en ve…

Lees artikel →
Kunstmatige intelligentie

Wat is RAG? Retrieval-Augmented Generation uitgelegd met een werkend voorbeeld

Wat is RAG? Retrieval-augmented generatie stap voor stap uitgelegd: indexeren, chunken, insluiten, ophalen, een klein werkend Python-voorbeeld, eval…

Lees artikel →
DevOps

Terraform-zelfstudie voor beginners: infrastructuur als code van het eerste bestand tot modules

Een Terraform-tutorial voor beginners: begin zonder cloudaccount, leer init, plan en pas toe, vervolgens variabelen, outputs, status, modules en een…

Lees artikel →
DevOps

Docker versus Kubernetes: belangrijkste verschillen, hoe ze samenwerken en welke u nodig heeft

Docker vs Kubernetes legde uit: wat elk doet, dezelfde app draait met beide, Docker Compose en Swarm vergeleken, de dockershim veranderen en hoe je …

Lees artikel →
Testautomatisering

Pytest-tutorial voor beginners: armaturen, parametriseren en echte voorbeelden

Een pytest-tutorial voor beginners met tests die we hebben uitgevoerd op pytest 9.2: beweringen, armaturen, parametrize, conftest, markers, tmp_path…

Lees artikel →
Softwaretesten

Levenscyclus van softwaretests (STLC): 6 fasen, in- en uitgangscriteria, voorbeeld

De levenscyclus van softwaretesten uitgelegd: zes STLC-fasen met in- en uitstapcriteria, deliverables, een voorbeeld van een uitgewerkte inlogfuncti…

Lees artikel →
Softwareontwikkeling

Git merge vs rebase: verschillen, voorbeelden en wanneer je wat gebruikt

Git merge vs rebase uitgelegd met echte logoutput, een vergelijkingstabel, de gouden regel van rebase en een veilige teamwerkwijze.

Lees artikel →
Softwareontwikkeling

Python list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt

Python list comprehension uitgelegd: syntaxis, filteren, if-else, geneste lussen, gemeten tijden en wanneer een gewone for-lus beter is.

Lees artikel →
Databases & SQL

SQL JOIN uitgelegd met voorbeelden (Inner, Left, Right, Full)

Begrijp SQL joins stap voor stap met voorbeeldtabellen en queries: INNER, LEFT, RIGHT, FULL, CROSS en SELF, plus veelgemaakte fouten en prestatietips.

Lees artikel →