Egységtesztelés Python egységteszt modullal

Egy jó fejlesztő sem telepít kódot alapos tesztelés nélkül. Az egységtesztelés egy nagy program egyes moduljainak tesztelésének folyamata.

Ez a cikk azt tárgyalja, hogyan végezheti el a kód egységtesztjét a Python unittest modul segítségével. Először is tisztázzuk, melyek a tesztelés típusai.

Ami a tesztelést illeti, létezik kézi tesztelés és automatikus tesztelés. A kézi tesztelés egy olyan tesztelési technika, ahol az emberek a fejlesztés befejezése után manuálisan végzik el a tesztet. Az automatizálási tesztelés egy olyan tesztelési technika, ahol a programok automatikusan elvégzik a tesztet, és az eredményeket átadják nekünk.

Megértette volna, hogy a kézi tesztelés időigényes és nehezen kivitelezhető. Tehát a fejlesztők kódot írnak a tesztek végrehajtásához (automatikus tesztelés). Az automatizált tesztelésben többféle tesztelés létezik. Néhány közülük egységteszt, integrált tesztelés, végponttól végpontig tesztelés, stresszteszt stb.,

Lássuk a tesztelés standard menetét.

  • Írja be vagy frissítse a kódot.
  • Írjon vagy frissítsen teszteket a kód különböző eseteire.
  • Futtassa le a teszteket (manuálisan vagy tesztfutó segítségével).
  • Lásd a teszteredményeket. Ha hibákat észlel, javítsa ki őket, és ismételje meg a lépéseket.

Itt a legalapvetőbb és legalapvetőbb tesztelési típusról, az egységtesztelésről fogunk beszélni. Minden további nélkül merüljünk el az aktuális oktatóanyagban.

Mi az az egységteszt?

Az egységtesztelés egy független kód kis blokkjának tesztelésére szolgáló technika. A kisblokkos kód a legtöbb esetben funkció lesz. A független szó azt jelenti, hogy nem függ a projekt más kódrészleteitől.

Tegyük fel, hogy ellenőriznünk kell, hogy egy karakterlánc egyenlő-e a „etoppc.com”-vel vagy sem. Ehhez írtunk egy függvényt, amely egy argumentumot vesz fel, és visszaadja, hogy az egyenlő-e „etoppc.com”-vel vagy sem.

def is_equal_to_geekflare(string):
	return string == "etoppc.com"

A fenti függvény semmilyen más kódtól nem függ. Tehát különböző bemenetek megadásával függetlenül is tesztelhetjük. A független kódrészlet a projekt egészében használható.

Az egységteszt fontossága

Általában a független blokkkód használható a projektben. Tehát jól kell megírni és tesztelni. Az egységtesztek az ilyen típusú független kódblokkok tesztelésére használt tesztek. Mi történik, ha nem használunk egységteszteket a projektünkhöz?

  Hogyan lehet alaphelyzetbe állítani egy csempét

Tegyük fel, hogy nem teszteltük a projektben használt kis kódblokkokat. A többi kis kódblokkot használó összes többi teszt, például integrációs tesztek, végpontok közötti tesztek stb. sikertelen lehet. Ez megszakítja az alkalmazást. Éppen ezért a kód alapvető építőelemeit jól kell tesztelni.

Most már tudjuk az egységteszt és az írásbeli egységtesztek fontosságát minden független kódblokk esetében. Mivel egységteszteket hajtottunk végre, más tesztek, például integrációs tesztek, végpontok közötti tesztek stb., nem fognak kudarcot vallani a független kódblokk miatt.

A következő részekben látni fogjuk, mi az a Python unittest modul, és hogyan használjuk a unittest modult egységtesztek Pythonban írásához.

Megjegyzés: Feltételezzük, hogy ismeri a Python osztályokat, modulokat stb. Ha nem ismeri a Python köztes fogalmait, például osztályokat, modulokat stb., akkor nehéz lehet megértenie a következő részeket.

Mi az a Python egységteszt?

A Python unittest egy beépített tesztelési keretrendszer a Python kód tesztelésére. Van egy tesztfutója, amely lehetővé teszi a tesztek lefuttatását különösebb erőfeszítés nélkül. Tehát a beépített unittest modult használhatjuk a teszteléshez harmadik féltől származó modulok használata nélkül. De ez az Ön igényei szerint változik. A beépített unittest modul jó a Pythonban való tesztelés megkezdéséhez.

Az alábbi lépéseket kell követnünk a Python kód teszteléséhez a unittest modul segítségével.

#1. Írd be a kódot.

#2. Importálja az egységteszt modult.

#3. Hozzon létre egy fájlt a kulcsszóteszttel kezdődően. Például a test_prime.py. A kulcsszóteszt a tesztfájlok azonosítására szolgál.

#4. Hozzon létre egy osztályt, amely kiterjeszti az osztályt unittest.TestCase.

#5. Írjon metódusokat (teszteket) az osztályon belül. Mindegyik módszer különböző teszteseteket tartalmaz az Ön igényei alapján. A metódust a test kulcsszóval kezdődően kell elnevezni.

#6. Futtassa le a teszteket. A teszteket többféleképpen is lefuttathatjuk.

  • Futtassa a python -m unittest test_filename.py parancsot.
  • A tesztfájlokat az általános Python-fájlokhoz hasonlóan futtatjuk a python teszt_fájlnév.py paranccsal. Ahhoz, hogy ez a módszer működjön, meg kell hívnunk a tesztfájlban található unittest fő metódusát.
  • És végül a felfedezés felhasználása. A teszteket automatikusan futtathatjuk a python -m unittest discover paranccsal anélkül, hogy megemlítenénk a teszt fájlnevét. Meg fogja találni a teszteket az általunk követett elnevezési konvenció segítségével. Tehát a tesztfájljainkat a teszt kulcsszóval kell elnevezni az induláskor.
  A JetBrains Rider telepítése Linuxra

Általában a tesztelés során összehasonlítjuk a kód kimenetét a várt kimenettel. Tehát a kimenetek összehasonlításához a unittest különböző módszereket kínál. Megtalálhatja az összehasonlító függvények listáját itt.

Könnyen, minden nehézség nélkül megértheti őket. Egyenesek.

Ez egy csomó elmélet. Most bele kell térnünk a kódolásba.

Megjegyzés: Ha bármilyen kérdése van a unittest modullal kapcsolatban, lépjen a dokumentáció és tisztázza a kétségeit. Minden további késedelem nélkül használjuk a unittest modult.

Egységtesztek Pythonban unittest segítségével

Először írunk néhány függvényt, majd a tesztek megírására koncentrálunk. Először nyisson meg egy mappát kedvenc kódszerkesztőjében. És hozzon létre egy utils.py nevű fájlt. Illessze be a következő kódot a fájlba.

import math


def is_prime(n):
    if n < 0:
        return 'Negative numbers are not allowed'

    if n <= 1:
        return False

    if n == 2:
        return True

    if n % 2 == 0:
        return False

    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


def cubic(a):
    return a * a * a


def say_hello(name):
    return "Hello, " + name

Három különböző funkciónk van az utils.py fájlban. Most minden függvényt különböző tesztesetekkel kell tesztelnünk. Írjuk fel az első prime függvény tesztjeit.

#1. Hozzon létre egy test_utils.py nevű fájlt a minta mappában utils.py néven.

#2. Importálja a segédprogramokat és az egységteszt modult.

#3. Hozzon létre egy osztályt TestUtils névvel, kiterjesztve az unittest.TestCase osztályt. Az osztály neve bármi lehet. Próbáljon értelmes nevet adni az osztálynak.

#4. Az osztályon belül írjon egy teszt_is_prime nevű metódust, amely argumentumként elfogadja az önmagát.

#5. Írjon különböző teszteseteket argumentumokkal az is_prime-ba, és hasonlítsa össze a kimenetet a várt kimenettel.

#6. Példa teszteset self.assertFalse(utils.is_prime(1)).

#7. Arra számítunk, hogy az is_prime(1) kimenete hamis lesz a fenti esetben.

#8. A fenti esethez hasonlóan különböző eseteket fogunk tesztelni az általunk tesztelt függvény alapján.

  Jelszavak megjelenítése és elrejtése a böngészőben az ISeePass könyvjelzővel

Lássuk a teszteket.

import unittest

import utils


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        self.assertFalse(utils.is_prime(4))
        self.assertTrue(utils.is_prime(2))
        self.assertTrue(utils.is_prime(3))
        self.assertFalse(utils.is_prime(8))
        self.assertFalse(utils.is_prime(10))
        self.assertTrue(utils.is_prime(7))
        self.assertEqual(utils.is_prime(-3),
                         "Negative numbers are not allowed")


if __name__ == '__main__':
    unittest.main()

A modul unittest fő módszerét hívjuk meg a tesztek futtatásához a python filename.py paranccsal. Most futtassa a teszteket.

Az alábbi kimenethez hasonló kimenetet fog látni.

$ python test_utils.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

Most próbálja meg megírni a teszteseteket más függvényekhez is. Gondoljon a függvények különböző eseteire, és írjon nekik teszteket. Vessen egy pillantást a következő tesztekre, amelyek hozzáadódnak a fenti osztályhoz.

...


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        ...

    def test_cubic(self):
        self.assertEqual(utils.cubic(2), 8)
        self.assertEqual(utils.cubic(-2), -8)
        self.assertNotEqual(utils.cubic(2), 4)
        self.assertNotEqual(utils.cubic(-3), 27)

    def test_say_hello(self):
        self.assertEqual(utils.say_hello("etoppc.com"), "Hello, etoppc.com")
        self.assertEqual(utils.say_hello("Chandan"), "Hello, Chandan")
        self.assertNotEqual(utils.say_hello("Chandan"), "Hi, Chandan")
        self.assertNotEqual(utils.say_hello("Hafeez"), "Hi, Hafeez")


...

Csak néhány összehasonlító függvényt használtunk a unittest modulból. A teljes listát megtalálod itt.

Megtanultuk, hogyan kell egységteszteket írni a unittest modul segítségével. Most itt az ideje, hogy megvizsgáljuk a tesztek futtatásának különböző módjait.

Tesztek futtatása unittest segítségével

A tesztesetek futtatásának módját a fenti részben már láthattuk. Lássuk a tesztek futtatásának másik két módját a unittest modul használatával.

#1. A fájlnév és a unittest modul használata.

Ebben a módszerben a unittest modult és a fájlnevet használjuk a tesztek futtatásához. A tesztek futtatására szolgáló parancs a python -m unittest fájlnév.py. Esetünkben a tesztek futtatására szolgáló parancs a python -m unittest test_utils.py.

#2. Felfedezési módszer használatával

A unittest modul felfedezési módszerét használjuk az összes tesztfájl automatikus észlelésére és futtatására. A tesztfájlok automatikus észleléséhez el kell neveznünk őket a teszt kulcsszóval kezdve.

A tesztek Discover metódussal történő futtatására szolgáló parancs a python -m unittest discover. A parancs észleli az összes fájlt, amelynek neve testtel kezdődik, és végrehajtja azokat.

Következtetés 👩‍💻

Az egységtesztek alapvető tesztek a programozási világban. A való világban sok más teszt is létezik. Próbáld meg egyenként megtanulni őket. Remélem, ez az oktatóanyag segít alapvető tesztek megírásában Pythonban a unittest modul használatával. Vannak harmadik féltől származó könyvtárak, például a pytest, a Robot Framework, a nose, a nose2, a slash stb. A projekt követelményei alapján fedezheti fel őket.

Jó tesztelést 😎

A Python interjúkérdések és válaszok is érdekelhetik.