Testien 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?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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?
Mahtavaa!
Completion arvosana parantunut arvoon 3.13
Testien 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?
Kiitos palautteestasi!