Jak zajistit co nejrychlejší provedené databázových testů využivajících doctrine?
- fary
- Člen | 155
Ahoj, zrovna vytvářím unit testy (za pomocí nette/tester) a pro databázi využívám kdyby/doctrine. Bohužel se potýkám s tím, jak jsou testy týkající se databáze zdlouhavé a pomalé. Někdy jeden zabere kolem 30 – 60 sekund. Je to fakt strašně dlouho. Neexistuje nějaký obecný způsob a postupy, jak testy s doctrine zrychlit?
- David Kudera
- Člen | 455
@fary možná bych řekl, že tam bude spíš něco špatně.. Mě jeden test, kde skutečně pracuji s db, trvá kolem 4 vteřin. V tom čase se generuje komplet nový DI kontejner a ještě ke všemu se mi u toho vytváří kopie databáze, speciálně pro každý test zvlášť. Ze zajímavosti, na čem ty testy spouštíš?
Editoval David Kudera (17. 10. 2015 16:52)
- fary
- Člen | 155
@DavidKudera taky si myslim, ze jsem nejspise na neco zapomnel, ale
nevim, co by to mohlo byt. Popravde ani nevim, co bych mel ukazzat, jestli
konfoguraci, entity nebo neco jineho. Kdyz smazu cache a pustim
orm:schema-tool:create
, tak to trva kolem minuty. Asi uz se z toho
zblaznim. U jinych projektu jsem tohle nemel a popravde tohle je prvni projekt,
kde jsem se rozhodl poradne vzykouset testy. Jedna vec v pripade tohohle
projekty byla ovsem jinak a to, ze jsem si nejprve v MySQL Workbenchi vytvoril
schema databaze a pak jsem z nej vygeneroval entity, ktere jsem si pak
doupravil (z hlediska doplnujicich asociaci atd.). Ale to by byla silenost, aby
to bylo timto. Vysledkem jsou preci stejne entity, akorat jsem je vytvoril
trochu jinym zpusobem. V aplikaci samotne pouzivam MySQL, v testech SQLite
s nastavenim memory: true
. V obou pripadech to trva strasne
dlouho. Nevim, jestli to treba nemuze byt nejakym chybejicim php modulem.
Jinak tedy pouzivam Linix Mint, Apache2, Mysql, PHP 5.5.9, Nette 2.3, Kdyby/Doctrine 2.3, nevim, co jeste by se hodilo zminit.
Editoval fary (17. 10. 2015 17:06)
- David Kudera
- Člen | 455
@fary Hm.. to je divný.. Když jsem používal ještě sqlite na testy, tak to bylo ještě rychlejší, než ty 4s, který mám teď. Schválně jsem zkusil i create schema a u 80 tabulek je to za chvilku (taky tak 4s).
Nemáš třeba možnost zkusit to jinde? Třeba u kolegy? Já se s podobným setkal jen u winů, u mě např. hl. strana trvá 80ms, u kolegyně na win pár vteřin.
Jinak jak dlouho ti trvá klasický načtení stránky po smazání cache? Víš na 100%, že to, co trvá, je práce s db?
- fary
- Člen | 155
Použil jsem tedy BlackfirePHP a vsiml jsem si, ze prakticky 99% vsecho casu zabira nacteni sql souboru s instrukcemi pro vytvoreni tabulek a jejich naplneni. Cely tenhle soubor ma 166 radku. Moc tam toho neni. Zkusil jsem pro to v testech vyuzit Doctrine DBAL, takto:
$em = $container->getByType('Kdyby\Doctrine\EntityManager');
$schemaTool = new SchemaTool($em);
$schemaTool->dropDatabase();
$conn = $em->getConnection();
$stmt = $conn->prepare(file_get_contents(__DIR__ . '/../fixtures/fixtures.sql'));
$stmt->execute();
Porad to trva strasne dlouho.