Jak začít s pytestem a psát testy, které dávají smysl

From IT-Core
Jump to navigation Jump to search

Praktickým nástrojem je tzv. „buffer" (rezerva). Do odhadu zahrňte tři úrovně rezervy: na chyby, na komunikaci a na změny požadavků. Například odhad čistého času 10 hodin: přidáte 20 % na chyby, 15 % na komunikaci a 10 % na změny. Výsledek: 10 + 2 + 1,5 + 1 = 14,5 hodiny. Rezerva není zbytečná – je to poctivý odhad rizik. Klient nebo vedení by měli vědět, že tato rezerva je součástí odhadu, a ne položkou navíc.

Častou chybou je odhadování „optimisticky" – tedy jen na základě čistého kódování bez přestávek, přepínání mezi úkoly nebo učení se nové technologie. Přepnutí kontextu stojí v průměru 10–15 minut, a pokud během dne přepnete desetkrát, ztratíte až dvě hodiny. Dále počítejte s časem na ladění a testování, které obvykle tvoří 20–30 % čistého času vývoje. Pokud tyto položky nepřidáte, odhad bude nepoužitelný.

Základní struktura projektu je jednoduchá: testy umístěte do adresáře tests a pojmenujte soubory test_nazev.py. Spuštění probíhá příkazem pytest v kořenovém adresáři. Pytest automaticky sbírá soubory začínající na test_ a funkce v nich. Pro první test stačí napsat funkci s assert, která porovná očekávaný výsledek se skutečným. Pokud test selže, pytest vypíše podrobné informace o tom, co se neshoduje, takže chybu rychle najdete.

Jednou z nejužitečnějších funkcí Gitu je možnost vracet se zpět. Pokud chcete vrátit změny v souboru, který ještě nebyl commitnut, použijte git checkout -- soubor.txt. Tím se soubor vrátí do stavu z posledního commitu. Pokud jste již provedli commit a chcete jej zrušit, použijte git revert – ten vytvoří nový commit, který změny z předchozího vrátí zpět. Vyhnete se tak přepisování historie, což je důležité, pokud s projektem pracuje více lidí.

Při automatizaci se vyvarujte dvou častých chyb. První je snaha automatizovat úplně vše hned na začátku. Automatizujte jen to, co děláte opakovaně a co je chybové. Například sestavení aplikace nebo migrace databáze. Druhou chybou je zanedbání zpětné vazby. Automatizace bez logování a hlášení chyb je jako jízda se zavázanýma očima. Nastavte si jednoduché notifikace na e-mail nebo do chatu, ať víte, že něco spadlo. Až budete mít jistotu, že proces funguje, můžete přidávat další kroky.

Commit a kontrola historie Když máte soubory připravené, vytvořte commit pomocí git commit -m "popis změn". Zpráva by měla být krátká a vystihovat, co jste změnili – to se vám bude hodit při procházení historie. Pro zobrazení seznamu commitů použijte git log. Uvidíte hash (identifikátor), autora, datum a zprávu. Užitečný je také příkaz git status, který ukazuje, které soubory jsou změněné a které ještě nebyly přidány. Pokud omylem provedete commit s chybou, můžete jej opravit příkazem git commit --amend, který upraví poslední commit.

Parametrizace je další užitečná vlastnost. Pomocí dekorátoru @pytest.mark.parametrize můžete spustit stejný test s různými vstupy a očekávanými výstupy. Například funkci pro výpočet faktoriálu otestujete pro hodnoty 0, 1, 5 a 10 najednou. Tím se snižuje duplicita kódu a zvyšuje pokrytí. Při selhání parametrizovaného testu pytest jasně označí, která kombinace vstupů selhala, takže nemusíte hádat.

DevOps není jen další zkratka v IT žargonu. Je to přístup, který spojuje vývoj a provoz aplikací do jednoho celku. Cílem je zkrátit dobu mezi nápadem a nasazením změny do produkce, a to bez ztráty stability. Pokud s DevOps začínáte, nehledejte žádný univerzální návod. Místo toho se zaměřte na konkrétní problém, který chcete vyřešit, a postupně kolem něj budujte celý proces.

Na závěr si osvojte techniku logování. Místo pouhého `print()` zaznamenávejte průběh do souboru pomocí modulu `logging`. Díky tomu zjistíte, kdy a kde skript selhal, i když běží na pozadí. Automatizace je o tom, aby vám práce ubyla – pokud vám skript přináší víc starostí než užitku, vraťte se k jednoduššímu řešení. Začněte malými úkoly, postupně přidávejte složitější logiku a brzy zjistíte, že Python je mocný nástroj, který vám ušetří spoustu času.

Typickou chybou začátečníků je pracovat přímo na větvi master (nebo main). Pro každou novou funkci si vytvořte větev pomocí git branch nazev_vetve a poté na ni přepněte příkazem git checkout nazev_vetve. Tím se izolujete od stabilní verze a můžete experimentovat. Až budete s prací hotovi, sloučíte větev zpět pomocí git merge. Tento postup vám ušetří spoustu problémů, zejména když pracujete na více úkolech najednou.

Další pastí je spoléhání na pořadí testů. Testy by měly být na sobě nezávislé. Pokud jeden test mění globální stav a druhý na něj navazuje, při změně pořadí testy selžou. Udržujte testy izolované. Pište je tak, aby každý běžel samostatně a vždy začínal z čistého stavu. Pokud testujete práci s daty, vytvořte data přímo v testu, nepoužívejte sdílené proměnné.