Zrychlení testů #21

Merged
ledoian merged 2 commits from faster_tests into master 2023-02-06 20:49:10 +01:00
Owner

Několik optimalizací pro rychlejší běh testů. Pro detaily vizte commit message u af6628367f.

Budu rád, pokud posdílíte data o rychlosti před a po, ať vím, jak moc je zrychlení závislé na HW. (Nejpíš se kouknu na rozptyl poměrů zrychlení a víc to zkoumat nebudu, protože stejně na rigorózní testování nemáme dostatek dat (konfera na sous? :-D).) Pokud neumíte časovat přes time, tak klidně testům předhoďte --timing, ono se to pro tyhle účely moc neliší…

Několik optimalizací pro rychlejší běh testů. Pro detaily vizte commit message u af6628367f546a6. Budu rád, pokud posdílíte data o rychlosti před a po, ať vím, jak moc je zrychlení závislé na HW. (Nejpíš se kouknu na rozptyl poměrů zrychlení a víc to zkoumat nebudu, protože stejně na rigorózní testování nemáme dostatek dat (konfera na sous? :-D).) Pokud neumíte časovat přes `time`, tak klidně testům předhoďte `--timing`, ono se to pro tyhle účely moc neliší…
ledoian added 2 commits 2023-01-04 02:20:20 +01:00
Při běžení testů nejdéle trvá namigrovat (prázdnou) databázi. Toto tento
krok přeskočí.

By default django pro testy používá in-memory SQLite3 databázi, která se
schovat přirozeně nedá. Používání souborů trvá déle (data níž), ale
další běhy už jsou rychlé.

Zatím nevím, jestli se někde nemůže omylem schovávat nějaký nežádoucí
stav, ale testy mi i opakovaně běží, takže se to asi nerozbíjí úplně
moc. Na první pohled je uložená databáze prázdná.

Pro produkci a CI bych klidně běžel testy od nuly, tam nevadí čekat pár
desítek sekund až jednotky minut na výsledek. Tato optimalizace je
důležitá jen pro lokální vývoj, kde je žádoucí mít testy co
nejrychlejší.

V .gitignore už přesně toto jméno souboru je. Nevím proč, ale možná to
tak bylo by default v některém dávném Djangu.

Data
---
Spouštěl jsem příkaz `time ./manage.py test [--keepdb] api`. Běhy byly
relativně konzistentní (±1 s) a trvaly u mě:
- In memory SQLite (default): 26 s
- První spuštění s db na disku (HDD): 44 s
- Následná spuštění: 7.7 s
Data jsou nejspíš zkreslena tím, že všechno je nejspíš nacachované v
systému, ale i tak je vidět zřetelné zrychlení.

Původní motivace: úplně triviální a nedatabázový test na starém
notebooku běžel kolem 3:14, což je zoufale nepoužitelné když si chci
napsat testy jako pomůcku pro vývoj.
Umožňuje testovat konkrétní moduly a nespouštět vždy všechno.
Author
Owner

Zdá se, že zrychlení se koná. Tak si někdo prosím prohlédněte změny, posuďte, jestli to dává smysl a skoro bych to mergenul spíš dřïv – změna je to vesměs triviální.

Zdá se, že zrychlení se koná. Tak si někdo prosím prohlédněte změny, posuďte, jestli to dává smysl a skoro bych to mergenul spíš dřïv – změna je to vesměs triviální.
zelvuska reviewed 2023-02-06 19:55:32 +01:00
@ -7,3 +7,3 @@
trap - ERR # Testy nejspíš selžou, ale nechceme kolem toho dělat další chybovou hlášku.
./manage.py test -v2
./manage.py test -v2 --keepdb "$@"
Owner

Proč "$@"?

Proč "$@"?
Author
Owner

Viz zprávu 3a1aade3a2: aby to umělo brát parametry a dalo se upravit, co chceme testovat. Zvlášť pokud jednou chceme mít spoustu testů, tak dává smysl si pustit jen jednu testovací sadu, když něco upravuji a kompletní testy pouštět až nakonec…

(A taky to jako milý bonus automaticky přidává podporu --help :-))

Viz zprávu 3a1aade3a2bd215510b361eeb19c88fb2454628a: aby to umělo brát parametry a dalo se upravit, co chceme testovat. Zvlášť pokud jednou chceme mít spoustu testů, tak dává smysl si pustit jen jednu testovací sadu, když něco upravuji a kompletní testy pouštět až nakonec… (A taky to jako milý bonus automaticky přidává podporu `--help` :-))
Owner

Za mě v pohodě :)

Za mě v pohodě :)
Author
Owner

Merguji.

Merguji.
ledoian merged commit a6a57de3cf into master 2023-02-06 20:49:10 +01:00
ledoian deleted branch faster_tests 2023-02-06 20:49:10 +01:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: mam/mamweb#21
No description provided.