{"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\/et\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","title":{"rendered":"\u00dcksuse testid andmebaasides \u2014 kuidas me seda Sportmasteris teeme, esimene osa","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr!<\/p>\n<p>Minu nimi on Maxim Ponomarenko ja olen arendaja Sportmasteris. Mul on 10-aastane t\u00f6\u00f6kogemus IT-sektoris. Alustasin oma karj\u00e4\u00e4ri k\u00e4sitsi testimise alal, seej\u00e4rel liikusin andmebaaside arendamise suunda. Viimased 4 aastat, kogudes teadmisi, saadud testimises ja arendamises, olen tegelenud andmebaasi tasandi testimise automatiseerimisega.<\/p>\n<p>Olen olnud Sportmasteri meeskonnas veidi \u00fcle aasta ja t\u00f6\u00f6tan \u00fchel suurel projektil automatiseeritud testimise arendamise kallal. Aprillis esindasime Sportmaster Labiga Krasnodaris toimuval konverentsil, kus minu ettekande teema oli \u201eUnit-testid andmebaasides\u201c. N\u00fc\u00fcd tahan seda teiega jagada. Teksti tuleb palju, seega otsustasin ettekande kaheks postituseks jagada. Esimeses r\u00e4\u00e4gime automaattestidest ja testimisest \u00fcldiselt, teises peatun l\u00e4hemalt meie unit-testimise s\u00fcsteemil ja selle rakendamise tulemustel.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/464335\/\"><img decoding=\"async\" alt=\"\u00dcksuse testid andmebaasides \u2014 kuidas me seda Sportmasteris teeme, esimene osa\" src=\"\/wp-content\/uploads\/2019\/08\/4e521cc85eb3a3806860a40ab2e4050f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Alustuseks natuke igavat teooriat. Mis on automaatne testimine? See on testimine, mida teostatakse tarkvaraliste vahenditega ja mida kasutatakse t\u00e4nap\u00e4eva IT-s \u00fcha sagedamini tarkvara arendamisel. See on seotud sellega, et ettev\u00f5tted kasvavad, nende infos\u00fcsteemid laienevad ning seet\u00f5ttu suureneb ka testitava funktsionaalsuse hulk. K\u00e4e peal testimise teostamine muutub aina kallimaks.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nOlen t\u00f6\u00f6tanud \u00fches suurtes ettev\u00f5tetes, mille v\u00e4ljaanded toimuvad iga kahe kuu tagant. Sellega seoses kulus terve kuu k\u00fcmne testija k\u00e4tega funktsionaalsuse kontrollimiseks. T\u00e4nu automatiseerimise rakendamisele suudeti meie v\u00e4ikese arendajate meeskonna abil kahe aasta jooksul testimisaega v\u00e4hendada kahe n\u00e4dalani. Me mitte ainult ei suurendanud testimise kiirust, vaid t\u00f5stsime ka selle kvaliteeti. Automaatseid teste k\u00e4ivitatakse regulaarselt ja need t\u00e4idavad alati kogu etten\u00e4htud kontrollide ts\u00fckli, mis t\u00e4hendab, et me v\u00e4listame inimfaktori. <\/p>\n<p>Kaasaegse IT iseloomustab see, et arendajalt v\u00f5ib oodata mitte ainult toote koodi kirjutamist, vaid ka \u00fcksuste teste, mis seda koodi kontrollivad. <\/p>\n<p>Aga mida teha, kui teie s\u00fcsteem p\u00f5hineb peamiselt serveri loogikal? \u00dchte universaalset lahendust ega parimaid praktikaid turul ei eksisteeri. Tavaliselt lahendavad ettev\u00f5tted selle probleemi, luues omaenda kohandatud testimiss\u00fcsteemi. Just selline kohandatud automatiseeritud testimiss\u00fcsteem loodi meie projektil ja sellest r\u00e4\u00e4kisin ma oma ettekandes. <\/p>\n<p><img decoding=\"async\" alt=\"\u00dcksuse testid andmebaasides \u2014 kuidas me seda Sportmasteris teeme, esimene osa\" src=\"\/wp-content\/uploads\/2019\/08\/fee34f7214fb2075ee50fa0f4af14a44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Testime lojaalsust<\/h2>\n<p>\nAlustame projektist, kus me rakendasime automatiseeritud testimiss\u00fcsteemi. Meie projekt on Spordimeistri lojaalsuss\u00fcsteem (muide, me oleme sellest juba kirjutanud <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/453252\/\">selles postituses<\/a><\/noindex>).<\/p>\n<p>Kui teie ettev\u00f5te on piisavalt suur, siis teie lojaalsuss\u00fcsteem omab kolme standardset omadust: <\/p>\n<ul>\n<li>Teie s\u00fcsteem on suure koormusega<\/li>\n<li>Teie s\u00fcsteem sisaldab keerulisi arvutusprotsesse<\/li>\n<li>Teie s\u00fcsteem on aktiivselt t\u00e4iustatud. <\/li>\n<\/ul>\n<p>\nAlustame algusest... Kokku, kui arvestada k\u00f5iki Sportmasteri br\u00e4nde, on Venemaal, Ukrainas, Hiinas, Kasahstanis ja Valgevenes \u00fcle 1000 poe. Neis poodides toimub igap\u00e4evaselt umbes 300 000 ostu. Seega j\u00f5uab meie s\u00fcsteemi igal sekundil 3-4 kassat\u0161eki. Loomulikult on meie lojaalsuss\u00fcsteem v\u00e4ga koormatud. Ja kuna seda kasutatakse aktiivselt, peame pakkuma k\u00f5ige k\u00f5rgemaid kvaliteedistandardeid, sest iga tarkvaravea korral on suured rahalised, maine ja muud kahjud. <\/p>\n<p>Korraga toimub Sportmasteris \u00fcle saja erineva kampaania. Kampaaniad on v\u00e4ga erinevad: on tootekampaaniaid, n\u00e4dalap\u00e4evadega seotud kampaaniaid, kampaaniaid, mis on seotud kindla poes, ja kampaaniaid kassat\u0161eki summale, samuti kaupade arvu j\u00e4rgi. \u00dches\u00f5naga on see suur v\u00e4ljakutse. Klientidel on boonused ja promokoodid, mida ostude puhul kasutatakse. K\u00f5ik see toob kaasa, et iga tellimuse arvestamine on \u00fcsna keeruline \u00fclesanne. <\/p>\n<p>Tellimusprotsessi t\u00f6\u00f6tlemise algoritm on t\u00f5epoolest kohutav ja keeruline. Mis tahes muudatused selles algoritmis on \u00fcsna riskantsed. Tuli v\u00e4lja, et k\u00f5ige v\u00e4henenud istungite harjumusi v\u00f5ivad p\u00f5hjustada piisavalt ettearvamatud efektid. Just nimelt sellised keerulised arvutusprotsessid, mis rakendavad kriitilist funktsionaalsust \u2014 on parimad kandidaadid automatiseerimiseks. K\u00fcmnete sarnaste juhtumite k\u00e4sitsi kontrollimine on aegan\u00f5udev. Kuna protsessi sisenemispunkt on muutumatu, siis kui \u00fche korra selle kirja paned, saab automaatsete testide kiiret tootmist teha ja funktsionaalsuse toimimises kindel olla.<\/p>\n<p>Kuna meie s\u00fcsteemi kasutatakse aktiivselt, peab \u00e4ri ootama teilt midagi uut, olema ajaga samas tempodes ja kliendikeskne. Meie lojaalsuss\u00fcsteemis ilmuvad uuendused iga kahe kuu j\u00e4rel. See t\u00e4hendab, et iga kahe kuu tagant peame l\u00e4bi viima kogu s\u00fcsteemi p\u00f5hjaliku regressiooni. Samas, nagu igas t\u00e4nap\u00e4evases IT-sektoris, ei j\u00f5ua arendustooted kohe arendajalt tootmisse. Need s\u00fcnnivad arendaja kontuuril, seej\u00e4rel liiguvad j\u00e4rk-j\u00e4rgult l\u00e4bi testimisstandardi, v\u00e4ljaandmis- ja vastuv\u00f5tustandardi ning alles siis j\u00f5uavad tootmisse. Kuni v\u00e4hemalt testimis- ja v\u00e4ljaandmisstandardeil on vajalik kogu s\u00fcsteemi p\u00f5hjalik regressioon. <\/p>\n<p>Kirjeldatud omadused on standardsed peaaegu igas lojaalsuss\u00fcsteemis. R\u00e4\u00e4gime meie projekti erip\u00e4radest.<\/p>\n<p>Meie lojaalsuss\u00fcsteemi tehnoloogia on 90% serverip\u00f5hine ja on rakendatud Oracle'i kaudu. On olemas klient, mis on loodud Delphi-s ja mis t\u00e4idab ARM-administratori funktsiooni. Samuti on v\u00e4lja t\u00f6\u00f6tatud veebiteenused v\u00e4liste rakenduste jaoks (n\u00e4iteks veebisait). Seega on t\u00e4iesti loogiline, et kui me hakkame kujundama automatiseeritud testimise s\u00fcsteemi, siis teeme seda Oracle'il.<\/p>\n<p>Spordimeistris on lojaalsuss\u00fcsteem eksisteerinud \u00fcle 7 aasta ning see loodi \u00fcksikute arendajate poolt... Meie projekti keskmine arendajate arv nende 7 aasta jooksul oli 3-4 inimest. Kuid viimase aasta jooksul on meie meeskond oluliselt suurenenud ja n\u00fc\u00fcd t\u00f6\u00f6tab projekti kallal 10 inimest. See t\u00e4hendab, et projekti tulevad inimesed, kes ei ole tuttavad t\u00fc\u00fcpiliste \u00fclesannete, protsesside ja arhitektuuriga. Ja on suurenenud risk, et j\u00e4tame vead t\u00e4helepanuta.<\/p>\n<p>Projektile on iseloomulik, et eraldi testeijaid pole ametis. Testimine toimub kindlasti, kuid sellega tegelevad anal\u00fc\u00fctikud, lisaks oma muudele p\u00f5hikohustustele: suhtlemine \u00e4riklientidega, kasutajatega, s\u00fcsteemi n\u00f5uete l\u00e4bim\u00f5tlemine jne jne... Kuigi testimist viiakse l\u00e4bi v\u00e4ga kvaliteetselt (eriti on seda oluline mainida, kuna m\u00f5ni anal\u00fc\u00fctik v\u00f5ib selle raporti n\u00e4ha), ei saa keegi eirata spetsialiseerumise ja millegi konkreetsega tegelemise t\u00f5husust.<\/p>\n<p>Kuna k\u00f5ik eelnev t\u00f5statab, tundub testimise automatiseerimise idee projekti kvaliteedi ja arendusaegade t\u00f5stmiseks m\u00f5istlik. Erinevatel s\u00fcsteemi eluetappidel on erinevad arendajad teinud pingutusi oma koodi katmiseks \u00fcksustestidega. See oli \u00fcldiselt \u00fcsna killustatud protsess, kus iga\u00fchel oli oma arhitektuur ja meetodid. \u00dcksustestide korral olid l\u00f5pptulemused \u00fchesugused: testid arendati, kasutati m\u00f5nda aega, s\u00e4ilitati versioonihaldusfailides, kuid \u00fchel hetkel lakkasid nad t\u00f6\u00f6tamast ja unustati. Peamiselt juhtus see seet\u00f5ttu, et testid olid rohkem seotud konkreetse t\u00e4itjaga, mitte projektiga.<\/p>\n<h2>Siin tuleb appi utPLSQL<\/h2>\n<p>\n<img decoding=\"async\" alt=\"\u00dcksuse testid andmebaasides \u2014 kuidas me seda Sportmasteris teeme, esimene osa\" src=\"\/wp-content\/uploads\/2019\/08\/f21dfcb085aace687566dc51cb9b5613.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKas tead midagi Steven Feuersteini kohta? <\/p>\n<p>See on tark mees, kes on suure osa oma karj\u00e4\u00e4rist p\u00fchendanud Oracle'iga ja PL\/SQL-iga t\u00f6\u00f6tamisele, kirjutades sellel teemal piisavalt palju teoseid. \u00dcks tuntud tema raamat on nimega: \u201eOracle PL\/SQL. Professionaalidele\u201d. Just Stephen tegi lahenduse utPLSQL, mis t\u00e4hendab Unit Testing framework for Oracle PL\/SQL. Lahendus utPLSQL loodi 2016. aastal, kuid selle kallal t\u00f6\u00f6tatakse aktiivselt edasi ja uusi versioone v\u00e4ljastatakse pidevalt. Ettekanne toimugu viimane versioon on kuup\u00e4evaga 24. m\u00e4rts 2019.<br \/>\nMis see siis on? See on eraldi avatud l\u00e4htekoodiga projekt. Kaalub paar megabaiti koos n\u00e4idiste ja dokumentatsiooniga. F\u00fc\u00fcsiliselt on see eraldi skeem ORACLE andmebaasis koos pakettide ja tabelitega, mis aitavad korraldada \u00fcksustestimist. Installimine v\u00f5tab paar sekundit. utPLSQL iseloomustav tunnus on kasutusmugavus. <br \/>\nGlobaalselt on utPLSQL mehhanism, mis v\u00f5imaldab \u00fcksusteste k\u00e4ivitada, kus \u00fcksusetest t\u00e4hendab tavalisi Oracle'i pakettprotseduure, mille korraldus vastab teatud reeglitele. Lisaks testide k\u00e4ivitamisele salvestab utPLSQL ka k\u00f5ikide teie testk\u00e4ivituste logi ning sisaldab sisemist raporteerimiss\u00fcsteemi.<\/p>\n<p>Vaatame n\u00e4itena, milline v\u00e4lja n\u00e4eb \u00fcksustesti kood, mis on rakendatud selle meetodi alusel.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcksuse testid andmebaasides \u2014 kuidas me seda Sportmasteris teeme, esimene osa\" src=\"\/wp-content\/uploads\/2019\/08\/6fc8cc2d84c6c32a8b5269ebad1d2381.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNii et ekraanil on n\u00e4ha paketi t\u00fc\u00fcpilise spetsifikatsiooni kood, kus on \u00fcksustestid. Millised on kohustuslikud n\u00f5uded? Paketil peab olema eelh\u00e4\u00e4lestuse \"utp_\" prefiks. Sama prefiks peab olema ka k\u00f5ikidel testide protseduuridel. Paketis peavad olema kaks standardset protseduuri: \"utp_setup\" ja \"utp_teardown\". Esimene protseduur k\u00e4ivitatakse iga \u00fcksustesti taask\u00e4ivitamisel, teine \u2014 p\u00e4rast k\u00e4ivitamist.<\/p>\n<p>\"utp_setup\" valmistab tavaliselt meie s\u00fcsteemi ette \u00fcksustesti k\u00e4ivitamiseks, n\u00e4iteks loob testandmed. \"utp_teardown\" \u2014 vastupidi, tagastab k\u00f5ik algsetesse s\u00e4tetesse ja nullib k\u00e4ivitamise tulemused.<\/p>\n<p>See on n\u00e4ide k\u00f5ige lihtsamast unit-testist, mis kontrollib kliendi sisestatud telefoninumbri normaliseerimist meie lojaalsuss\u00fcsteemis standarditud kujule. \u00dchtegi n\u00f5udlikku standardit, kuidas kirjutada protseduure unit-testide jaoks, ei ole. Reeglina kutsutakse testitavas s\u00fcsteemis v\u00e4lja m\u00f5ni meetod, ja selle meetodi tagastatud tulemust v\u00f5rreldakse viitega. Oluline on, et viidatud tulemuse ja saadud tulemuse v\u00f5rdlemine toimuks standardsete utPLSQL meetodite kaudu.<\/p>\n<p>Unit-testis v\u00f5ib olla suvaline arv kontrollimisi. Nagu n\u00e4ha n\u00e4ites, teeme neli j\u00e4rjestikust kutset testitava meetodi normaliseerimiseks telefoninumbri osas ja p\u00e4rast iga kutset hindame tulemust. Unit-testi arendamisel tuleb arvestada, et on olemas kontrollid, mis ei m\u00f5juta s\u00fcsteemi, kuid p\u00e4rast m\u00f5ningaid tuleb tagastada s\u00fcsteem algsesse olekusse. <br \/>\nN\u00e4iteks antud unit-testis vormistame lihtsalt sisendtelefoninumbri, mis ei m\u00f5juta lojaalsuss\u00fcsteemi. <\/p>\n<p>Ja kui me kirjutame uue kliendi loomise meetodi kohta \u00fcksusteste, siis p\u00e4rast iga kontrollimist luuakse s\u00fcsteemis uus klient, mis v\u00f5ib m\u00f5jutada j\u00e4rgmise testi k\u00e4ivitamist.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcksuse testid andmebaasides \u2014 kuidas me seda Sportmasteris teeme, esimene osa\" src=\"\/wp-content\/uploads\/2019\/08\/7d649b354776c15d8a70a0d9a05363b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNii k\u00e4ivitatakse unit-testid. Lubatud on kaks k\u00e4ivitamise varianti: k\u00f5ikide unit-testide k\u00e4ivitamine konkreetsest pakist v\u00f5i konkreetse unit-testi k\u00e4ivitamine teatud pakis.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcksuse testid andmebaasides \u2014 kuidas me seda Sportmasteris teeme, esimene osa\" src=\"\/wp-content\/uploads\/2019\/08\/46628b60eb0fe0d20df822ddca914947.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNii n\u00e4eb v\u00e4lja n\u00e4ide sisemisest aruandluss\u00fcsteemist. Unit-testi tulemuste p\u00f5hjal koostab utPLSQL v\u00e4ikese aruande. Selles n\u00e4eme tulemusi iga konkreetse kontrolli kohta ja unit-testi \u00fcldist t\u00e4itmise tulemust. <\/p>\n<h2>6 automaatkatsete reeglit<\/h2>\n<p>\nEnne kui alustasime uue automatiseeritud testimiss\u00fcsteemi loomisega lojaalsus s\u00fcsteemis, m\u00e4\u00e4ratlesime koos juhtkonnaga p\u00f5him\u00f5tted, millele meie tulevased automaatkatsetused peaksid vastama.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcksuse testid andmebaasides \u2014 kuidas me seda Sportmasteris teeme, esimene osa\" src=\"\/wp-content\/uploads\/2019\/08\/84be59663203abb373e7074b9a6cd4e4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Autotestid peavad olema t\u00f5husad ja tooma kasu. Meil on toredad arendajad, kelle kohta tuleb kindlasti mainida, et keegi neist n\u00e4eb t\u00f5en\u00e4oliselt seda ettekannet ning nad kirjutavad suurep\u00e4rast koodi. Kuid isegi nende suurep\u00e4rane kood ei ole ideaalne ning sisaldas, sisaldab ja sisaldab tulevikus vigu. Autotestid peavad need vead leidma. Kui see ei ole nii, siis kas me kirjutame halbu autoteste v\u00f5i oleme j\u00f5udnud surnud piirkonda, mis p\u00f5him\u00f5tteliselt ei arenene. M\u00f5lemal juhul teeme me midagi valesti ja meie l\u00e4henemine on lihtsalt m\u00f5ttetu.<\/li>\n<li>Autotestid peavad olema kasutuses. On m\u00f5ttetu kulutada palju aega ja energiat tarkvaratoote kirjutamisele, kokku panna selle hoidla ning unustada. Testid peaksid k\u00e4ima, ja k\u00e4ima v\u00f5imalikult regulaarselt.<\/li>\n<li>Autotestid peavad t\u00f6\u00f6tama stabiilselt. Olenemata \u00f6\u00f6p\u00e4evaajast, k\u00e4ivitusstandist ja muudest s\u00fcsteemi seadistustest, peaksid testide k\u00e4ivitused tooma sama tulemuse. Reeglina tagab seda see, et autotestid t\u00f6\u00f6tavad spetsiaalsete testandmete ja fikseeritud s\u00fcsteemi seadistustega.<\/li>\n<li>Autotestid peaks t\u00f6\u00f6tama teie projekti jaoks sobiva kiiruseni. See aeg m\u00e4\u00e4ratakse igas s\u00fcsteemis individuaalselt. M\u00f5ned saavad endale lubada t\u00f6\u00f6tada terve p\u00e4ev, samas kui teistele on kriitiliselt oluline j\u00e4\u00e4da sekunditesse. Milliseid kiirusnorme oleme oma projektis saavutanud, r\u00e4\u00e4gin ma veidi hiljem.<\/li>\n<li>Autotestide arendamine peab olema paindlik. Funktsionaalsuse testimisest loobumine lihtsalt seet\u00f5ttu, et me pole seda varem teinud v\u00f5i mingi muu veenmise t\u00f5ttu, ei ole soovitatav. utPLSQL ei sea arendusele mingeid piiranguid ning Oracle v\u00f5imaldab p\u00f5him\u00f5tteliselt k\u00f5ige erinevamaid lahendusi. Enamikul \u00fclesannetest on lahendus, k\u00fcsimus on vaid ajas ja investeeritud ressursis.<\/li>\n<li>Rakendatavus. Meil on mitmeid keskkondi, kus testide k\u00e4ivitamine on vajalik. Igas keskkonnas v\u00f5ib iga hetk andmete dumpi uuendada. Projekti autotestidega tuleb juhtida nii, et oleks v\u00f5imalik teostada selle t\u00e4ielikku v\u00f5i osalist paigaldamist valutult.<\/li>\n<\/ol>\n<p>Ja teises postituses paar p\u00e4eva hiljem r\u00e4\u00e4gin, mida me tegime ja milliseid tulemusi saavutasime.<br \/>\n<br \/>Allikas: <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 4.9.10 - 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. \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\" \/>\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\/et\/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) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47\u00dcksuste testimine andmebaasis \u2014 kuidas me seda Spordimeisters teeme, esimene osa | ProHoster","description":"Tere, Habr! Minu nimi on Maksim Ponomarenko ja ma olen arendaja Spordimeistris. Mul on 10-aastane t\u00f6\u00f6kogemus IT-sektoris. Alustasin karj\u00e4\u00e4ri k\u00e4sitsi testimisevaldkonnas, seej\u00e4rel \u00fcleminek andmebaaside arendusele. Viimased 4 aastat, kogudes teadmisi, mis on saadud testimisest ja arendusest, tegelen andmebaaside tasemel testimise automatiseerimisega. Spordimeistri meeskonnas olen olnud \u00fcle aasta.","canonical_url":"https:\/\/prohoster.info\/et\/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":"et_EE","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. \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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/37495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=37495"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/37495\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/28136"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=37495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=37495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=37495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}