{"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\/it\/blog\/administrirovanie\/unit-testy-v-subd-kak-my-delaem-eto-v-sportmastere-chast-pervaya","title":{"rendered":"Unit test in DBMS \u2013 come lo facciamo in Sportmaster, parte prima","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, Habr!<\/p>\n<p>Mi chiamo Maxim Ponomarenko e sono un sviluppatore di Sportmaster. Ho un'esperienza di 10 anni nel settore IT. Ho iniziato la mia carriera nel campo del testing manuale, per poi passare allo sviluppo di database. Negli ultimi 4 anni, accumulando conoscenze acquisite nel testing e nello sviluppo, mi occupo di automazione dei test a livello di DBMS.<\/p>\n<p>Faccio parte del team di Sportmaster da poco pi\u00f9 di un anno e in uno dei grandi progetti mi occupo dello sviluppo di test automatizzati. In aprile, insieme ai ragazzi di Sportmaster Lab, abbiamo partecipato a una conferenza a Krasnodar, il mio intervento si intitolava \u00abUnit test nel DBMS\u00bb, e ora voglio condividerlo con voi. Ci sar\u00e0 molto testo, quindi ho deciso di suddividere l'intervento in due post. Nel primo parleremo di test automatici e testing in generale, mentre nel secondo mi soffermer\u00f2 di pi\u00f9 sul nostro sistema di unit testing e sui risultati che ha portato.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/464335\/\"><img decoding=\"async\" alt=\"Unit test in DBMS \u2013 come lo facciamo in Sportmaster, parte prima\" src=\"\/wp-content\/uploads\/2019\/08\/4e521cc85eb3a3806860a40ab2e4050f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Iniziamo con un po' di teoria noiosa. Che cos'\u00e8 il testing automatico? \u00c8 un tipo di test condotto tramite strumenti software, e nel moderno IT viene sempre pi\u00f9 utilizzato durante lo sviluppo software. Questo accade perch\u00e9 le aziende crescono, le loro sistemi informatici si espandono e, di conseguenza, aumenta anche la quantit\u00e0 di funzionalit\u00e0 da testare. Effettuare test manuali sta diventando sempre pi\u00f9 costoso.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nHo lavorato in una grande azienda i cui rilasci avvengono ogni due mesi. Durante questo tempo, un mese intero veniva speso affinch\u00e9 una decina di tester controllasse manualmente le funzionalit\u00e0. Grazie all'implementazione dell'automazione, un piccolo team di sviluppatori \u00e8 riuscito, in un anno e mezzo, a ridurre il tempo di testing a 2 settimane. Non solo abbiamo aumentato la velocit\u00e0 del testing, ma ne abbiamo anche migliorato la qualit\u00e0. I test automatici vengono eseguiti regolarmente e coprono sempre l'intero corso di controlli predefiniti, escludendo cos\u00ec il fattore umano. <\/p>\n<p>Nel mondo IT moderno, \u00e8 comune che gli sviluppatori siano chiamati non solo a scrivere il codice del prodotto, ma anche a realizzare test unitari che lo verifichino. <\/p>\n<p>Ma cosa fare se il tuo sistema si basa principalmente sulla logica server-side? Non esiste una soluzione universale o best practices consolidate sul mercato. Di solito, le aziende affrontano questo problema creando un proprio sistema di testing su misura. In questo contesto, \u00e8 stato sviluppato un sistema di test automatizzato nel nostro progetto, di cui parler\u00f2 nella mia presentazione. <\/p>\n<p><img decoding=\"async\" alt=\"Unit test in DBMS \u2013 come lo facciamo in Sportmaster, parte prima\" src=\"\/wp-content\/uploads\/2019\/08\/fee34f7214fb2075ee50fa0f4af14a44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Testiamo la fedelt\u00e0<\/h2>\n<p>\nPer iniziare, parliamo del progetto in cui abbiamo implementato il sistema di test automatizzati. Il nostro progetto \u00e8 il sistema di fidelizzazione di Sportmaster (tra l'altro, abbiamo gi\u00e0 scritto di questo nel <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/453252\/\">questo post<\/a><\/noindex>).<\/p>\n<p>Se la tua azienda \u00e8 abbastanza grande, il tuo sistema di fidelizzazione avr\u00e0 tre caratteristiche standard: <\/p>\n<ul>\n<li>Il tuo sistema sar\u00e0 ad alta capacit\u00e0 di carico<\/li>\n<li>Il tuo sistema conterr\u00e0 processi computazionali complessi<\/li>\n<li>Il tuo sistema sar\u00e0 attivamente aggiornato. <\/li>\n<\/ul>\n<p>\nAndiamo con ordine... In totale, considerando tutti i marchi di Sportmaster, abbiamo oltre 1000 negozi in Russia, Ucraina, Cina, Kazakistan e Bielorussia. In questi negozi si effettuano circa 300.000 acquisti ogni giorno. Questo significa che ogni secondo nel nostro sistema arrivano 3-4 scontrini. Naturalmente, il nostro sistema di fidelizzazione \u00e8 molto caricato. E poich\u00e9 viene utilizzato attivamente, dobbiamo fornire i pi\u00f9 alti standard di qualit\u00e0, poich\u00e9 qualsiasi errore nel software comporta grandi perdite economiche, di reputazione e altro. <\/p>\n<p>Contemporaneamente, in Sportmaster \u00e8 attivo oltre un centinaio di diverse promozioni. Le promozioni sono variegate: ci sono quelle sui prodotti, quelle legate ai giorni della settimana, promozioni specifiche per negozi, sconti sull'importo dello scontrino e promozioni sul numero di prodotti. Insomma, non \u00e8 da poco. I clienti hanno dei bonus e codici promozionali che possono utilizzare durante gli acquisti. Tutto ci\u00f2 porta al fatto che il calcolo di qualsiasi ordine \u00e8 un compito piuttosto complesso. <\/p>\n<p>L'algoritmo che gestisce il processo di ordinazione \u00e8 davvero complesso e difficile da comprendere. Qualsiasi modifica apportata a questo algoritmo \u00e8 un'operazione rischiosa. Anche le modifiche che sembrano minime possono generare effetti decisamente imprevedibili. E proprio per queste ragioni, i processi computazionali complessi, specialmente quelli che implementano funzionalit\u00e0 critiche, sono i migliori candidati per essere automatizzati. Controllare manualmente decine di casi simili richiede troppo tempo. E dato che il punto di accesso al processo rimane invariato, descrivendolo una sola volta, \u00e8 possibile generare rapidamente test automatici e avere la certezza che la funzionalit\u00e0 funzioni correttamente.<\/p>\n<p>Poich\u00e9 il nostro sistema \u00e8 utilizzato attivamente, le aziende si aspettano da voi qualcosa di nuovo, vogliono essere al passo con i tempi e orientare il servizio verso il cliente. Nel nostro sistema di fedelt\u00e0, le versioni vengono rilasciate ogni due mesi. Questo significa che ogni due mesi dobbiamo eseguire un regressivo completo dell'intero sistema. Naturalmente, come in qualsiasi moderno IT, lo sviluppo non passa direttamente dagli sviluppatori alla produzione. Inizia nel contesto dello sviluppatore, poi passa gradualmente attraverso gli ambienti di test, rilascio, accettazione e solo allora arriva in produzione. Almeno negli ambienti di test e di rilascio dobbiamo eseguire un regressivo completo dell'intero sistema. <\/p>\n<p>Le propriet\u00e0 descritte sono standard per quasi tutti i sistemi di fedelt\u00e0. Parliamo ora delle particolarit\u00e0 del nostro progetto.<\/p>\n<p>La logica tecnologica del nostro sistema di fidelizzazione \u00e8 per il 90% server-based e implementata su Oracle. Esiste un client basato su Delphi che funge da ARM-administratore. Sono stati implementati web service per le applicazioni esterne (come il sito web). \u00c8 quindi logico che, se decidiamo di attivare un sistema di testing automatizzato, lo faremo su Oracle.<\/p>\n<p>Il sistema di fidelizzazione di Sportmaster esiste da oltre 7 anni ed \u00e8 stato creato da sviluppatori singoli\u2026 Il numero medio di sviluppatori nel nostro progetto durante questi 7 anni \u00e8 stato di 3-4 persone. Ma nell'ultimo anno la nostra squadra \u00e8 cresciuta notevolmente, e ora sul progetto lavorano 10 persone. Questo significa che nel progetto arrivano persone che non sono familiari con le attivit\u00e0 standard, i processi e l'architettura. E c'\u00e8 un rischio maggiore che potremmo trascurare errori.<\/p>\n<p>Il progetto \u00e8 caratterizzato dall'assenza di tester dedicati come unit\u00e0 fisse. Certamente ci sono attivit\u00e0 di testing, ma sono svolte dagli analisti, oltre ai loro altri principali compiti: comunicazione con i business client, utenti, elaborazione dei requisiti del sistema, ecc. Nonostante il testing venga eseguito con grande qualit\u00e0 (\u00e8 opportuno sottolinearlo, poich\u00e9 potrebbe capitare che uno degli analisti legga questo report), l'efficacia della specializzazione e la concentrazione su un'unica area non pu\u00f2 essere ignorata.<\/p>\n<p>Tenendo conto di quanto sopra, per migliorare la qualit\u00e0 del prodotto offerto e ridurre i tempi di sviluppo, l'idea di automatizzare i test nel progetto appare piuttosto logica. In diverse fasi dell'esistenza del sistema di fidelizzazione, singoli sviluppatori hanno fatto sforzi per coprire il proprio codice con test unitari. Questo \u00e8 stato in generale un processo abbastanza frammentato, dove ognuno utilizzava la propria architettura e i propri metodi. I risultati comuni per i test unitari erano: i test venivano sviluppati, utilizzati per un certo periodo, archiviati in un repository di versioni, ma a un certo punto smettevano di essere eseguiti e venivano dimenticati. Questo accadeva principalmente perch\u00e9 i test erano pi\u00f9 legati a un singolo esecutore piuttosto che al progetto.<\/p>\n<h2>Aggiunge un supporto utPLSQL<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Unit test in DBMS \u2013 come lo facciamo in Sportmaster, parte prima\" src=\"\/wp-content\/uploads\/2019\/08\/f21dfcb085aace687566dc51cb9b5613.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSai qualcosa su Steven Feuerstein? <\/p>\n<p>Questo \u00e8 un tizio intelligente che ha dedicato gran parte della sua carriera a lavorare con Oracle e PL\/SQL, scrivendo un numero considerevole di trattati su questo argomento. Uno dei suoi libri pi\u00f9 noti si intitola \"Oracle PL\/SQL. Per professionisti\". A Stephen si deve lo sviluppo della soluzione utPLSQL, ovvero il framework di test unitari per Oracle PL\/SQL. La soluzione utPLSQL \u00e8 stata creata nel 2016, ma \u00e8 continua ad essere attivamente sviluppata e vengono rilasciate nuove versioni. Al momento della presentazione, l'ultima versione \u00e8 datata 24 marzo 2019.<br \/>\nChe cos'\u00e8? \u00c8 un progetto open source separato. Occupa un paio di megabyte, compresi esempi e documentazione. Rappresenta fisicamente uno schema separato nel database ORACLE con un insieme di pacchetti e tabelle per l'organizzazione dei test unitari. L'installazione richiede solo pochi secondi. Una caratteristica distintiva di utPLSQL \u00e8 la sua semplicit\u00e0 d'uso. <br \/>\nA livello globale, utPLSQL \u00e8 un meccanismo per l'esecuzione di unit test, dove per unit test si intendono normali procedure di pacchetti Oracle, la cui organizzazione segue alcune regole. Oltre all'esecuzione, utPLSQL memorizza un log di tutti i tuoi esecuzioni di test e dispone di un sistema di reporting interno.<\/p>\n<p>Vediamo un esempio di come appare il codice di un unit test implementato secondo questa metodologia.<\/p>\n<p><img decoding=\"async\" alt=\"Unit test in DBMS \u2013 come lo facciamo in Sportmaster, parte prima\" src=\"\/wp-content\/uploads\/2019\/08\/6fc8cc2d84c6c32a8b5269ebad1d2381.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuindi, sullo schermo \u00e8 mostrato il codice di una tipica specifica di pacchetto con unit test. Quali sono i requisiti obbligatori? Il pacchetto deve avere il prefisso \u00abutp_\u00bb. Lo stesso prefisso deve avere ogni procedura con test. Nel pacchetto devono necessariamente essere presenti due procedure standard: \u00abutp_setup\u00bb e \u00abutp_teardown\u00bb. La prima procedura viene chiamata all'inizio di ogni unit test, la seconda dopo l'esecuzione.<\/p>\n<p>\u00abutp_setup\u00bb, di solito, prepara il nostro sistema per l'esecuzione dell'unit test, ad esempio, creando dati di test. \u00abutp_teardown\u00bb, al contrario, riporta tutto alle impostazioni iniziali e cancella i risultati dell'esecuzione.<\/p>\n<p>Ecco un esempio del pi\u00f9 semplice test unitario, che verifica la normalizzazione del numero di telefono fornito dal cliente al formato standard del nostro sistema di fidelizzazione. Non ci sono standard obbligatori su come scrivere le procedure con i test unitari. Di solito, viene chiamato un metodo di un sistema in fase di test, e il risultato restituito da questo metodo viene confrontato con quello di riferimento. \u00c8 importante che il confronto tra il risultato di riferimento e quello ottenuto avvenga tramite metodi standard utPLSQL.<\/p>\n<p>Nel test unitario possono esserci quantit\u00e0 variabili di verifiche. Come si pu\u00f2 vedere dall'esempio, facciamo quattro chiamate consecutive al metodo in fase di test per la normalizzazione del numero di telefono e dopo ogni chiamata valutiamo il risultato. Durante lo sviluppo del test unitario \u00e8 importante tenere presente che ci sono controlli che non influenzano in alcun modo il sistema, mentre dopo alcuni \u00e8 necessario riportare il sistema allo stato originale. <br \/>\nAd esempio, nel test unitario presentato formattiamo semplicemente il numero di telefono in ingresso, il che non influisce in alcun modo sul sistema di fidelizzazione. <\/p>\n<p>Se scriviamo test unitari per il metodo di creazione di un nuovo cliente, dopo ogni verifica verr\u00e0 creato un nuovo cliente nel sistema, il che potrebbe influenzare le esecuzioni successive del test.<\/p>\n<p><img decoding=\"async\" alt=\"Unit test in DBMS \u2013 come lo facciamo in Sportmaster, parte prima\" src=\"\/wp-content\/uploads\/2019\/08\/7d649b354776c15d8a70a0d9a05363b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEcco come vengono eseguiti i test unitari. Sono ammesse due modalit\u00e0 di esecuzione: l'esecuzione di tutti i test unitari da un pacchetto specifico o l'esecuzione di un test unitario specifico all'interno di un pacchetto.<\/p>\n<p><img decoding=\"async\" alt=\"Unit test in DBMS \u2013 come lo facciamo in Sportmaster, parte prima\" src=\"\/wp-content\/uploads\/2019\/08\/46628b60eb0fe0d20df822ddca914947.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEcco un esempio di sistema di reportistica interna. Sulla base dei risultati dei test unitari, utPLSQL genera un piccolo rapporto. In esso vediamo il risultato di ogni specifica verifica e il risultato complessivo dell'esecuzione del test unitario. <\/p>\n<h2>6 regole per i test automatici<\/h2>\n<p>\nPrima di iniziare a creare un nuovo sistema di test automatizzati per il sistema di fidelizzazione, insieme alla direzione abbiamo definito i principi a cui dovranno attenersi i nostri futuri test automatici.<\/p>\n<p><img decoding=\"async\" alt=\"Unit test in DBMS \u2013 come lo facciamo in Sportmaster, parte prima\" src=\"\/wp-content\/uploads\/2019\/08\/84be59663203abb373e7074b9a6cd4e4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>I test automatizzati devono essere efficaci e portare dei benefici. Abbiamo degli sviluppatori straordinari di cui vale la pena parlare, perch\u00e9 qualcuno di loro sicuramente vedr\u00e0 questa presentazione, e scrivono codice eccellente. Ma anche il loro codice straordinario non \u00e8 perfetto e ha, ha e avr\u00e0 degli errori. I test automatizzati devono individuare questi errori. Se non lo fanno, allora stiamo scrivendo test automatizzati scadenti oppure siamo arrivati in un'area morta che in pratica non vengono migliorati. In entrambi i casi, stiamo facendo qualcosa di sbagliato e il nostro approccio \u00e8 semplicemente privo di senso.<\/li>\n<li>I test automatizzati devono essere utilizzati. \u00c8 insensato spendere un sacco di tempo e risorse per scrivere un prodotto software, caricarne il repository e dimenticarsene. I test devono essere eseguiti, e il pi\u00f9 regolarmente possibile.<\/li>\n<li>I test automatizzati devono funzionare in modo stabile. Indipendentemente dall'ora del giorno, dallo stand di esecuzione e da altre impostazioni di sistema, le esecuzioni dei test devono portare sempre allo stesso risultato. Di solito, questo \u00e8 garantito dal fatto che i test automatizzati lavorano con dati di test specifici e impostazioni di sistema fisse.<\/li>\n<li>I test automatizzati devono operare a una velocit\u00e0 accettabile per il tuo progetto. Questo tempo \u00e8 definito individualmente per ogni sistema. Alcuni possono permettersi di lavorare tutto il giorno, mentre per altri \u00e8 cruciale completare il lavoro in pochi secondi. Pi\u00f9 tardi ti racconter\u00f2 quali standard di velocit\u00e0 abbiamo raggiunto nel nostro progetto.<\/li>\n<li>Lo sviluppo degli autotest deve essere flessibile. Non \u00e8 auspicabile rinunciare alla verifica di nessuna funzionalit\u00e0 solo perch\u00e9 non l'abbiamo mai fatto prima o per altri motivi. utPLSQL non impone alcun vincolo allo sviluppo, e Oracle, in linea di principio, consente di realizzare le pi\u00f9 svariate cose. La maggior parte delle attivit\u00e0 ha una soluzione, la questione \u00e8 solo di tempo e impegno spesi.<\/li>\n<li>Distribuibilit\u00e0. Abbiamo diversi ambienti dove \u00e8 necessario eseguire i test. In ciascuno di questi ambienti, il dump dei dati pu\u00f2 essere aggiornato in qualsiasi momento. \u00c8 necessario gestire il progetto con autotest in modo da poter effettuare una sua installazione totale o parziale senza inconvenienti.<\/li>\n<\/ol>\n<p>E in un secondo post tra qualche giorno ti racconter\u00f2 cosa abbiamo fatto e quali risultati abbiamo raggiunto.<br \/>\n<br \/>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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\udd47Test unitari nei DBMS \u2014 come lo facciamo in Sportmaster, parte prima | ProHoster","description":"Ciao, Habr! Mi chiamo Maksym Ponomarenko e sono uno sviluppatore in Sportmaster. Ho dieci anni di esperienza nel settore IT. Ho iniziato la mia carriera nel campo del testing manuale, poi mi sono spostato sulla sviluppo di database. Negli ultimi quattro anni, accumulando le conoscenze acquisite nel testing e nello sviluppo, mi occupo di automazione dei test a livello di DBMS. Faccio parte del team di Sportmaster da poco pi\u00f9 di un anno.","canonical_url":"https:\/\/prohoster.info\/it\/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":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/37495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=37495"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37495\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/28136"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=37495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=37495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=37495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}