Jak testujete části programu pracující s velkou databází?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mrtnzlml
Člen | 140
+
0
-

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
+
+1
-

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
+
+1
-

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
+
0
-

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
+
+1
-

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
+
+1
-

Ono ani nie je taky velky problem to testovat ako skor ako vyrobit tu testovaciu DB. Hlavne ked je tam velka komplexita.

  1. Importovat ju z SQL suboru pred testami?
  2. Importovat ju z produkcneho dumpu/backupu?
  3. 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
+
0
-

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
+
0
-

@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
+
+3
-

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
+
0
-

@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?