Když pytest odhalí chyby dřív, než se dostanou do provozu

From IT-Core
Jump to navigation Jump to search


Na závěr si zkuste odpovědět na otázku: co se stane, když test spustím podruhé? Měl by projít stejně jako poprvé. Pokud ne, máte problém s náhodou nebo s globálním stavem. Typickým viníkem je datum a čas, náhodná čísla nebo statické proměnné. Použijte injektáž hodin nebo generátoru náhodných čísel. První test, který je stabilní, rychlý a testuje chování, je lepší než deset testů, které jen opakují implementaci. Takový test vám dá jistotu, že kód dělá to, co má – a to je celý smysl unit testování.

Tip, jak zařídit malou kuchyni se vyhnout největším chybám: nikdy nemíchejte více konfigurací barvy stěn do obýváku jednoho souboru. Držte se osvědčených vzorů pro daný jazyk nebo framework. A pokud používáte nástroj pro správu verzí, vyžadujte, aby byly konfigurační soubory součástí každé změny. Zkontrolujte také, že skripty fungují na čistém systému – jinak narazíte na to, že u vás funguje jen proto, že máte staré balíčky.

Testování je nedílnou součástí vývoje, ale mnoho začínajících programátorů ho odkládá na později. Přitom stačí znát několik základních principů a nástrojů, které práci usnadní. Pytest patří mezi nejoblíbenější testovací frameworky v Pythonu, a to díky své jednoduchosti a čitelnosti. Nemusíte se učit složité konstrukce – stačí psát funkce začínající slovem test_ a pytest se postará o zbytek.

Největší úskalí prvního testu je ale často prostředí. Mnoho lidí začne testovat kód, který komunikuje s databází, se soubory nebo s externí službou. Výsledkem je test, který je pomalý, nestabilní a vyžaduje konfiguraci. Pro unit test platí jednoduché pravidlo: žádný vnější zdroj. Pokud funkce čte z disku, vytvořte si dočasný soubor v testu a smažte ho po testu. Pokud volá API, nahraďte ho falešným objektem, který vrací pevně dané hodnoty. Jinak nejde o unit test, ale o integrační test, a ten píšete příliš brzy.

REST API je skvělou volbou, pokud vaše API má sloužit veřejně, je stabilní a potřebujete jednoduchou dokumentaci. Typicky se hodí pro CRUD operace, kdy každý zdroj (resource) má vlastní endpoint a jasně danou strukturu. V praxi to znamená, že klient dostane vždy všechna data, která endpoint nabízí, ať potřebuje jedno pole nebo deset. To je výhoda i nevýhoda zároveň. Pokud máte entity s mnoha poli a klienti je používají různým způsobem, začnete brzy řešit problém s nadbytečnými daty. Řešením není přidávat další endpointy, ale zvážit GraphQL.

Při samotném přenosu dat vyzkoušejte dva přístupy: export a import pomocí pg_dump a také použití ETL nástrojů, které podporují oba systémy. U větších databází se vyplatí rozdělit tabulky na menší celky a přenášet je paralelně. Typickou chybou je přenos osvětlení v obývákušech dat v jednom obřím SQL souboru, což vede k vyčerpání paměti a pádům. Pokud databáze obsahuje binární soubory, ověřte, že je přenesete v režimu BYTEA a že nastavení klienta a serveru je kompatibilní. Jinak se může stát, že se soubory po importu poškodí.

Co zvážit při výběru a čemu se vyhnout Pokud vaše API používá výhradně vaše vlastní aplikace a potřebujete rychlé iterace, GraphQL často vyhraje. Umožní vám přidávat nové typy a pole bez verzování API, což urychlí vývoj. If you liked this write-up and you would like to obtain even more info regarding osvětlení v Obýváku kindly see our own page. Naopak pokud API poskytujete třetím stranám a chcete zajistit jeho dlouhodobou stabilitu, REST je bezpečnější. Změny v RESTu řešíte novými verzemi endpointů, zatímco změny v GraphQL schématu je nutné pečlivě plánovat, aby nedošlo k porušení stávajících dotazů. Častým omylem je tvrzení, že GraphQL je bezpečnější – to závisí na tom, jak nastavíte autorizaci a validaci. V RESTu máte jasné oddělení operací (GET, POST, PUT, DELETE), v GraphQL je vše pouze dotaz nebo mutace, což může vést k tomu, že vývojář omylem povolí zápis tam, kde mělo být jen čtení.

Výběr mezi REST API a GraphQL často připomíná spor o to, který nástroj je univerzálně lepší. Pravda je ale taková, že každý z těchto přístupů řeší jiný typ problému. REST je starší, zavedený a předvídatelný, zatímco GraphQL přináší flexibilitu a efektivitu při práci s daty, ale za cenu složitějšího učení a správy. Než se rozhodnete, položte si tři otázky: kdo bude API používat, jaká je povaha dat a jaké máte zkušenosti v týmu. Odpovědi vám pomohou neudělat zásadní chybu hned na začátku.

Začněte tím, že definujete, co všechno musí být ve verzi pod kontrolou. Patří sem nejen soubor se závislostmi (např. manifest pro správce balíčků), ale i konfigurace formátování kódu, pravidla pro linter a případně nastavení pro vývojové prostředí. Vše uložte do repozitáře, a to včetně verzí nástrojů. Pokud někdo potřebuje jinou verzi, měl by to udělat vědomě a s vědomím, že to může ovlivnit ostatní.