{"id":37495,"date":"2019-10-31T22:17:57","date_gmt":"2019-10-31T19:17:57","guid":{"rendered":"https:\/\/prohoster.info\/blog\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\/"},"modified":"2019-10-31T22:17:57","modified_gmt":"2019-10-31T19:17:57","slug":"unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","title":{"rendered":"Testele unitare \u00een SGBD \u2013 cum facem noi la Sportmaster, partea \u00eent\u00e2i","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Salut, Habr!<\/p>\n<p>M\u0103 numesc Maxim Ponomarenko \u0219i sunt dezvoltator la Sportmaster. Am 10 ani de experien\u021b\u0103 \u00een domeniul IT. Mi-am \u00eenceput cariera \u00een domeniul test\u0103rii manuale, apoi m-am orientat spre dezvoltarea bazelor de date. \u00cen ultimii 4 ani, acumul\u00e2nd cuno\u0219tin\u021bele ob\u021binute \u00een testare \u0219i dezvoltare, m\u0103 ocup de automatizarea test\u0103rii la nivelul SGBD.<\/p>\n<p>Fac parte din echipa Sportmaster de pu\u021bin peste un an \u0219i la unul dintre proiectele mari m\u0103 ocup de dezvoltarea test\u0103rii automatizate. \u00cen aprilie, eu \u0219i colegii de la Sportmaster Lab am participat la o conferin\u021b\u0103 \u00een Krasnodar, unde prezentarea mea s-a intitulat \u201eUnit-testele \u00een SGBD\u201d. Acum vreau s\u0103 o \u00eemp\u0103rt\u0103\u0219esc cu voi. Vor fi multe texte, a\u0219a c\u0103 am decis s\u0103 \u00eempart prezentarea \u00een dou\u0103 post\u0103ri. \u00cen prima vom discuta despre testele automate \u0219i testarea \u00een general, iar \u00een a doua m\u0103 voi concentra mai \u00een detaliu asupra sistemului nostru de unit-testare \u0219i rezultatele aplic\u0103rii sale.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/464335\/\"><img decoding=\"async\" alt=\"Testele unitare \u00een SGBD \u2013 cum facem noi la Sportmaster, partea \u00eent\u00e2i\" src=\"\/wp-content\/uploads\/2019\/08\/4e521cc85eb3a3806860a40ab2e4050f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>La \u00eenceput, pu\u021bin\u0103 teorie plictisitoare. Ce este testarea automatizat\u0103? Este testarea care se realizeaz\u0103 cu ajutorul mijloacelor software \u0219i, \u00een domeniul IT modern, este din ce \u00een ce mai utilizat\u0103 \u00een dezvoltarea software-ului. Acest lucru se datoreaz\u0103 faptului c\u0103 companiile cresc, sistemele lor informa\u021bionale se dezvolt\u0103 \u0219i, prin urmare, cre\u0219te \u0219i volumul func\u021bionalit\u0103\u021bii care trebuie testat\u0103. A devenit din ce \u00een ce mai costisitor s\u0103 se realizeze testarea manual\u0103.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAm lucrat \u00eentr-o companie mare, ale c\u0103rei versiuni sunt lansate o dat\u0103 la dou\u0103 luni. \u00cen acest timp, se cheltuia o lun\u0103 \u00eentreag\u0103 pentru ca o echip\u0103 de zece testeri s\u0103 verifice manual func\u021bionalitatea. Datorit\u0103 implement\u0103rii automatiz\u0103rii, o echip\u0103 mic\u0103 de dezvoltatori a reu\u0219it s\u0103 reduc\u0103 timpul de testare la 2 s\u0103pt\u0103m\u00e2ni \u00een decurs de un an \u0219i jum\u0103tate. Nu doar c\u0103 am crescut viteza de testare, dar am \u0219i \u00eembun\u0103t\u0103\u021bit calitatea acesteia. Testele automate sunt rulate regulat \u0219i ele execut\u0103 \u00eentotdeauna \u00eentregul set de verific\u0103ri incorporate, ceea ce ne permite s\u0103 excludem factorul uman. <\/p>\n<p>Pentru IT-ul modern este caracteristic faptul c\u0103 de la un dezvoltator se poate cere nu doar s\u0103 scrie codul produsului, ci \u0219i s\u0103 scrie unit-testele care verific\u0103 acest cod. <\/p>\n<p>Dar ce s\u0103 faci dac\u0103 sistemul t\u0103u se bazeaz\u0103 \u00een principal pe logica serverului? Nu exist\u0103 o solu\u021bie universal\u0103 sau cele mai bune practici pe pia\u021b\u0103. \u00cen general, companiile abordeaz\u0103 aceast\u0103 problem\u0103 prin crearea unui sistem de testare personalizat. Un astfel de sistem de testare automatizat personalizat a fost creat \u00een proiectul nostru \u0219i despre el voi vorbi \u00een prezentarea mea. <\/p>\n<p><img decoding=\"async\" alt=\"Testele unitare \u00een SGBD \u2013 cum facem noi la Sportmaster, partea \u00eent\u00e2i\" src=\"\/wp-content\/uploads\/2019\/08\/fee34f7214fb2075ee50fa0f4af14a44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Test\u0103m loialitatea<\/h2>\n<p>\nPentru \u00eenceput, s\u0103 discut\u0103m despre proiectul \u00een care am implementat sistemul de testare automat\u0103. Proiectul nostru este sistemul de loialitate al Sportmaster (de altfel, am scris deja despre el \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/453252\/\">acest articol<\/a><\/noindex>).<\/p>\n<p>Dac\u0103 compania ta este destul de mare, sistemul t\u0103u de loialitate va avea trei propriet\u0103\u021bi standard: <\/p>\n<ul>\n<li>Sistemul t\u0103u va fi foarte solicitat<\/li>\n<li>Sistemul t\u0103u va con\u021bine procese de calcul complexe<\/li>\n<li>Sistemul t\u0103u va fi activ \u00eembun\u0103t\u0103\u021bit. <\/li>\n<\/ul>\n<p>\nS\u0103 le lu\u0103m pe r\u00e2nd\u2026 \u00cen total, dac\u0103 lu\u0103m \u00een considerare toate brandurile Sportmaster, avem peste 1000 de magazine \u00een Rusia, Ucraina, China, Kazahstan \u0219i Belarus. \u00cen aceste magazine se efectueaz\u0103 zilnic aproximativ 300 000 de cump\u0103r\u0103turi. Asta \u00eenseamn\u0103 c\u0103 \u00een fiecare secund\u0103 \u00een sistemul nostru ajung 3-4 bonuri. Evident, sistemul nostru de loialitate este foarte solicitat. \u0218i, deoarece este folosit activ, trebuie s\u0103 oferim cele mai ridicate standarde de calitate, deoarece orice eroare \u00een software se traduce \u00een pierderi financiare, de reputa\u021bie \u0219i altele. <\/p>\n<p>\u00cen acela\u0219i timp, la Sportmaster func\u021bioneaz\u0103 peste o sut\u0103 de promo\u021bii diferite. Promo\u021biile sunt foarte diverse: exist\u0103 promo\u021bii de produse, promo\u021bii \u00een func\u021bie de ziua s\u0103pt\u0103m\u00e2nii, promo\u021bii legate de magazine specifice, promo\u021bii pe suma bonului, promo\u021bii pe num\u0103rul de produse. \u00cen general, este destul de complex. Clien\u021bii au bonusuri, au coduri promo\u021bionale care sunt utilizate la cump\u0103r\u0103turi. Toate acestea conduc la faptul c\u0103 calcularea oric\u0103rei comenzi este o sarcin\u0103 destul de nontrivial\u0103. <\/p>\n<p>Algoritmul care implementeaz\u0103 procesarea comenzilor este cu adev\u0103rat terifiant \u0219i complicat. Orice modificare adus\u0103 acestui algoritm este o chestiune destul de riscant\u0103. Se p\u0103rea c\u0103 cele mai neglijabile modific\u0103ri pot duce la efecte destul de imprevizibile. \u0218i anume, aceste procese de calcul complexe, mai ales cele care implementeaz\u0103 func\u021bionalit\u0103\u021bi critice, sunt cei mai buni candida\u021bi pentru automatizare. Verificarea manual\u0103 a zecilor de cazuri similare consum\u0103 mult timp. Deoarece punctul de intrare \u00een proces r\u0103m\u00e2ne neschimbat, odat\u0103 ce l-am descris, putem genera rapid teste automate \u0219i putem fi siguri de func\u021bionarea func\u021bionalit\u0103\u021bii.<\/p>\n<p>Av\u00e2nd \u00een vedere c\u0103 sistemul nostru este folosit activ, afacerea va dori ceva nou de la voi, s\u0103 \u021bin\u0103 pasul cu vremurile \u0219i s\u0103 fie orientat\u0103 spre client. \u00cen sistemul nostru de loialitate, lans\u0103rile au loc o dat\u0103 la dou\u0103 luni. Asta \u00eenseamn\u0103 c\u0103, la fiecare dou\u0103 luni, trebuie s\u0103 facem un regres complet al \u00eentregului sistem. \u00cen acela\u0219i timp, \u00een mod natural, ca \u00een orice IT modern, dezvoltarea nu ajunge imediat de la dezvoltator la produc\u021bie. Aceasta \u00ee\u0219i face apari\u021bia pe conturul dezvoltatorului, apoi trece succesiv prin medii de testare, de lansare, de acceptare \u0219i abia apoi ajunge \u00een produc\u021bie. Cel pu\u021bin \u00een mediile de testare \u0219i de lansare, trebuie s\u0103 facem un regres complet al \u00eentregului sistem. <\/p>\n<p>Propriet\u0103\u021bile descrise sunt standard pentru aproape orice sistem de loialitate. Haide\u021bi s\u0103 discut\u0103m despre caracteristicile proiectului nostru.<\/p>\n<p>Tehnologic, 90% din logica sistemului nostru de loialitate este server-side \u0219i este implementat\u0103 pe Oracle. Exist\u0103 un client dezvoltat \u00een Delphi, care \u00eendepline\u0219te func\u021bia de administrator ARM. Exist\u0103 servicii web pentru aplica\u021bii externe (de exemplu, site-uri web). Prin urmare, este foarte logic c\u0103, dac\u0103 vom desf\u0103\u0219ura un sistem de testare automat\u0103, o vom face pe Oracle.<\/p>\n<p>Sistemul de loialitate de la Sportmaster exist\u0103 de mai bine de 7 ani \u0219i a fost creat de c\u0103tre dezvoltatori individuali... Num\u0103rul mediu de dezvoltatori pe proiectul nostru \u00een ace\u0219ti 7 ani a fost de 3-4 persoane. \u00cens\u0103, \u00een ultimul an, echipa noastr\u0103 s-a extins considerabil, iar acum la proiect lucreaz\u0103 10 persoane. Asta \u00eenseamn\u0103 c\u0103 \u00een proiect vin oameni care nu sunt familiariza\u021bi cu sarcinile tipice, procesele \u0219i arhitectura. Exist\u0103, astfel, un risc crescut de a dintr-o dat\u0103 s\u0103 actualiz\u0103m gre\u0219eli.<\/p>\n<p>Proiectul se caracterizeaz\u0103 prin lipsa testerilor dedica\u021bi ca unit\u0103\u021bi de munc\u0103. Testarea, f\u0103r\u0103 \u00eendoial\u0103, exist\u0103, dar aceasta este realizat\u0103 de anali\u0219ti, pe l\u00e2ng\u0103 celelalte responsabilit\u0103\u021bi principale: interac\u021biunea cu clien\u021bii de afaceri, utilizatorii, dezvoltarea cerin\u021belor pentru sistem etc... Cu toate c\u0103 testarea se desf\u0103\u0219oar\u0103 la un nivel foarte bun (\u00een special av\u00e2nd \u00een vedere c\u0103 acest raport ar putea ajunge la ochii unor anali\u0219ti), eficien\u021ba specializ\u0103rii \u0219i concentrare pe un singur lucru nu a fost anulat\u0103.<\/p>\n<p>Av\u00e2nd \u00een vedere cele spuse mai sus, pentru a \u00eembun\u0103t\u0103\u021bi calitatea produsului livrat \u0219i a reduce termenii de dezvoltare, ideea de automatizare a test\u0103rii \u00een proiect pare destul de logic\u0103. \u00cen diferite etape ale existen\u021bei sistemului de loialitate, anumi\u021bi dezvoltatori au f\u0103cut eforturi pentru a acoperi codul lor cu teste unitare. Acesta a fost \u00een general un proces destul de fragmentat, unde fiecare a folosit propria arhitectur\u0103 \u0219i metode. Rezultatele finale pentru testele unitare erau comune: testele erau dezvoltate, utilizate pentru o vreme, stocate \u00een depozitul de versiune a fi\u0219ierelor, dar la un moment dat au \u00eencetat s\u0103 mai fie rulate \u0219i au fost uitate. Acest lucru s-a \u00eent\u00e2mplat \u00een special pentru c\u0103 testele erau mai mult legate de un executant specific, nu de proiect.<\/p>\n<h2>utPLSQL vine \u00een ajutor<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Testele unitare \u00een SGBD \u2013 cum facem noi la Sportmaster, partea \u00eent\u00e2i\" src=\"\/wp-content\/uploads\/2019\/08\/f21dfcb085aace687566dc51cb9b5613.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0218ti\u021bi ceva despre Steven Feuerstein? <\/p>\n<p>Acesta este un tip inteligent care \u0219i-a dedicat o mare parte din carier\u0103 lucr\u00e2nd cu Oracle \u0219i PL\/SQL, scriind un num\u0103r considerabil de lucr\u0103ri pe aceast\u0103 tem\u0103. O carte cunoscut\u0103 a sa se intituleaz\u0103 \u201eOracle PL\/SQL. Pentru profesioni\u0219ti\u201d. Dezvoltarea solu\u021biei utPLSQL \u00eei apar\u021bine, sau, a\u0219a cum este prescurtat, Unit Testing framework pentru Oracle PL\/SQL. Solu\u021bia utPLSQL a fost creat\u0103 \u00een 2016, dar lucr\u0103rile asupra ei continu\u0103 activ, fiind lansate versiuni noi. La momentul prezent\u0103rii, ultima versiune este datat\u0103 24 martie 2019.<br \/>\nCe este aceasta? Este un proiect open-source separat. Are c\u00e2teva megabytes, incluz\u00e2nd exemplele \u0219i documenta\u021bia. Se prezint\u0103 fizic ca un schelet separat \u00een baza de date ORACLE, av\u00e2nd un set de pachete \u0219i tabele pentru organizarea test\u0103rii unit\u0103\u021bilor. Instalarea dureaz\u0103 c\u00e2teva secunde. O caracteristic\u0103 distinctiv\u0103 a utPLSQL este simplitatea sa de utilizare. <br \/>\n\u00cen termeni generali, utPLSQL reprezint\u0103 un mecanism pentru desf\u0103\u0219urarea testelor unit\u0103\u021bii, unde un test unit este considerat a fi proceduri de pachet Oracle obi\u0219nuite, organizarea c\u0103rora respect\u0103 anumite reguli. \u00cen plus fa\u021b\u0103 de desf\u0103\u0219urare, utPLSQL stocheaz\u0103 un log al tuturor execu\u021biilor testelor tale \u0219i dispune de un sistem intern de raportare.<\/p>\n<p>Hai s\u0103 vedem un exemplu despre cum arat\u0103 codul unui test unit, implementat conform acestei metodologii.<\/p>\n<p><img decoding=\"async\" alt=\"Testele unitare \u00een SGBD \u2013 cum facem noi la Sportmaster, partea \u00eent\u00e2i\" src=\"\/wp-content\/uploads\/2019\/08\/6fc8cc2d84c6c32a8b5269ebad1d2381.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA\u0219adar, pe ecran este prezentat codul unei specifica\u021bii tipice a unui pachet cu teste unit. Care sunt cerin\u021bele obligatorii? Pachetul trebuie s\u0103 aib\u0103 un prefix \u201eutp_\u201d. Acela\u0219i prefix trebuie s\u0103 aib\u0103 toate procedurile cu teste. \u00cen pachet trebuie s\u0103 existe dou\u0103 proceduri standard: \u201eutp_setup\u201d \u0219i \u201eutp_teardown\u201d. Prima procedur\u0103 este apelat\u0103 la repornirea fiec\u0103rui test unitar, iar a doua \u2014 dup\u0103 execu\u021bie.<\/p>\n<p>\u201eutp_setup\u201d, de regul\u0103, preg\u0103te\u0219te sistemul nostru pentru desf\u0103\u0219urarea testului unitar, de exemplu, cre\u00e2nd datele de test. \u201eutp_teardown\u201d \u2014 dimpotriv\u0103, readuce totul la set\u0103rile ini\u021biale \u0219i reseteaz\u0103 rezultatele execu\u021biei.<\/p>\n<p>Iat\u0103 un exemplu de cel mai simplu test unitar, care verific\u0103 normalizarea num\u0103rului de telefon introdus de client la forma standard pentru sistemul nostru de loialitate. Nu exist\u0103 standarde obligatorii pentru modul \u00een care se scriu procedurile cu teste unitare. De obicei, se efectueaz\u0103 apelul unui anumit metod al sistemului testat, iar rezultatul returnat de aceasta se compar\u0103 cu rezultatul de referin\u021b\u0103. Este important ca compararea rezultatului de referin\u021b\u0103 \u0219i a celui ob\u021binut s\u0103 se realizeze prin metode standard utPLSQL.<\/p>\n<p>\u00centr-un test unitar pot exista un num\u0103r nelimitat de verific\u0103ri. A\u0219a cum se poate vedea din exemplu, facem patru apeluri succesive la metoda testat\u0103 pentru normalizarea num\u0103rului de telefon \u0219i evalu\u0103m rezultatul dup\u0103 fiecare apel. Atunci c\u00e2nd dezvolt\u0103m un test unitar, trebuie s\u0103 \u021binem cont de faptul c\u0103 exist\u0103 verific\u0103ri care nu influen\u021beaz\u0103 sistemul \u00een niciun fel, iar dup\u0103 anumite verific\u0103ri trebuie s\u0103 revenim la starea ini\u021bial\u0103 a sistemului. <br \/>\nDe exemplu, \u00een testul unitar prezentat, pur \u0219i simplu formata\u021bi num\u0103rul de telefon de intrare, ceea ce nu influen\u021beaz\u0103 sistemul de loialitate. <\/p>\n<p>Dar dac\u0103 scriem teste unitare pentru metoda de creare a unui nou client, atunci dup\u0103 fiecare verificare un nou client va fi creat \u00een sistem, ceea ce poate influen\u021ba execu\u021bia ulterioar\u0103 a testului.<\/p>\n<p><img decoding=\"async\" alt=\"Testele unitare \u00een SGBD \u2013 cum facem noi la Sportmaster, partea \u00eent\u00e2i\" src=\"\/wp-content\/uploads\/2019\/08\/7d649b354776c15d8a70a0d9a05363b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIat\u0103 cum se efectueaz\u0103 testele unitare. Sunt acceptate dou\u0103 op\u021biuni de execu\u021bie: rularea tuturor testelor unitare dintr-un anumit pachet sau rularea unui anumit test unitar \u00eentr-un anumit pachet.<\/p>\n<p><img decoding=\"async\" alt=\"Testele unitare \u00een SGBD \u2013 cum facem noi la Sportmaster, partea \u00eent\u00e2i\" src=\"\/wp-content\/uploads\/2019\/08\/46628b60eb0fe0d20df822ddca914947.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIat\u0103 cum arat\u0103 un exemplu de sistem intern de raportare. Pe baza rezultatelor lucr\u0103rii teste unitare, utPLSQL genereaz\u0103 un mic raport. \u00cen acesta vedem rezultatul pentru fiecare verificare specific\u0103 \u0219i rezultatul general al execut\u0103rii testului unitar. <\/p>\n<h2>6 reguli pentru teste automate<\/h2>\n<p>\n\u00cenainte de a \u00eencepe s\u0103 cre\u0103m un nou sistem de testare automat\u0103 a sistemului de loialitate, \u00eempreun\u0103 cu conducerea, am stabilit principiile pe care viitoarele noastre teste automate ar trebui s\u0103 le respecte.<\/p>\n<p><img decoding=\"async\" alt=\"Testele unitare \u00een SGBD \u2013 cum facem noi la Sportmaster, partea \u00eent\u00e2i\" src=\"\/wp-content\/uploads\/2019\/08\/84be59663203abb373e7074b9a6cd4e4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Testele automate trebuie s\u0103 fie eficiente \u0219i s\u0103 aduc\u0103 beneficii. Avem dezvoltatori minuna\u021bi, despre care trebuie neap\u0103rat s\u0103 vorbim, deoarece cineva dintre ei va vedea cu siguran\u021b\u0103 aceast\u0103 prezentare, iar ei scriu cod remarcabil. Dar chiar \u0219i codul lor remarcabil nu este perfect \u0219i a con\u021binut, con\u021bine \u0219i va con\u021bine erori. Testele automate trebuie s\u0103 identifice aceste erori. Dac\u0103 nu o fac, ori scriem teste automate slabe, ori am ajuns \u00eentr-un domeniu mort, care \u00een principiu nu mai este dezvoltat. \u00cen ambele cazuri, facem ceva gre\u0219it \u0219i abordarea noastr\u0103 este pur \u0219i simplu lipsit\u0103 de sens.<\/li>\n<li>Testele automate trebuie utilizate. Nu are rost s\u0103 investe\u0219ti o mul\u021bime de timp \u0219i efort \u00een scrierea unui produs software, s\u0103-l pui \u00eentr-un depozit \u0219i s\u0103-l ui\u021bi. Testele trebuie s\u0103 fie rulate \u0219i s\u0103 fie lansate c\u00e2t mai regulat posibil.<\/li>\n<li>Testele automate trebuie s\u0103 func\u021bioneze stabil. Indiferent de ora din zi, de platforma de testare \u0219i de alte set\u0103ri ale sistemului, rul\u0103rile testelor ar trebui s\u0103 conduc\u0103 la acela\u0219i rezultat. De obicei, acest lucru este asigurat prin faptul c\u0103 testele automate lucreaz\u0103 cu date de testare speciale cu set\u0103rile sistemului fixate.<\/li>\n<li>Testele automate trebuie s\u0103 func\u021bioneze cu o vitez\u0103 acceptabil\u0103 pentru proiectul vostru. Acest timp este determinat individual pentru fiecare sistem. Unii \u00ee\u0219i permit s\u0103 lucreze toat\u0103 ziua, \u00een timp ce pentru al\u021bii este critic s\u0103 se \u00eencadreze \u00een secunde. Ce norme de vitez\u0103 am atins \u00een proiectul nostru, voi povesti pu\u021bin mai t\u00e2rziu.<\/li>\n<li>Dezvoltarea testelor automate trebuie s\u0103 fie flexibil\u0103. Nu este de dorit s\u0103 renun\u021b\u0103m la verificarea unei func\u021bionalit\u0103\u021bi doar pentru c\u0103 nu am f\u0103cut-o \u00eenainte sau din alte motive. utPLSQL nu impune nicio restric\u021bie asupra dezvolt\u0103rii, iar Oracle permite \u00een principiu implementarea celor mai variate lucruri. Majoritatea problemelor au o solu\u021bie, \u00eentrebarea este doar de timp \u0219i eforturile investite.<\/li>\n<li>Dezvoltabilitatea. Avem mai multe platforme unde sunt necesare rul\u0103ri de teste. Pe fiecare dintre platforme, oric\u00e2nd poate fi actualizat un dump cu date. Trebuie s\u0103 gestion\u0103m proiectul cu teste automate astfel \u00eenc\u00e2t s\u0103 putem realiza, f\u0103r\u0103 dureri, instalarea sa complet\u0103 sau par\u021bial\u0103.<\/li>\n<\/ol>\n<p>Iar \u00een al doilea post, \u00een c\u00e2teva zile, voi vorbi despre ce am realizat \u0219i ce rezultate am ob\u021binut.<br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/464335\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 4 \u0433\u043e\u0434\u0430, \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u0438\u0440\u0443\u044f \u0437\u043d\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0421\u0423\u0411\u0414. \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u044f \u0441\u043e\u0441\u0442\u043e\u044e \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u043e\u0434\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28136,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37495","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Unit-\u0442\u0435\u0441\u0442\u044b \u0432 \u0421\u0423\u0411\u0414 \u2014 \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435, \u0447\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:57+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Testele unitare \u00een SGBD \u2014 cum facem acest lucru la Sportmaster, partea \u00eent\u00e2i | ProHoster","description":"Bun\u0103, Habr! Numele meu este Maxim Ponomarenko \u0219i sunt dezvoltator la Sportmaster. Am 10 ani de experien\u021b\u0103 \u00een domeniul IT. Mi-am \u00eenceput cariera \u00een domeniul test\u0103rii manuale, apoi am trecut la dezvoltarea bazelor de date.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Unit-\u0442\u0435\u0441\u0442\u044b \u0432 \u0421\u0423\u0411\u0414 \u2014 \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435, \u0447\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u041f\u043e\u043d\u043e\u043c\u0430\u0440\u0435\u043d\u043a\u043e \u0438 \u044f \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0421\u043f\u043e\u0440\u0442\u043c\u0430\u0441\u0442\u0435\u0440\u0435. \u0418\u043c\u0435\u044e 10-\u043b\u0435\u0442\u043d\u0438\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT-\u0441\u0444\u0435\u0440\u0435. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u043a\u0430\u0440\u044c\u0435\u0440\u0443 \u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:57+00:00","article:modified_time":"2019-10-31T19:17:57+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37495","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:06:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:25:27","updated":"2026-01-23 18:06:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/37495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=37495"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/37495\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/28136"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=37495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=37495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=37495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}