Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Testien Parametrisointi Pytestissä: Testien Suorittaminen Useilla Syötteillä | Pytest-Kehyksen Hallinta
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Pythonin Rakenteellinen Ohjelmointi

bookTestien Parametrisointi Pytestissä: Testien Suorittaminen Useilla Syötteillä

Parametrisoitu testaus on olennainen testikattavuuden parantamiseksi ilman, että tarvitsee kirjoittaa lukuisia testifunktioita tilanteille, jotka eroavat vain syötteiden ja odotettujen tulosten osalta. Tämä lähestymistapa säästää aikaa ja lisää testikokonaisuuksien selkeyttä ja ylläpidettävyyttä:

  • Vähentää koodin toistoa ja virheiden mahdollisuutta testikoodissa;
  • Mahdollistaa uusien testitapausten helpon lisäämisen pelkästään parametreja lisäämällä;
  • Helpottaa kattavaa testausta laajalla syötejoukolla.

Tarkastellaan yksinkertaista funktiota, joka laskee kahden luvun keskiarvon. Looginen virhe voi syntyä, jos sulut unohtuvat. Käytämme @pytest.mark.parametrize-koristetta testataksemme tätä funktiota useilla lukuparilla.

# 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}"

Tämä esimerkki havainnollistaa, kuinka test_calculate_average suoritetaan kolmella eri lukusarjalla ja tarkistetaan, laskeeko funktio niiden keskiarvon oikein.

Syntax with id

id-parametria käytetään tunnisteen määrittämiseen jokaiselle syötesarjalle, mikä helpottaa testien tunnistamista testitulosteessa:

 @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

pytest.param-funktion avulla voidaan hallita yksittäisiä testitapauksia tarkemmin, mukaan lukien yksilöllisten ID-tunnisteiden asettaminen suoraan.

Syntax with ids

Voit myös antaa yksilöllisen tunnisteen jokaiselle testitapaukselle käyttämällä ids-parametria, mikä tekee testiraporteista luettavampia:

@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

Tässä koodissa jokaisella parametrisarjalla on siihen liittyvä tunniste, joka kuvaa testitapausta ja näkyy testitulosteessa.

Testiajon tulos voi näyttää tältä:

===================== 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. Tarkastele funktiota, joka kertoo kaksi lukua keskenään. Täydennä testitapaus täyttämällä puuttuvat kohdat:

2. Mikä on tärkein hyöty tunnisteiden määrittämisestä id- tai ids-parametrilla @pytest.mark.parametrize-koristeessa?

question mark

Tarkastele funktiota, joka kertoo kaksi lukua keskenään. Täydennä testitapaus täyttämällä puuttuvat kohdat:

Select the correct answer

question mark

Mikä on tärkein hyöty tunnisteiden määrittämisestä id- tai ids-parametrilla @pytest.mark.parametrize-koristeessa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

Can you explain why the first test case failed?

How do I add more test cases using parametrize?

What are the benefits of using ids in pytest parameterized tests?

bookTestien Parametrisointi Pytestissä: Testien Suorittaminen Useilla Syötteillä

Pyyhkäise näyttääksesi valikon

Parametrisoitu testaus on olennainen testikattavuuden parantamiseksi ilman, että tarvitsee kirjoittaa lukuisia testifunktioita tilanteille, jotka eroavat vain syötteiden ja odotettujen tulosten osalta. Tämä lähestymistapa säästää aikaa ja lisää testikokonaisuuksien selkeyttä ja ylläpidettävyyttä:

  • Vähentää koodin toistoa ja virheiden mahdollisuutta testikoodissa;
  • Mahdollistaa uusien testitapausten helpon lisäämisen pelkästään parametreja lisäämällä;
  • Helpottaa kattavaa testausta laajalla syötejoukolla.

Tarkastellaan yksinkertaista funktiota, joka laskee kahden luvun keskiarvon. Looginen virhe voi syntyä, jos sulut unohtuvat. Käytämme @pytest.mark.parametrize-koristetta testataksemme tätä funktiota useilla lukuparilla.

# 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}"

Tämä esimerkki havainnollistaa, kuinka test_calculate_average suoritetaan kolmella eri lukusarjalla ja tarkistetaan, laskeeko funktio niiden keskiarvon oikein.

Syntax with id

id-parametria käytetään tunnisteen määrittämiseen jokaiselle syötesarjalle, mikä helpottaa testien tunnistamista testitulosteessa:

 @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

pytest.param-funktion avulla voidaan hallita yksittäisiä testitapauksia tarkemmin, mukaan lukien yksilöllisten ID-tunnisteiden asettaminen suoraan.

Syntax with ids

Voit myös antaa yksilöllisen tunnisteen jokaiselle testitapaukselle käyttämällä ids-parametria, mikä tekee testiraporteista luettavampia:

@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

Tässä koodissa jokaisella parametrisarjalla on siihen liittyvä tunniste, joka kuvaa testitapausta ja näkyy testitulosteessa.

Testiajon tulos voi näyttää tältä:

===================== 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. Tarkastele funktiota, joka kertoo kaksi lukua keskenään. Täydennä testitapaus täyttämällä puuttuvat kohdat:

2. Mikä on tärkein hyöty tunnisteiden määrittämisestä id- tai ids-parametrilla @pytest.mark.parametrize-koristeessa?

question mark

Tarkastele funktiota, joka kertoo kaksi lukua keskenään. Täydennä testitapaus täyttämällä puuttuvat kohdat:

Select the correct answer

question mark

Mikä on tärkein hyöty tunnisteiden määrittämisestä id- tai ids-parametrilla @pytest.mark.parametrize-koristeessa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 4
some-alt