From af6628367f546a6a2264d8ae5e5dc57666d017da Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 4 Jan 2023 01:51:02 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Testy:=20Schov=C3=A1v=C3=A1me=20si=20datab?= =?UTF-8?q?=C3=A1zi=20nap=C5=99=C3=AD=C4=8D=20b=C4=9Bhy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- make/test | 2 +- mamweb/settings_local.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/make/test b/make/test index 155d03fa..e3fa9f52 100755 --- a/make/test +++ b/make/test @@ -6,4 +6,4 @@ set -exuo pipefail ensure_web_installed 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 diff --git a/mamweb/settings_local.py b/mamweb/settings_local.py index 540c0453..4d98cd38 100644 --- a/mamweb/settings_local.py +++ b/mamweb/settings_local.py @@ -40,7 +40,10 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db-local.sqlite3'), - } + 'TEST': { + 'NAME': os.path.join(BASE_DIR, 'db-test.sqlite3'), + }, + }, } #DATABASES = { # 'default': { From 3a1aade3a2bd215510b361eeb19c88fb2454628a Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 4 Jan 2023 02:11:15 +0100 Subject: [PATCH 2/2] Testy: bereme parametry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Umožňuje testovat konkrétní moduly a nespouštět vždy všechno. --- make/test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/test b/make/test index e3fa9f52..45de21f1 100755 --- a/make/test +++ b/make/test @@ -6,4 +6,4 @@ set -exuo pipefail ensure_web_installed trap - ERR # Testy nejspíš selžou, ale nechceme kolem toho dělat další chybovou hlášku. -./manage.py test -v2 --keepdb +./manage.py test -v2 --keepdb "$@"