Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Testparametrisatie in Pytest: Tests Uitvoeren met Meerdere Invoerwaarden | Pytest-Framework Beheersen
Python Structureel Programmeren

bookTestparametrisatie in Pytest: Tests Uitvoeren met Meerdere Invoerwaarden

Geparametriseerd testen is essentieel voor het verbeteren van de testdekking zonder talloze testfuncties te hoeven schrijven voor scenario's die alleen verschillen in hun invoer en verwachte uitvoer. Deze aanpak bespaart niet alleen tijd, maar verhoogt ook de duidelijkheid en het onderhoudsgemak van testreeksen door:

  • Het verminderen van code duplicatie en de kans op fouten in testcode;
  • Het eenvoudig toevoegen van nieuwe testgevallen door simpelweg parameters toe te voegen;
  • Het mogelijk maken van uitgebreide tests over een breed scala aan invoerwaarden.

Laten we een eenvoudige functie bekijken die het gemiddelde van twee getallen berekent. Er kan een logische fout optreden als men vergeet haakjes te plaatsen. We gebruiken @pytest.mark.parametrize om deze functie te testen met verschillende paren getallen.

# Function to test
def calculate_average(num1, num2):
    return (num1 + num2) / 2

# Test function using pytest's parametrize
import pytest

@pytest.mark.parametrize(
    "num1, num2, expected",
    [
        (10, 20, 15),
        (20, 30, 25),
        (5, 5, 5)
    ])
def test_calculate_average(num1, num2, expected):
    assert (calculate_average(num1, num2) == expected), f"Average of {num1} and {num2} should be equal to {(num1 + num2) / 2}"

Dit voorbeeld toont hoe test_calculate_average wordt uitgevoerd met drie verschillende sets getallen, waarbij wordt gecontroleerd of de functie hun gemiddelde correct berekent.

Syntax met id

De parameter id wordt gebruikt om een identificatie toe te wijzen aan elke set invoerwaarden, wat helpt om tests gemakkelijker te herkennen in de testuitvoer:

 @pytest.mark.parametrize("num1, num2, expected", [
    pytest.param(10, 20, 15, id="integers"),
    pytest.param(20, 30, 25, id="more integers"),
    pytest.param(5, 5, 5, id="equal numbers")
])
def test_calculate_average_with_ids(num1, num2, expected):
    assert calculate_average(num1, num2) == expected

Het gebruik van pytest.param biedt meer gedetailleerde controle over elk testgeval, inclusief het direct instellen van individuele ID's.

Syntax met ids

Je kunt ook een unieke ID voor elk testgeval opgeven met ids, wat testrapporten leesbaarder maakt:

@pytest.mark.parametrize("num1, num2, expected", [
    (10, 20, 15),
    (20, 30, 25),
    (5, 5, 5)
], ids=["integers", "more integers", "equal numbers"])
def test_calculate_average_with_ids(num1, num2, expected):
    assert calculate_average(num1, num2) == expected

In deze code heeft elke set parameters een bijbehorende ID die het testgeval beschrijft, welke zal verschijnen in de testuitvoer.

Hier volgt een voorbeeld van de uitvoer:

===================== test session starts ======================
collected 3 items

test_example.py::test_calculate_average_with_ids[integers] FAILED
test_example.py::test_calculate_average_with_ids[more integers] PASSED
test_example.py::test_calculate_average_with_ids[equal numbers] PASSED

=========================== FAILURES ===========================
________________ test_calculate_average_with_ids[integers] ________________

num1 = 10, num2 = 20, expected = 15

    def test_calculate_average_with_ids(num1, num2, expected):
>       assert calculate_average(num1, num2) == expected
E       assert 20 == 15 
E        +  where 20 = calculate_average(10, 20)

test_example.py:10: AssertionError
================== 1 failed, 2 passed in 0.23s ==================

1. Beschouw een functie die twee getallen vermenigvuldigt. Vul de testcase aan door de ontbrekende delen in te vullen:

2. Wat is het belangrijkste voordeel van het specificeren van identificaties met id of ids in @pytest.mark.parametrize?

question mark

Beschouw een functie die twee getallen vermenigvuldigt. Vul de testcase aan door de ontbrekende delen in te vullen:

Select the correct answer

question mark

Wat is het belangrijkste voordeel van het specificeren van identificaties met id of ids in @pytest.mark.parametrize?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 4

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

bookTestparametrisatie in Pytest: Tests Uitvoeren met Meerdere Invoerwaarden

Veeg om het menu te tonen

Geparametriseerd testen is essentieel voor het verbeteren van de testdekking zonder talloze testfuncties te hoeven schrijven voor scenario's die alleen verschillen in hun invoer en verwachte uitvoer. Deze aanpak bespaart niet alleen tijd, maar verhoogt ook de duidelijkheid en het onderhoudsgemak van testreeksen door:

  • Het verminderen van code duplicatie en de kans op fouten in testcode;
  • Het eenvoudig toevoegen van nieuwe testgevallen door simpelweg parameters toe te voegen;
  • Het mogelijk maken van uitgebreide tests over een breed scala aan invoerwaarden.

Laten we een eenvoudige functie bekijken die het gemiddelde van twee getallen berekent. Er kan een logische fout optreden als men vergeet haakjes te plaatsen. We gebruiken @pytest.mark.parametrize om deze functie te testen met verschillende paren getallen.

# Function to test
def calculate_average(num1, num2):
    return (num1 + num2) / 2

# Test function using pytest's parametrize
import pytest

@pytest.mark.parametrize(
    "num1, num2, expected",
    [
        (10, 20, 15),
        (20, 30, 25),
        (5, 5, 5)
    ])
def test_calculate_average(num1, num2, expected):
    assert (calculate_average(num1, num2) == expected), f"Average of {num1} and {num2} should be equal to {(num1 + num2) / 2}"

Dit voorbeeld toont hoe test_calculate_average wordt uitgevoerd met drie verschillende sets getallen, waarbij wordt gecontroleerd of de functie hun gemiddelde correct berekent.

Syntax met id

De parameter id wordt gebruikt om een identificatie toe te wijzen aan elke set invoerwaarden, wat helpt om tests gemakkelijker te herkennen in de testuitvoer:

 @pytest.mark.parametrize("num1, num2, expected", [
    pytest.param(10, 20, 15, id="integers"),
    pytest.param(20, 30, 25, id="more integers"),
    pytest.param(5, 5, 5, id="equal numbers")
])
def test_calculate_average_with_ids(num1, num2, expected):
    assert calculate_average(num1, num2) == expected

Het gebruik van pytest.param biedt meer gedetailleerde controle over elk testgeval, inclusief het direct instellen van individuele ID's.

Syntax met ids

Je kunt ook een unieke ID voor elk testgeval opgeven met ids, wat testrapporten leesbaarder maakt:

@pytest.mark.parametrize("num1, num2, expected", [
    (10, 20, 15),
    (20, 30, 25),
    (5, 5, 5)
], ids=["integers", "more integers", "equal numbers"])
def test_calculate_average_with_ids(num1, num2, expected):
    assert calculate_average(num1, num2) == expected

In deze code heeft elke set parameters een bijbehorende ID die het testgeval beschrijft, welke zal verschijnen in de testuitvoer.

Hier volgt een voorbeeld van de uitvoer:

===================== test session starts ======================
collected 3 items

test_example.py::test_calculate_average_with_ids[integers] FAILED
test_example.py::test_calculate_average_with_ids[more integers] PASSED
test_example.py::test_calculate_average_with_ids[equal numbers] PASSED

=========================== FAILURES ===========================
________________ test_calculate_average_with_ids[integers] ________________

num1 = 10, num2 = 20, expected = 15

    def test_calculate_average_with_ids(num1, num2, expected):
>       assert calculate_average(num1, num2) == expected
E       assert 20 == 15 
E        +  where 20 = calculate_average(10, 20)

test_example.py:10: AssertionError
================== 1 failed, 2 passed in 0.23s ==================

1. Beschouw een functie die twee getallen vermenigvuldigt. Vul de testcase aan door de ontbrekende delen in te vullen:

2. Wat is het belangrijkste voordeel van het specificeren van identificaties met id of ids in @pytest.mark.parametrize?

question mark

Beschouw een functie die twee getallen vermenigvuldigt. Vul de testcase aan door de ontbrekende delen in te vullen:

Select the correct answer

question mark

Wat is het belangrijkste voordeel van het specificeren van identificaties met id of ids in @pytest.mark.parametrize?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 4
some-alt