Jak testujete části programu pracující s velkou databází?
- mrtnzlml
- Člen | 140
Jak testujete části programu pracující s databází? Původně (což používám teď) jsem měl vymyšleno, že pokaždé když bude třeba databáze, tak se natáhne do prázdné DB čistá struktura a na tom to budu testovat. A fungovalo to skutečně dobře. Teď jsem ale narazil na to, že mám velmi složitou a velkou strukturu DB a tento postup je již nesnesitelně pomalý (import samotné prázdné DB trvá dlouho).
Jak to tedy dělat lépe? Jediné k čemu to teď směřuje je vytvořit si na začátku všech testů nějakou testovací DB a nad tou spouštět všechny testy společně. Tím však bude testování složitější. Jak to děláte na velkých projektech?
- Marek Šneberger
- Člen | 130
U nás jsme to měli dost podobně. Každý databázový testCase vytvářel vlastní „demo“ test databázi. Nicméně naše testy trvaly cca 45 minut, což bylo neúprosné. Řešením by bylo nepsat db testy, ale třeba na objednávky a podobně je prostě chceš :) Těch db testů máme poměrně dost.
Vyřešili jsme to tak, že jsme vytvořili docker container, ve kterém to testujeme a databáze v tom containeru běží v RAMce (tmpfs). Celé testy nám dneska trvají cca 15 minut, což už není tak uplně špatné. Určitě by to šlo ještě nějak zrychlit, ale zatím nám to stačí takto :)
- David Kudera
- Člen | 455
Taky máme všechno přes docker, ale před testy se vytvoří navíc jedna vzorová databáze, ze které se v případě potřeby vytváří kopie. Akorát to závisí na postgres, kde se kopie vytvoří během chviličky.
- mrtnzlml
- Člen | 140
Marek Šneberger napsal(a):
U nás jsme to měli dost podobně. Každý databázový testCase vytvářel vlastní „demo“ test databázi. Nicméně naše testy trvaly cca 45 minut, což bylo neúprosné. Řešením by bylo nepsat db testy, ale třeba na objednávky a podobně je prostě chceš :) Těch db testů máme poměrně dost.
Vyřešili jsme to tak, že jsme vytvořili docker container, ve kterém to testujeme a databáze v tom containeru běží v RAMce (tmpfs). Celé testy nám dneska trvají cca 15 minut, což už není tak uplně špatné. Určitě by to šlo ještě nějak zrychlit, ale zatím nám to stačí takto :)
Toho jsem se bál, protože o tom naposledy nikdy nechtěl udělat přednášku na PoSobotě… :)
- David Matějka
- Moderator | 6445
S timhle commitem by slo udelat, ze budes mit N testovacich databazi (kde N == pocet threadu, ve kterych ti bezi testy) a test si vzdy vybere tu DB dle env variable. Cely test pak pobezi v transakci, ktera se nakonec rollbackne.
- newPOPE
- Člen | 648
Ono ani nie je taky velky problem to testovat ako skor ako vyrobit tu testovaciu DB. Hlavne ked je tam velka komplexita.
- Importovat ju z SQL suboru pred testami?
- Importovat ju z produkcneho dumpu/backupu?
- Pouzit DB seeding (napr. http://docs.phinx.org/…eeding.html)
Dalsi problem nastane s migraciami… a x dalsich :).
Celkom fajn je mat rychly pristup k importu z backupu. A to ci uz na dev prostredie alebo na testovacie prostredie (CI). Akonahle je tych dat vela tak je dobre sa zamyslet ci je k testovaniu potrebne naozaj vsetko nakolko v drvivej vacsine pripadov sa data delia „konfiguracne“ a „user data“. No a tie user povacsine moc nepotrebujes.
- Jan Tvrdík
- Nette guru | 2595
ako vyrobit tu testovaciu DB
Tu DB bys měl vždycky tvořit z databázových migracích, od toho je
v repositáři máš, ne? Kvůli rychlost je pak vhodné to nějak cachovat
(třeba nextras migrations mají už přes rok prototyp
implementace ve vedlejší větvi), v PostgreSQL jde zase použít
CREATE DATABASE ... WITH TEMPLATE
.
- newPOPE
- Člen | 648
@JanTvrdík jop to je fajn, no nie vsetky migracne tooly s tym pocitaju. Takisto rozdelenie ako v Nextras na structure, data, dummy-data no a potom su s tym problemy.
A este sa ti moze stat ze prides do projektu kde ma DB 10ky GB a tam to uz taka sranda nie je dostat data, dummy-data, structure. Resp. nikomu sa povacsine nechce #reality.
- Marek Šneberger
- Člen | 130
mrtnzlml napsal(a):
Toho jsem se bál, protože o tom naposledy nikdy nechtěl udělat přednášku na PoSobotě… :)
Tak se u nás zastav, napiš, zavolej… Rád ukážu / vysvětlím :)
Teoreticky bychom to mohli opensourcnout a napsat k tomu nějaký mini článeček co a jak. Beztak ten docker container máme volně dostupný.
- Jan Tvrdík
- Nette guru | 2595
@JanTvrdík A este sa ti moze stat ze prides do projektu kde ma DB 10ky GB
Ty desítky GB dat snad ale nepotřebuješ na testy?