{"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\/hr\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","title":{"rendered":"Unit testovi u DBMS-u \u2014 kako to radimo u Sportmasteru, prvi dio","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bok, Habr!<\/p>\n<p>Zovem se Maksim Ponomarenko i ja sam programer u Sportmasteru. Imam deset godina iskustva u IT sektoru. Karijeru sam zapo\u010deo u podru\u010dju ru\u010dnog testiranja, a zatim se preusmjerio na razvoj baza podataka. Posljednje \u010detiri godine, akumuliraju\u0107i znanja ste\u010dena u testiranju i razvoju, bavim se automatizacijom testiranja na razini sustava upravljanja bazama podataka.<\/p>\n<p>U timu Sportmastera sam ne\u0161to vi\u0161e od godine dana i na jednom od ve\u0107ih projekata se bavim razvojem automatiziranog testiranja. U travnju smo s ekipom iz Sportmaster Lab sudjelovali na konferenciji u Krasnodaru, moj izlaganje se zvalo \u201eUnit testovi u sustavu upravljanja bazama podataka\u201c, i sada \u017eelim podijeliti to s vama. Bit \u0107e puno teksta, pa sam odlu\u010dio razbiti izlaganje na dva posta. U prvom \u0107emo razgovarati o automatiziranim testovima i testiranju op\u0107enito, dok \u0107u u drugom detaljnije govoriti o na\u0161em sustavu unit testiranja i rezultatima njegove primjene.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/464335\/\"><img decoding=\"async\" alt=\"Unit testovi u DBMS-u \u2014 kako to radimo u Sportmasteru, prvi dio\" src=\"\/wp-content\/uploads\/2019\/08\/4e521cc85eb3a3806860a40ab2e4050f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Na po\u010detku malo dosadne teorije. \u0160to je automatizirano testiranje? To je testiranje koje provode softverski alati, a u modernom IT-u se sve vi\u0161e i vi\u0161e koristi pri razvoju softvera. To je povezano s time da tvrtke rastu, rastu njihovi informacijski sustavi i sukladno tome raste i koli\u010dina funkcionalnosti koju je potrebno testirati. Provesti ru\u010dno testiranje postaje sve skuplje i skuplje.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nRadio sam u jednoj velikoj tvrtki \u010diji se izdanja objavljuju svaka dva mjeseca. Pri tome se cijeli mjesec tro\u0161i na to da desetak testera ru\u010dno provjeravaju funkcionalnost. Zahvaljuju\u0107i implementaciji automatizacije, mala ekipa programera uspjela je tijekom godinu i pol dana smanjiti vrijeme testiranja na 2 tjedna. Ne samo da smo pove\u0107ali brzinu testiranja, nego i pobolj\u0161ali njegovu kvalitetu. Automatizirani testovi se redovito pokre\u0107u i uvijek izvr\u0161avaju cijeli set ugra\u0111enih provjera, \u0161to zna\u010di da isklju\u010dujemo ljudski faktor. <\/p>\n<p>Za moderni IT karakteristi\u010dno je to da od programera mo\u017ee biti zahtijevano ne samo pisanje koda proizvoda, nego i pisanje unit testova koji provjeravaju taj kod. <\/p>\n<p>\u0160to u\u010diniti ako se va\u0161 sustav prvenstveno oslanja na serversku logiku? Na tr\u017ei\u0161tu ne postoji univerzalno rje\u0161enje niti najbolje prakse. Obi\u010dno, tvrtke rje\u0161avaju ovaj problem stvaranjem vlastitog sustava za testiranje. Takav vlastiti sustav automatiziranog testiranja razvijen je u na\u0161em projektu, a o njemu \u0107u govoriti u svom izlaganju. <\/p>\n<p><img decoding=\"async\" alt=\"Unit testovi u DBMS-u \u2014 kako to radimo u Sportmasteru, prvi dio\" src=\"\/wp-content\/uploads\/2019\/08\/fee34f7214fb2075ee50fa0f4af14a44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Testiranje lojalnosti<\/h2>\n<p>\nNajprije \u0107emo razgovarati o projektu u kojem smo postavili sustav automatiziranog testiranja. Na\u0161 projekt je sustav lojalnosti Sportmastera (usput, ve\u0107 smo pisali o njemu u <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/453252\/\">ovom postu<\/a><\/noindex>).<\/p>\n<p>Ako je va\u0161a tvrtka dovoljno velika, va\u0161 sustav lojalnosti imat \u0107e tri standardne osobine: <\/p>\n<ul>\n<li>Va\u0161 sustav bit \u0107e visoko optere\u0107en<\/li>\n<li>Va\u0161 sustav \u0107e sadr\u017eavati slo\u017eene ra\u010dunske procese<\/li>\n<li>Va\u0161 sustav \u0107e se aktivno nadogra\u0111ivati. <\/li>\n<\/ul>\n<p>\nIdemo redom\u2026 Ukupno, ako gledamo sve marke Sportmastera, imamo vi\u0161e od 1000 trgovina na podru\u010dju Rusije, Ukrajine, Kine, Kazahstana i Bjelorusije. U tim trgovinama svaki dan se odvija oko 300.000 kupnji. To zna\u010di da u na\u0161 sustav svake sekunde stigne 3-4 ra\u010duna. Naravno, na\u0161 sustav lojalnosti je visoko optere\u0107en. A kako se aktivno koristi, moramo osigurati najvi\u0161e standarde njegove kvalitete, jer svaka gre\u0161ka u softveru mo\u017ee dovesti do velikih financijskih, reputacijskih i drugih gubitaka. <\/p>\n<p>Istovremeno u Sportmasteru radi vi\u0161e od stotinu razli\u010ditih akcija. Akcije su raznolike: postoje akcije na proizvode, one vezane uz dan u tjednu, akcije povezane s odre\u0111enom trgovinom, akcije na iznos ra\u010duna, hajde i na koli\u010dinu proizvoda. Ukratko, kompleksno. Klijenti imaju bonuse, postoje promotivni kodovi koji se koriste prilikom kupnje. Sve to dovodi do toga da obra\u010dun bilo kojeg narud\u017ebe nije trivijalan zadatak. <\/p>\n<p>Algoritam koji provodi obradu narud\u017ebe je doista stra\u0161an i slo\u017een. Bilo kakve izmjene u tom algoritmu - prili\u010dno su rizi\u010dne. \u010cak i naizgled neznatne promjene mogu dovesti do prili\u010dno nepredvidivih efekata. Uvijek su takvi slo\u017eeni ra\u010dunalni procesi, pogotovo oni koji ostvaruju kriti\u010dnu funkcionalnost - najbolji kandidati za automatizaciju. Provjeravanje stotina sli\u010dnih slu\u010dajeva ru\u010dno oduzima previ\u0161e vremena. Kako je ulazna to\u010dka u proces nepromijenjena, jednom kada je opi\u0161emo, mo\u017eemo relativno brzo generirati automatizirane testove i biti sigurni u ispravnost funkcionalnosti.<\/p>\n<p>S obzirom na to da na\u0161 sustav aktivno koriste korisnici, poslovanje \u0107e od vas o\u010dekivati ne\u0161to novo, da ostanete u toku s vremenom i budete orijentirani na klijente. U na\u0161em sustavu lojalnosti, izdanja izlaze svaka dva mjeseca. To zna\u010di da svaka dva mjeseca trebamo provesti potpunu regresiju cijelog sustava. Pritom, kao i u svakoj modernoj IT okolini, razvoj ne ide odmah od programera do produkcije. On zapo\u010dinje u razvojnim okru\u017eenjima, potom prolazi kroz testne, izdava\u010dke i prihvatne faze, a tek potom zavr\u0161ava u produkciji. Na najmanje testnim i izdava\u010dkim okru\u017eenjima trebamo provesti potpunu regresiju cijelog sustava. <\/p>\n<p>Opisane karakteristike su standardne za prakti\u010dki svaki sustav lojalnosti. Razgovarajmo o specifi\u010dnostima na\u0161eg projekta.<\/p>\n<p>Tehnolo\u0161ki, 90% logike na\u0161eg sustava lojalnosti je poslu\u017eiteljska i implementirana je na Oracleu. Postoji klijent razvijen u Delphiju koji obavlja funkciju APM-administratora. Postavljeni su web servisi za vanjske aplikacije (na primjer, web stranica). Stoga je prili\u010dno logi\u010dno da ako budemo razvijali sustav automatiziranog testiranja, to radimo na Oracleu.<\/p>\n<p>Sistem lojalnosti u Sportmasteru postoji vi\u0161e od 7 godina i razvijan je od strane pojedina\u010dnih programera... Prosje\u010dan broj programera na na\u0161em projektu tijekom tih 7 godina bio je 3-4 osobe. No, u posljednjoj godini na\u0161 tim se zna\u010dajno pove\u0107ao, i sada na projektu radi 10 ljudi. To zna\u010di da u projekt dolaze ljudi koji nisu upoznati s tipi\u010dnim zadacima, procesima i arhitekturom. Tako\u0111er postoji pove\u0107ani rizik da \u0107emo propu\u0161tati gre\u0161ke.<\/p>\n<p>Za projekt je karakteristi\u010dno da nema odvojenih testera kao stalnih zaposlenika. Testiranje, naravno, postoji, ali se njime bave analiti\u010dari, uz svoje druge osnovne obaveze: komunikaciju s poslovnim naru\u010diteljima, korisnicima, razradu zahtjeva za sustav i sli\u010dno... Iako se testiranje provodi vrlo kvalitetno (posebno je va\u017eno napomenuti, jer bi neki od analiti\u010dara mogli pro\u010ditati ovaj izvje\u0161taj), u\u010dinkovitost specijalizacije i koncentracije na ne\u010demu jednom nikako nije mogu\u0107e zanemariti.<\/p>\n<p>Uzimaju\u0107i u obzir sve prethodno navedeno, za pobolj\u0161anje kvalitete isporu\u010denog proizvoda i smanjenje vremena razvoja, ideja o automatizaciji testiranja u projektu \u010dini se vrlo logi\u010dnom. Tijekom razli\u010ditih faza postojanja sustava lojalnosti pojedini programeri su se trudili da pokriju svoj kod jedini\u010dnim testovima. To je u cjelini bio prili\u010dno raspr\u0161en proces, gdje je svaki koristio svoju arhitekturu i metode. Zajedni\u010dki za jedini\u010dne testove bili su kona\u010dni rezultati: testovi su razvijeni, neko vrijeme kori\u0161teni, pohranjeni u verzionom spremi\u0161tu datoteka, ali su u nekom trenutku prestali s izvo\u0111enjem i zaboravljeni. Prije svega, to se doga\u0111alo zato \u0161to su testovi bili vi\u0161e vezani uz konkretnog izvo\u0111a\u010da, a ne uz projekt.<\/p>\n<h2>U pomo\u0107 dolazi utPLSQL<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Unit testovi u DBMS-u \u2014 kako to radimo u Sportmasteru, prvi dio\" src=\"\/wp-content\/uploads\/2019\/08\/f21dfcb085aace687566dc51cb9b5613.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZnate li ne\u0161to o Stephen Fehrstein? <\/p>\n<p>To je pametan tip koji je veliki deo svoje karijere posvetio radu sa Oracle-om i PL\/SQL-om, napisao je prili\u010dno mnogo radova na tu temu. Njegova poznata knjiga nosi naziv: \u201eOracle PL\/SQL. Za profesionalce\u201c. Upravo je Steven razvio re\u0161enje utPLSQL, ili, kako se to dekodira, Unit Testing framework for Oracle PL\/SQL. Re\u0161enje utPLSQL stvoreno je 2016. godine, ali se na njemu i dalje aktivno radi i izdaju nove verzije. Na dan predavanja, poslednja verzija je izdata 24. marta 2019. godine.<br \/>\n\u0160ta je to? To je poseban open-source projekat. Te\u017ei nekoliko megabajta, uklju\u010duju\u0107i primere i dokumentaciju. Fizi\u010dki predstavlja posebnu \u0161emu u ORACLE bazi podataka sa setom paketa i tabela za organizaciju unit-testiranja. Instalacija traje nekoliko sekundi. Odlike utPLSQL-a su jednostavnost kori\u0161\u0107enja. <br \/>\nU globalu, utPLSQL predstavlja mehanizam za pokretanje unit-testova, gde se pod unit-testom smatraju obi\u010dne Oracle paketne procedure, \u010dija organizacija odgovara odre\u0111enim pravilima. Pored pokretanja, utPLSQL \u010duva log svih va\u0161ih testnih pokretanja, kao i unutra\u0161nji sistem izve\u0161tavanja.<\/p>\n<p>Hajde da pogledamo primer kako izgleda kod unit-testa, realizovan prema ovoj metodologiji.<\/p>\n<p><img decoding=\"async\" alt=\"Unit testovi u DBMS-u \u2014 kako to radimo u Sportmasteru, prvi dio\" src=\"\/wp-content\/uploads\/2019\/08\/6fc8cc2d84c6c32a8b5269ebad1d2381.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDakle, na ekranu je prikazan kod tipi\u010dne specifikacije paketa sa unit-testovima. Koji su obavezni zahtevi? Paket treba da ima prefiks \u201eutp_\u201c. Iste prefikse moraju imati sve procedure sa testovima. U paketu moraju postojati dve standardne procedure: \u201eutp_setup\u201c i \u201eutp_teardown\u201c. Prva procedura se poziva pre pokretanja svakog unit-testa, dok se druga poziva nakon pokretanja.<\/p>\n<p>\u201eutp_setup\u201c obi\u010dno priprema na\u0161 sistem za pokretanje unit-testa, na primer, kreira testne podatke. \u201eutp_teardown\u201c \u2013 naprotiv, vra\u0107a sve na izvorne postavke i bri\u0161e rezultate pokretanja.<\/p>\n<p>Evo primjera najjednostavnije unit-test procedure koja provjerava normalizaciju unesenog broja telefona klijenta u standardni oblik za na\u0161 sustav lojalnosti. Ne postoje obavezni standardi za pisanje procedura s unit-testovima. Obi\u010dno se poziva neka metoda testiranog sustava, a rezultat koji ta metoda vrati uspore\u0111uje se s uzorakom. Va\u017eno je da se usporedba uzornog rezultata i dobivenog provodi putem standardnih utPLSQL metoda.<\/p>\n<p>U unit-testu mo\u017ee biti bilo koji broj provjera. Kao \u0161to se mo\u017ee vidjeti iz primjera, izvodimo \u010detiri uzastopna poziva testirane metode za normalizaciju broja telefona i nakon svakog poziva ocjenjujemo rezultat. Tijekom razvoja unit-testa treba imati na umu da postoje provjere koje ne utje\u010du na sustav, dok se nakon nekih mora vra\u0107ati na po\u010detno stanje sustava. <br \/>\nNa primjer, u prikazanom unit-testu jednostavno formatiramo ulazni broj telefona, \u0161to ne utje\u010de na sustav lojalnosti. <\/p>\n<p>A ako pi\u0161emo unit-teste za metodu stvaranja novog klijenta, nakon svake provjere u sustavu \u0107e biti stvoren novi klijent, \u0161to mo\u017ee utjecati na kasnije izvo\u0111enje testa.<\/p>\n<p><img decoding=\"async\" alt=\"Unit testovi u DBMS-u \u2014 kako to radimo u Sportmasteru, prvi dio\" src=\"\/wp-content\/uploads\/2019\/08\/7d649b354776c15d8a70a0d9a05363b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTako se pokre\u0107u unit-testovi. Dopu\u0161tena su dva na\u010dina pokretanja: pokretanje svih unit-testova iz odre\u0111enog paketa ili pokretanje odre\u0111enog unit-testa unutar odre\u0111enog paketa.<\/p>\n<p><img decoding=\"async\" alt=\"Unit testovi u DBMS-u \u2014 kako to radimo u Sportmasteru, prvi dio\" src=\"\/wp-content\/uploads\/2019\/08\/46628b60eb0fe0d20df822ddca914947.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOvo je primjer unutarnjeg sustava izvje\u0161tavanja. Na temelju rezultata rada unit-testa utPLSQL stvara kratki izvje\u0161taj. U njemu vidimo rezultate svake pojedina\u010dne provjere i ukupni rezultat izvr\u0161enja unit-testa. <\/p>\n<h2>6 pravila automatiziranih testova<\/h2>\n<p>\nPrije nego \u0161to zapo\u010dnemo s izradom novog sustava automatiziranog testiranja sustava lojalnosti, u suradnji s vodstvom smo definirali na\u010dela kojima na\u0161i budu\u0107i automatizirani testovi trebaju odgovarati.<\/p>\n<p><img decoding=\"async\" alt=\"Unit testovi u DBMS-u \u2014 kako to radimo u Sportmasteru, prvi dio\" src=\"\/wp-content\/uploads\/2019\/08\/84be59663203abb373e7074b9a6cd4e4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Automatizirani testovi moraju biti u\u010dinkoviti i donijeti koristi. Imamo sjajne programere o kojima treba re\u0107i, jer \u0107e netko od njih sigurno vidjeti ovu prezentaciju, a oni pi\u0161u fantasti\u010dan kod. No \u010dak ni njihov fantasti\u010dan kod nije savr\u0161en i sadr\u017eava, sadr\u017ei i sadr\u017eavat \u0107e gre\u0161ke. Automatizirani testovi moraju te gre\u0161ke otkrivati. Ako to nije slu\u010daj, ili pi\u0161emo lo\u0161e automatizirane testove, ili smo do\u0161li u mrtvu to\u010dku koja se uop\u0107e ne osve\u017eava. U oba slu\u010daja ne\u0161to radimo pogre\u0161no i na\u0161 pristup jednostavno je besmislen.<\/li>\n<li>Automatizirani testovi moraju se koristiti. Besmisleno je tro\u0161iti hrpu vremena i truda na pisanje softverskog proizvoda, pohranjivanje u repozitorij i zaboravljanje na njega. Testovi moraju biti pokrenuti, i to \u0161to je mogu\u0107e redovitije.<\/li>\n<li>Automatizirani testovi moraju raditi stabilno. Bez obzira na doba dana, okru\u017eenje za pokretanje i ostale postavke sustava, pokretanje testova treba dati isti rezultat. Obi\u010dno to osigurava da automatizirani testovi rade s posebnim testnim podacima uz fiksne postavke sustava.<\/li>\n<li>Automatizirani testovi trebaju raditi s prihvatljivom brzinom za va\u0161 projekt. Ova brzina odre\u0111ena je individualno za svaki sustav. Netko mo\u017ee raditi cijeli dan, dok je za nekoga klju\u010dno zavr\u0161iti unutar sekundi. O kakvim smo brzinama postigli u na\u0161em projektu, re\u0107i \u0107u malo kasnije.<\/li>\n<li>Razvoj automatiziranih testova mora biti fleksibilan. Ne preporu\u010duje se odustajanje od provjere bilo koje funkcionalnosti samo zato \u0161to to do sada nismo radili ili iz nekih drugih uvjerenja. utPLSQL ne name\u0107e nikakva ograni\u010denja na razvoj, a Oracle u principu omogu\u0107uje implementaciju raznih stvari. Ve\u0107ina zadataka ima rje\u0161enje, samo je pitanje vremena i ulo\u017eenog truda.<\/li>\n<li>Implementacija. Imamo nekoliko okru\u017eenja gdje je potrebno pokretanje testova. U svakom od okru\u017eenja mo\u017ee u bilo kojem trenutku biti a\u017eurirana baza podataka. Projekt s automatiziranim testovima treba se voditi na na\u010din koji omogu\u0107ava bezbolnu potpunu ili djelomi\u010dnu instalaciju.<\/li>\n<\/ol>\n<p>U drugom postu za nekoliko dana re\u0107i \u0107u \u0161to smo napravili i kakve smo rezultate postigli.<br \/>\n<br \/>Izvor: <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.4 - 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\/hr\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Unit testovi u DBMS-u \u2014 kako to radimo u Sportmasteru, prvi deo | ProHoster","description":"Pozdrav, Habr! Zovem se Maksim Ponomarenko i ja sam razvojni in\u017eenjer u Sportmasteru. Imam deset godina iskustva u IT sektoru. Po\u010deo sam karijeru u podru\u010dju ru\u010dnog testiranja, a zatim pre\u0161ao na razvoj baza podataka.","canonical_url":"https:\/\/prohoster.info\/hr\/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":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/37495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=37495"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/37495\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/28136"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=37495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=37495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=37495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}