أهلاً بكم، في الموسوعة القبطية الأرثوذكسية
První kroky s Pythonem pro automatizaci úloh
Jak správně typovat funkce a objekty Největší sílu TypeScriptu využijete při definování funkcí a objektů. U funkcí vždy explicitně typujte parametry a návratovou hodnotu. Například místo function add(a, b) napište function add(a: number, b: number): number. Tím zajistíte, že funkci nelze zavolat s řetězcem, i kdyby se to na první pohled zdálo v pořádku. U objektů použijte rozhraní (interface) nebo typové aliasy (type). Rozhraní je vhodnější pro definici tvaru objektu, který se bude rozšiřovat, zatímco typové aliasy se hodí pro uniony a komplexnější typy. Typickým začátečnickým omylem je použití typu any všude, kde si nejste jistí. To obchází celý systém kontroly a v podstatě se vracíte k JavaScriptu. Místo toho zkuste použít unknown a pak pomocí kontrol typu (tzv. type guards) zúžit, co skutečně chcete povolit.
Při validaci tokenu na serveru vždy kontrolujte tři věci: podpis, expiraci a issuer (kdo token vydal). Ignorování těchto kontrol vede k bezpečnostním děrám. Například pokud neověřujete issuer, útočník může podepsat token vlastním klíčem a vydávat ho za váš. Také si dejte pozor na algoritmus „none", který někteří starší klienti používají – ten musí být na serveru tvrdě zakázán.
Jak začít měřit pokrytí smysluplně Základem je vybrat správný nástroj, který umí měřit pokrytí podle řádků, vět a podmínek. Pro jazyky jako Python se nabízí standardní knihovna pro měření, pro JavaScript existují nástroje zabudované přímo do testovacích běhů. Nejdůležitější je měřit pokrytí na úrovni jednotkových testů, ale také integračních testů – kombinace obojího dá lepší obrázek. Spusťte testy s měřením při každém běhu, ne jen občas, abyste měli aktuální data. Ukládejte výsledky do reportu, který si tým může prohlížet v rámci CI.
Na závěr, pyramida není dogma, ale vodítko. Přizpůsobte ji svému projektu. Pokud vyvíjíte malou aplikaci s jedním modulem, možná vám stačí pouze jednotkové testy a pár integračních. Pokud máte mikroservisní architekturu, budete potřebovat více integračních testů a méně end-to-end. Klíčové je udržet testy rychlé, stabilní a smysluplné. Pravidelně procházejte testovací sadu a odstraňujte testy, které nic neříkají nebo se neustále opakují. Čas strávený údržbou testů je investice, ne ztráta – ale jen tehdy, když je pyramida správně postavená.
Dalším typickým úkolem je zpracování textových souborů nebo tabulek. Python nabízí knihovny pro práci s daty, které zvládnou čtení, filtrování i zápis do nových souborů. Důležité je dávat pozor na kódování, zejména při práci s českými znaky – vždy specifikujte jako UTF-8, jinak riskujete chyby při čtení. Také se vyhněte pevnému kódování vstupních hodnot: pokud se cesta k souboru nebo filtr změní, měl by váš skript přijímat argumenty z příkazové řádky.
Jak vyvážit vrstvy a nezapomenout na integrační testy Integrační testy by měly tvořit asi 10–20 % celé sady. Jejich úkolem je ověřit spolupráci mezi komponentami, například mezi službou a databází, nebo mezi frontendem a backendem. Nepište je ale pro každou metodu – to by je zpomalilo. Vyberte si klíčové scénáře, které propojují více vrstev. Pro testy s databází používejte izolované prostředí, nejlépe transakce, které se po každém testu vrátí zpět. Vyhněte se sdílenému stavu mezi testy – paralelní běh by pak selhával náhodně.
End-to-end testy jsou nejdražší, proto jich musí být minimum. Měly by pokrývat jen hlavní uživatelské cesty, jako je registrace, nákup nebo odhlášení. Pokud máte 500 jednotkových testů, stačí 5–10 end-to-end. Dbejte na to, aby běžely v izolovaném prostředí s čistými daty. Častou chybou je spouštět je proti produkčnímu prostředí nebo s reálnými platebními branami – to vede k nestabilitě a bezpečnostním rizikům. Pro end-to-end testy používejte vlastní testovací uživatele a fiktivní platební metody.
Prakticky implementujte middleware, který token zpracuje. Ten by měl vyjmout token z hlavičky Authorization ve formátu Bearer, ověřit ho a připojit informace o uživateli k požadavku. Vždy řešte chyby pomocí HTTP status kódů – 401 pro neplatný token, 403 pro nedostatečná práva. Vyhněte se logování celých tokenů, stačí logovat ID uživatele a čas platnosti.
Začněte testováním reducerů. Vytvořte si samostatný soubor pro každý reducer a testujte ho jako obyčejnou funkci. Vstupem je aktuální stav a akce, výstupem nový stav. Ověřte, že se stav nemění, pokud akce neodpovídá žádnému případu, a že se korektně mění pro každou důležitou akci. Typická chyba: zapomenete otestovat výchozí větev, která vrací nezměněný stav. To je přitom nejdůležitější část, protože chrání před náhodnou mutací dat.