Nastavenie testovacej sady pre váš kód sa môže zdať ako prekážka, na ktorú nie ste pripravení, ale táto knižnica vyžaduje veľa námahy.

Testovanie je nevyhnutnou súčasťou vývoja softvéru. Pomáha včas zachytiť chyby a znižuje pravdepodobnosť chýb.

Pytest je jedným z najpopulárnejších testovacích rámcov pre Python. Umožňuje vám písať malé a čitateľné testy, ktoré sa môžu škálovať podľa toho, ako vaša aplikácia rastie. Zistite, ako nastaviť a používať Pytest s kódom Python.

Nastavenie Pytestu

Pred inštaláciou Pytestu je najlepšie vytvoriť virtuálne prostredie izolovať vaše testovacie prostredie, aby ste sa vyhli konfliktom s inými balíkmi a závislosťami.

Ak chcete vytvoriť virtuálne prostredie, pred inštaláciou Pytestu spustite nasledujúci príkaz.

testy python -m venv

Tým sa vo vašom aktuálnom adresári vytvorí nové virtuálne prostredie s názvom testy. Ak chcete aktivovať prostredie, spustite tento príkaz, ak používate Linux alebo Mac:

testuje zdroj/bin/aktivuje

V systéme Windows spustite tento príkaz:

instagram viewer
testy\\Skripty\\aktivovať

Ak chcete nainštalovať Pytest, môžete použiť pip, správcu balíkov Python, s týmto príkazom vo vašom termináli:

pip install pytest

Ak Pip nemáte, nebojte sa; môžeš nainštalujte Pip na Windows, Mac a Linux.

Spustite nasledujúci príkaz a skontrolujte, či ste Pytest nainštalovali správne.

pytest --verzia

Toto by malo vrátiť číslo nainštalovanej verzie.

Vytvorenie prvého testu

Zvážte nasledujúcu funkciu, ktorá sčíta dve čísla a vráti výsledok.

defpridať_čísla(a, b):
vrátiť a + b

S touto funkciou sa môže pokaziť niekoľko vecí. Zvážte napríklad, čo sa stane, ak zavoláte funkciu s nečíselnými hodnotami, ako napríklad Žiadne alebo hodnotou typu reťazec. Toto sú niektoré z potenciálnych okrajových prípadov, ktoré môžu spôsobiť zlyhanie funkcie.

Jeden z prvých testov, ktoré napíšete, by mal skontrolovať, či funkcia vracia očakávaný výsledok. Ak to chcete urobiť, môžete použiť kľúčové slovo statement na porovnanie skutočného výstupu funkcie s očakávaným výstupom. V prípade funkcie add_numbers môže testovacia funkcia vyzerať takto:

deftest_add_numbers():
tvrdiť pridať_čísla(2, 3) == 5
tvrdiť pridať_čísla(-1, 1) == 0
tvrdiť pridať_čísla(0, 0) == 0

Táto testovacia funkcia obsahuje tri príkazy tvrdenia, z ktorých každý porovnáva výstup funkcie add_numbers s očakávanou hodnotou. Prvý test skontroluje, či sčítanie 2 a 3 vráti 5, druhý test skontroluje, či sčítanie -1 a 1 vráti 0 a tretí test skontroluje, či sčítanie 0 a 0 vráti 0.

Ako spustiť testy s Pytestom

Po napísaní testov je ďalším krokom ich spustenie. Ak to chcete urobiť pomocou Pytest, prejdite do adresára obsahujúceho váš testovací súbor a spustite príkaz pytest:

pytest

Ak všetko funguje podľa očakávania, zobrazí sa hlásenie, že všetky testy prešli úspešne. Ak však niektoré z tvrdení zlyhá, Pytest ohlási chybu a ukáže vám vstupné hodnoty, ktoré zlyhanie spôsobili.

Povedzme napríklad, že ste spustili nasledujúcu testovaciu funkciu pre funkciu add_numbers:

deftest_add_numbers():
tvrdiť pridať_čísla(2, 3) == 6
tvrdiť pridať_čísla(-1, 1) == 0
tvrdiť pridať_čísla(0, 0) == 0

Prvé tvrdenie zlyhá, pretože očakávaná hodnota bola 6, ale skutočná hodnota bola 5 (súčet 2 a 3). Pytest vráti nasledujúcu správu:

Táto správa vám ukáže vstupné hodnoty, ktoré spôsobili hodnotu, a tiež vám povie, aká by mala byť skutočná hodnota. To uľahčuje rýchlu identifikáciu a opravu chýb vo vašom kóde.

Použitie Pytest.raises na uplatnenie výnimiek

Teraz napíšme test na pokrytie jedného z okrajových prípadov funkcie add_numbers. Keď funkcii odošlete nečíselný argument ako None, Python by mal vyvolať výnimku TypeError.

Už by ste mali byť spracovanie výnimiek vo vašich programoch Pythona môžete otestovať, či ich váš kód vyvoláva správne.

Ak to chcete urobiť, skopírujte do súboru nasledujúcu testovaciu funkciu. Používa kontextového manažéra pytest.raises na kontrolu, či volanie funkcie add_number s „None“ vyvolá výnimku TypeError.

importovať pytest

deftest_add_numbers_with_invalid_inputs():
s pytest.raises (TypeError):
pridať_čísla(žiadne, 2)

Potom spustite Pytest z príkazového riadku. Ak sa výnimka nevyvolá, test zlyhá.

Môžete ísť ďalej a skontrolovať podrobnosti správy o výnimke. Kontextový manažér vytvorí objekt ExceptionInfo s podrobnosťami.

Napríklad v tejto testovacej funkcii potvrďte správu o výnimke takto:

deftest_add_numbers_with_invalid_inputs():
s pytest.raises(TypeError) ako exc_info:
pridať_čísla(žiadne, 2)

tvrdiť exc_info.value.args[0] == "nepodporované typy operandov pre +: 'NoneType' a 'int'"

Ak sa správa nezhoduje so správou v teste, Pytest oznámi zlyhanie.

Ako používať parametrizované testovanie na testovanie viacerých vstupov naraz

Namiesto manuálneho volania funkcie s viacerými vstupmi, ako je tento:

deftest_add_numbers():
tvrdiť pridať_čísla(2, 3) == 6
tvrdiť pridať_čísla(-1, 1) == 0
tvrdiť pridať_čísla(0, 0) == 0

Pytest poskytuje funkciu parametrizovaného testovania, ktorá vám umožňuje robiť to isté jednoduchšie. Vyššie uvedenú testovaciu funkciu môžete prepísať takto:

importovať pytest

@pytest.mark.parametrize("a, b, očakávané", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0)
])
deftest_add_numbers(a, b, očakávané):
tvrdiťpridať_čísla(a, b)== očakávané

Ako spustiť viacero testov

Doteraz ste napísali iba dva testy pre funkciu add_numbers. Pre komplexnejšie funkcie s viacerými testami ich možno budete chcieť zoskupiť do triedy.

Napríklad tu je návod, ako by ste vytvorili testovaciu triedu pre funkciu add.

triedaTestAddFunction:
@pytest.mark.parametrize("a, b, očakávané", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0),
])
deftest_doplnku_s_číslami(ja, a, b, očakávané):
tvrdiť add_numbers (a, b) == očakávané

deftest_add_numbers_with_invalid_inputs(ja):
s pytest.raises (TypeError) ako exc_info:
pridať_čísla(žiadne, 2)
tvrdiť exc_info.value.args[0] == "nepodporované typy operandov pre +: 'NoneType' a 'int'"

Upozorňujeme, že pred názov triedy musíte zadať „Test“, aby ju Pytest mohol identifikovať ako testovaciu triedu a spustiť ju.

Pytest má oveľa viac funkcií

Pomocou Pytestu môžete automaticky overiť, či váš kód funguje tak, ako očakávate. Pytest ponúka mnoho ďalších funkcií, ako sú zariadenia, ktoré vám umožňujú nastaviť a odstrániť testovacie údaje a značky na nastavenie metadát o vašich testovacích funkciách.

Okrem toho môžete Pytest integrovať do svojho kanála CI a spustiť testy automaticky a nepretržite, keď zmeníte svoj kód.