A tesztcsomag beállítása a kódhoz olyan akadálynak tűnhet, amelyre még nem áll készen, de ez a könyvtár sok megterhelést igényel.
A tesztelés a szoftverfejlesztés elengedhetetlen része. Segít a hibák korai észlelésében, és csökkenti a hibák valószínűségét.
A Pytest a Python egyik legnépszerűbb tesztelési keretrendszere. Lehetővé teszi kisméretű és olvasható tesztek írását, amelyek az alkalmazás növekedésével skálázhatók. Ismerje meg, hogyan állíthatja be és használhatja a Pytestet a Python-kóddal.
A Pytest beállítása
A Pytest telepítése előtt érdemes hozzon létre egy virtuális környezetet hogy elszigetelje a tesztkörnyezetet, így elkerülheti az ütközéseket más csomagokkal és függőségekkel.
Virtuális környezet létrehozásához futtassa a következő parancsot a Pytest telepítése előtt.
python -m venv tesztek
Ezzel létrehoz egy új virtuális környezetet tesztek néven az aktuális könyvtárban. A környezet aktiválásához futtassa ezt a parancsot, ha Linux vagy Mac rendszert használ:
forrás tesztek/bin/aktiválás
Windows esetén futtassa ezt a parancsot:
tesztek\\Szkriptek\\aktiválás
A Pytest telepítéséhez használhatja a pip-et, a Python csomagkezelőt ezzel a paranccsal a terminálban:
pip install pytest
Ha nincs Pip, ne aggódjon; tudsz telepítse a Pip-et Windows, Mac és Linux rendszereken.
Futtassa a következő parancsot, hogy ellenőrizze, megfelelően telepítette-e a Pytestet.
pytest --version
Ennek vissza kell adnia a telepített verziószámot.
Az első teszt elkészítése
Tekintsük a következő függvényt, amely összead két számot, és visszaadja az eredményt.
defadd_numbers(a, b):
Visszatérés a + b
Számos dolog elromolhat ezzel a funkcióval. Fontolja meg például, mi történik, ha a függvényt nem numerikus értékekkel, például None vagy string típusú értékkel hívja meg. Ez néhány lehetséges éleset, amelyek a funkció meghibásodását okozhatják.
Az egyik első tesztnek ellenőriznie kell, hogy a függvény a várt eredményt adja-e vissza. Ehhez az assert kulcsszóval összehasonlíthatja a függvény tényleges kimenetét a várt kimenettel. Az add_numbers függvény esetében a tesztfüggvény így nézhet ki:
defteszt_számok hozzáadása():
állítja add_numbers(2, 3) == 5
állítja add_numbers(-1, 1) == 0
állítja add_numbers(0, 0) == 0
Ez a tesztfüggvény három assert utasítást tartalmaz, amelyek mindegyike összehasonlítja az add_numbers függvény kimenetét egy várt értékkel. Az első teszt azt ellenőrzi, hogy 2 és 3 összeadása 5-öt, a második teszt azt ellenőrzi, hogy -1 és 1 összeadása 0-t, a harmadik pedig azt, hogy 0 és 0 összeadása 0-t ad-e vissza.
Tesztek futtatása Pytest segítségével
Miután megírta a teszteket, a következő lépés a tesztek futtatása. Ehhez a Pytest segítségével keresse meg a tesztfájlt tartalmazó könyvtárat, és futtassa a pytest parancsot:
pytest
Ha minden a várt módon működik, megjelenik egy üzenet, amely jelzi, hogy az összes teszt sikeresen lezajlott. Ha azonban bármelyik állítás meghiúsul, a Pytest hibát jelez, és megmutatja a hibát okozó bemeneti értékeket.
Tegyük fel például, hogy a következő tesztfüggvényt futtatta az add_numbers függvényhez:
defteszt_számok hozzáadása():
állítja add_numbers(2, 3) == 6
állítja add_numbers(-1, 1) == 0
állítja add_numbers(0, 0) == 0
Az első állítás meghiúsul, mert a várt érték 6 volt, de a tényleges érték 5 (2 és 3 összege). A Pytest a következő üzenetet adja vissza:
Ez az üzenet megmutatja azokat a bemeneti értékeket, amelyek az értéket okozták, és azt is, hogy mi legyen a tényleges érték. Ez megkönnyíti a kódban lévő hibák gyors azonosítását és kijavítását.
Pytest.raises használata kivételek érvényesítésére
Most írjunk egy tesztet az add_numbers függvény egyik szélső esetének lefedésére. Ha nem numerikus argumentumot ad át a függvénynek, például a None-t, a Pythonnak TypeError kivételt kell előidéznie.
Már annak kellene lenned kivételek kezelése a Python-programokban, és tesztelheti, hogy a kód megfelelően emeli-e meg őket.
Ehhez másolja a következő tesztfüggvényt a fájlba. A pytest.raises környezetkezelőt használja annak ellenőrzésére, hogy az add_number függvény „Nincs” paraméterrel történő hívása TypeError kivételt okoz-e.
import pytest
defteszt_számok_hozzáadása_érvénytelen_bemenetekkel():
val vel pytest.raises (TypeError):
add_numbers(Egyik sem, 2)
Ezután futtassa a Pytestet a parancssorból. Ha a kivételt nem emelik ki, a teszt sikertelen lesz.
Továbbléphet, és ellenőrizheti a kivételüzenet részleteit. A környezetkezelő létrehoz egy ExceptionInfo objektumot a részletekkel.
Például ebben a tesztfüggvényben érvényesítse a kivételüzenetet a következőképpen:
defteszt_számok_hozzáadása_érvénytelen_bemenetekkel():
val vel pytest.raises(TypeError) mint exc_info:
add_numbers(Egyik sem, 2)
állítja exc_info.value.args[0] == "nem támogatott operandustípus(ok) +: 'NoneType' és 'int'"
Ha az üzenet nem egyezik a tesztben szereplővel, a Pytest hibát jelez.
A paraméterezett tesztelés használata több bemenet egyidejű tesztelésére
Több bemenettel rendelkező függvény manuális meghívása helyett:
defteszt_számok hozzáadása():
állítja add_numbers(2, 3) == 6
állítja add_numbers(-1, 1) == 0
állítja add_numbers(0, 0) == 0
A Pytest paraméterezett tesztelési funkciót biztosít, amely lehetővé teszi, hogy könnyebben elvégezze ugyanezt. Így írhatja át a fenti tesztfüggvényt:
import pytest
@pytest.mark.parametrize("a, b, várható", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0)
])
defteszt_számok hozzáadása(a, b, várható):
állítjaadd_numbers(a, b)== várható
Több teszt futtatása
Eddig csak két tesztet írt az add_numbers függvényhez. Az összetettebb, több tesztet tartalmazó függvények esetében érdemes lehet őket egy osztályba csoportosítani.
Például itt van, hogyan hozhat létre tesztosztályt az add függvényhez.
osztályTestAddFunction:
@pytest.mark.parametrize("a, b, várható", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0),
])
defteszt_kiegészítés_számokkal(én, a, b, elvárt):
állítja add_numbers (a, b) == várható
defteszt_számok_hozzáadása_érvénytelen_bemenetekkel(maga):
val vel pytest.raises (TypeError) mint exc_info:
add_numbers(Egyik sem, 2)
állítja exc_info.value.args[0] == "nem támogatott operandustípus(ok) +: 'NoneType' és 'int'"
Ne feledje, hogy az osztálynév elé a „Test” előtagot kell írnia, hogy a Pytest tesztosztályként azonosíthassa és futtathassa.
A Pytest számos funkcióval rendelkezik
A Pytest segítségével automatikusan ellenőrizheti, hogy a kód megfelelően működik. A Pytest számos egyéb szolgáltatást kínál, például rögzítőket, amelyek lehetővé teszik a tesztadatok beállítását és lebontását, valamint a tesztfunkciók metaadatainak beállításához szükséges jelöléseket.
Ezenkívül integrálhatja a Pytestet a CI-folyamatba, és automatikusan és folyamatosan futtathatja a teszteket, amikor módosítja a kódot.