{"id":54167,"date":"2019-12-19T00:00:00","date_gmt":"2019-12-18T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/testmace-bystryj-start"},"modified":"2020-02-18T14:02:08","modified_gmt":"2020-02-18T11:02:08","slug":"testmace-bystryj-start","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/news\/testmace-bystryj-start","title":{"rendered":"TestMace. Avvio veloce","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"TestMace. Avvio veloce\" src=\"\/wp-content\/uploads\/2019\/12\/ca19545f1cc06814a69a6a3e6d9f3a5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ciao a tutti. Stiamo lentamente uscendo dall'ombra e continuiamo la nostra serie di articoli sul nostro prodotto. Dopo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">precedente<\/a><\/noindex> l'articolo introduttivo, abbiamo ricevuto numerosi feedback (principalmente positivi), suggerimenti e report di bug. Oggi vi mostreremo <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">TestMace<\/a><\/noindex> in azione e voi potrete apprezzare alcune funzionalit\u00e0 della nostra applicazione. Per un'immersione pi\u00f9 completa, vi consiglio di consultare la nostra documentazione all'indirizzo <noindex><a rel=\"nofollow\" href=\"http:\/\/docs-ru.testmace.com\">http:\/\/docs-ru.testmace.com<\/a><\/noindex>. Dunque, partiamo! <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"ustanovka\">Installazione<\/h1>\n<p><\/p>\n<p>Iniziamo con una banalit\u00e0. L'applicazione \u00e8 disponibile e realmente testabile su tre piattaforme: Linux, Windows, MacOS. Potete scaricare il programma di installazione per il sistema operativo desiderato da <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">il nostro sito<\/a><\/noindex>. Per gli utenti Linux, c'\u00e8 la possibilit\u00e0 di installare <noindex><a rel=\"nofollow\" href=\"https:\/\/snapcraft.io\/testmace\">il pacchetto snap<\/a><\/noindex>. Speriamo davvero che presto si arrivi al Microsoft Store e all'App Store (ma \u00e8 davvero necessario? Che ne pensate?).<\/p>\n<p><\/p>\n<h1 id=\"podopytnyy-scenariy\">Scenario di prova<\/h1>\n<p><\/p>\n<p>Come soggetto di prova, abbiamo scelto il seguente scenario standard:<\/p>\n<p><\/p>\n<ul>\n<li>accediamo: utente \u2014 admin, password \u2014 password<\/li>\n<li>aggiungiamo una nuova voce<\/li>\n<li>verifichiamo l'aggiunta corretta della voce<\/li>\n<\/ul>\n<p><\/p>\n<p>Testeremo su <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/\">https:\/\/testmace-quick-start.herokuapp.com\/<\/a><\/noindex>. Si tratta di un normale <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/typicode\/json-server\">json-server<\/a><\/noindex>, perfetto per testare applicazioni simili. Abbiamo solo aggiunto l'autenticazione tramite token a tutte le rotte del json-server e creato il metodo login per ottenere questo token. Procederemo passo dopo passo, migliorando gradualmente il nostro progetto.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-proekta-i-popytka-sozdat-suschnost-bez-avtorizacii\">Creazione del progetto e tentativo di creare un'entit\u00e0 senza autorizzazione<\/h2>\n<p><\/p>\n<p>Iniziamo creando un nuovo progetto (<strong>File<\/strong>-&gt;<strong>Nuovo progetto<\/strong>). Se apri l'applicazione per la prima volta, il nuovo progetto si aprir\u00e0 automaticamente. Proviamo prima a fare una richiesta per creare una nuova voce (magari la creazione di voci \u00e8 disponibile senza autorizzazione). Selezionate nel menu contestuale del nodo Project le opzioni <strong>Aggiungi nodo<\/strong> -&gt; <strong>RequestStep<\/strong>. Come nome del nodo impostiamo <strong>create-post<\/strong>. Di conseguenza, verr\u00e0 creato un nuovo nodo nell'albero e si aprir\u00e0 la scheda di quel nodo. Impostiamo i seguenti parametri della richiesta:<\/p>\n<p><\/p>\n<ul>\n<li>Tipo di richiesta: POST<\/li>\n<li>url: <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/posts\">https:\/\/testmace-quick-start.herokuapp.com\/posts<\/a><\/noindex><\/li>\n<li>Corpo della richiesta: json con il valore <code>{\"title\": \"New testmace quick start post\"}<\/code><br \/>\nSe hai fatto tutto correttamente, l'interfaccia apparir\u00e0 come segue:<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Avvio veloce\" src=\"\/wp-content\/uploads\/2019\/12\/a5c81dc4977dd73a4975643bf8ced3da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tuttavia, se proviamo a eseguire la richiesta, il server restituir\u00e0 un codice 401 e senza autorizzazione non riusciremo a fare nulla su questo server. Beh, in effetti, era prevedibile).<\/p>\n<p><\/p>\n<h2 id=\"dobavlyaem-zapros-na-avtorizaciyu\">Aggiungiamo una richiesta di autorizzazione<\/h2>\n<p><\/p>\n<p>Come gi\u00e0 detto, abbiamo un endpoint POST <code>\/login<\/code>, che accetta come corpo della richiesta un json del tipo: <code>{\"username\": \"\", \"password\": \"\"}<\/code>, dove <code>username<\/code> e <code>password<\/code> (di nuovo, come accennato in precedenza) hanno significato <code>admin<\/code> e <code>password<\/code> di conseguenza. In risposta, questo endpoint restituisce un json di tipo <code>{\"token\": \"\"}<\/code>. Lo useremo per l'autenticazione. Creiamo <strong>RequestStep<\/strong> un nodo di nome <strong>login<\/strong>, come genitore avremo <strong>Progetto<\/strong> un nodo. Usa il drag-and-drop per spostare questo nodo nella gerarchia sopra il nodo <strong>create-post<\/strong>. Impostiamo i seguenti parametri per la richiesta appena creata:<\/p>\n<p><\/p>\n<ul>\n<li>Tipo di richiesta: POST<\/li>\n<li>url: <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/login\">https:\/\/testmace-quick-start.herokuapp.com\/login<\/a><\/noindex><\/li>\n<li>Corpo della richiesta: json con il valore <code>{\"username\": \"admin\", \"password\": \"password\"}<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Eseguiamo la richiesta e riceviamo un codice 200 con il token nella risposta. Ecco come:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Avvio veloce\" src=\"\/wp-content\/uploads\/2019\/12\/222b2a0b965b4c1135b5b62c0b7424ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"refaktoring-ubiraem-dublirovanie-domena\">Refactoring: rimuoviamo la duplicazione del dominio<\/h2>\n<p><\/p>\n<p>Finora le richieste non sono collegate in un unico scenario. Ma questo non \u00e8 l'unico difetto. Se si osserva attentamente, si pu\u00f2 notare che almeno il dominio \u00e8 duplicato in entrambe le richieste. Non \u00e8 ideale. \u00c8 tempo di refactoring di questa parte dello scenario futuro e questo ci aiuteranno le variabili.<\/p>\n<p><\/p>\n<p>In prima approssimazione, le variabili svolgono la stessa funzione che in altri strumenti e linguaggi di programmazione simili: eliminazione della duplicazione, miglioramento della leggibilit\u00e0, ecc. Puoi leggere di pi\u00f9 sulle variabili in <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\">documentazione<\/a><\/noindex>. In questo caso avremo bisogno di variabili utente. <\/p>\n<p><\/p>\n<p>Definiamo a livello di Progetti la variabile <code>domain<\/code> con valore <code>https:\/\/testmace-quick-start.herokuapp.com<\/code>. Per fare questo, \u00e8 necessario<\/p>\n<p><\/p>\n<ul>\n<li>Aprire la scheda con questo nodo e fare clic sull'icona della calcolatrice in alto a destra<\/li>\n<li>Fare clic su <strong>+ AGGIUNGI VARIABILE<\/strong><\/li>\n<li>Inserire il nome e il valore della variabile<br \/>\nNel nostro caso, la finestra di dialogo con la variabile aggiunta apparir\u00e0 come segue:<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Avvio veloce\" src=\"\/wp-content\/uploads\/2019\/12\/071ac6dca2c5a49b78b11719fae5f650.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OK. Ora grazie all'ereditariet\u00e0 possiamo utilizzare questa variabile nei nodi discendenti a qualsiasi livello di annidamento. Nel nostro caso, sono i nodi <strong>login<\/strong> e <strong>create-post<\/strong>. Per utilizzare la variabile nel campo di testo, \u00e8 necessario scrivere <code>${}<\/code>. Ad esempio, l'url per il login si trasforma in <code>${domain}\/login<\/code>, di conseguenza per <strong>create-post<\/strong> il nodo l'url sar\u00e0 <code>${domain}\/posts<\/code>.<\/p>\n<p><\/p>\n<p>In questo modo, seguendo il principio DRY, abbiamo migliorato leggermente lo scenario.<\/p>\n<p><\/p>\n<h2 id=\"sohranyaem-token-v-peremennuyu\">Salviamo il token nella variabile<\/h2>\n<p><\/p>\n<p>Dato che abbiamo parlato di variabili, approfondiamo un po' questo argomento. Al momento, nel caso di login riuscito, otteniamo dal server un token di autorizzazione che ci servir\u00e0 nelle richieste successive. Salviamo questo token in una variabile. Poich\u00e9 il valore della variabile verr\u00e0 determinato durante l'esecuzione dello scenario, utilizziamo un meccanismo speciale per questo \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\/dynamic-variables\">variabili dinamiche<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Iniziamo con una richiesta di login. Nella scheda <strong>Analizzato<\/strong> Per visualizzare la risposta, posiziona il cursore sul token e, nel menu contestuale (che si apre cliccando con il tasto destro o premendo il pulsante &#8230;), seleziona l'elemento <strong>Assegna a variabile<\/strong>. Apparir\u00e0 una finestra di dialogo con i seguenti campi:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Path<\/strong> \u2014 quale parte della risposta viene prelevata (in questo caso \u00e8 <code>body.token<\/code>)<\/li>\n<li><strong>Valore attuale<\/strong> \u2014 quale valore si trova nel percorso Path (in questo caso \u00e8 il valore del token)<\/li>\n<li><strong>Nome variabile<\/strong> \u2014 il nome della variabile in cui <strong>Valore attuale<\/strong> verr\u00e0 salvato. In questo caso sar\u00e0 <code>token<\/code><\/li>\n<li><strong>Node<\/strong> \u2014 in quale antenato verr\u00e0 creata la variabile <strong>Nome variabile<\/strong>. Scegliamo Project<\/li>\n<\/ul>\n<p><\/p>\n<p>La finestra di dialogo compilata appare come segue:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Avvio veloce\" src=\"\/wp-content\/uploads\/2019\/12\/f524934dd1a4cb238afb6666135b360b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ora, ad ogni esecuzione del nodo <strong>login<\/strong> la variabile dinamica <code>token<\/code> verr\u00e0 aggiornata con il nuovo valore dalla risposta. E questa variabile sar\u00e0 memorizzata nel <strong>Progetto<\/strong> nodo e grazie all'ereditariet\u00e0 sar\u00e0 disponibile per le generazioni successive.<\/p>\n<p><\/p>\n<p>Per accedere alle variabili dinamiche, \u00e8 necessario utilizzare <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/variables\">la variabile incorporata<\/a><\/noindex> <code>$dynamicVar<\/code>. Ad esempio, per accedere al token salvato, \u00e8 necessario chiamare <code>${$dynamicVar.token}<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"prokidyvaem-avtorizacionnyy-token-v-zaprosy\">Passiamo il token di autorizzazione nelle richieste<\/h2>\n<p><\/p>\n<p>Nei passaggi precedenti abbiamo ottenuto il token di autorizzazione e tutto quello che dobbiamo fare \u00e8 aggiungere l'intestazione <code>Authorization<\/code> con valore <code>Bearer<\/code> in tutte le richieste che richiedono autorizzazione, inclusa <strong>create-post<\/strong>. Ci sono diversi metodi per farlo:<\/p>\n<p><\/p>\n<ol>\n<li>Copia manualmente il token e aggiungi l'intestazione di autorizzazione alle richieste di interesse. Questo metodo funziona, ma \u00e8 limitato solo alle richieste del tipo &#171;ho fatto e gettato&#187;. Non \u00e8 adatto per esecuzioni multiple di script.<\/li>\n<li>Utilizzare la funzionalit\u00e0 di <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization\">autorizzazione<\/a><\/noindex>.<\/li>\n<li>di utilizzare <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/other\/default-http-headers\">intestazioni predefinite<\/a><\/noindex><\/li>\n<\/ol>\n<p><\/p>\n<p>L'uso del secondo metodo sembra ovvio, ma nel contesto di questo articolo tale approccio\u2026 non \u00e8 interessante. Be', davvero: il meccanismo delle autorizzazioni \u00e8 pi\u00f9 o meno conosciuto per voi da altri strumenti (anche se abbiamo cose come <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization#inherit-from-parent\">ereditariet\u00e0 delle autorizzazioni<\/a><\/noindex>) e difficilmente susciter\u00e0 domande. <\/p>\n<p><\/p>\n<p>Un'altra questione sono gli header di default! In poche parole, gli header di default sono gli header HTTP ereditati che vengono aggiunti per impostazione predefinita alla richiesta, a meno che non vengano esplicitamente disabilitati. Con questa funzionalit\u00e0, ad esempio, \u00e8 possibile implementare un'autenticazione personalizzata o semplicemente eliminare la duplicazione negli scenari. Applichiamo questa funzionalit\u00e0 per inoltrare il token negli header.<\/p>\n<p><\/p>\n<p>In precedenza, abbiamo preservato il token in una variabile dinamica <code>$dynamicVar.token<\/code> a livello del nodo Project. Ora dobbiamo fare quanto segue:<\/p>\n<p><\/p>\n<ol>\n<li>Definire l'header di default <code>Authorization<\/code> con valore <code>Bearer ${$dynamicVar.token}<\/code> a livello del nodo Project. Per fare ci\u00f2, nell'interfaccia del nodo Project \u00e8 necessario aprire il dialogo con gli header di default (pulsante <strong>Headers<\/strong> nell'angolo in alto a destra) e aggiungere l'header corrispondente. Il dialogo con i valori popolati apparir\u00e0 come segue:<br \/>\n<img decoding=\"async\" alt=\"TestMace. Avvio veloce\" src=\"\/wp-content\/uploads\/2019\/12\/9abd888cbf96e53b633e8f0fd3389297.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>Disattivare questo header dalla richiesta di login. \u00c8 chiaro: al momento del login non abbiamo ancora il token e con questa richiesta lo stiamo effettivamente impostando. Pertanto, nell'interfaccia della richiesta di login, nella scheda <strong>Headers<\/strong> nell'area <strong>Inherited<\/strong> dobbiamo deselezionare l'header Authorization. <\/li>\n<\/ol>\n<p><\/p>\n<p>Detto questo, ora l'header di autorizzazione verr\u00e0 aggiunto a tutte le richieste che sono figli del nodo Project, eccetto il nodo di login. Quindi, a questo punto, abbiamo gi\u00e0 uno script pronto e non ci resta che avviarlo. \u00c8 possibile avviare lo script selezionando l'opzione <strong>Esegui<\/strong> nel menu contestuale del nodo Project. <\/p>\n<p><\/p>\n<h2 id=\"proveryaem-korrektnost-sozdaniya-posta\">Verifichiamo la correttezza della creazione del post<\/h2>\n<p><\/p>\n<p>A questo punto, il nostro script pu\u00f2 effettuare il login e, utilizzando il token di autorizzazione, creare un post. Tuttavia, dobbiamo assicurarci che il post appena creato abbia un nome corretto. In altre parole, dobbiamo fare quanto segue:<\/p>\n<p><\/p>\n<ul>\n<li>Inviare una richiesta per ottenere il post per id, <\/li>\n<li>Verificare che il nome ricevuto dal server corrisponda al nome fornito durante la creazione del post<\/li>\n<\/ul>\n<p><\/p>\n<p>Consideriamo il primo passo. Poich\u00e9 il valore di id viene determinato durante l'esecuzione dello script, \u00e8 necessario creare una variabile dinamica (chiamiamola <code>postId<\/code>) dal nodo <strong>create-post<\/strong> a livello del nodo Project. Come farlo gi\u00e0 sappiamo, \u00e8 sufficiente fare riferimento alla sezione <strong>Salviamo il token nella variabile<\/strong>. Ora resta solo da creare una richiesta per ottenere il post per tale id. Per fare ci\u00f2, creeremo un RequestStep <strong>get-post<\/strong> con i seguenti parametri:<\/p>\n<p><\/p>\n<ul>\n<li>Tipo di richiesta: GET<\/li>\n<li>URL: ${domain}\/posts\/${$dynamicVar.postId}<\/li>\n<\/ul>\n<p><\/p>\n<p>Per implementare il secondo passo, \u00e8 necessario familiarizzare con <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">Assertion<\/a><\/noindex> il nodo. Il nodo Assertion \u00e8 un nodo che consente di scrivere verifiche su determinate richieste. Ogni nodo Assertion pu\u00f2 contenere diverse affermazioni (verifiche). Puoi leggere di pi\u00f9 su tutti i tipi di assertion nel nostro <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">documentazione<\/a><\/noindex>. Useremo <code>Compare<\/code> assertion con l'operatore <code>equal<\/code>. Ci sono diversi modi per creare le assertion:<\/p>\n<p><\/p>\n<ol>\n<li>Lungo. Creare manualmente un nodo Assertion dal menu contestuale del nodo RequestStep. Nel nodo Assertion creato, aggiungere l'assertion desiderato e riempire i campi.<\/li>\n<li>Veloce. Creare un nodo Assertion insieme all'assertion dalla risposta del nodo RequestStep utilizzando il menu contestuale<\/li>\n<\/ol>\n<p><\/p>\n<p>Utilizzeremo il secondo metodo. Ecco come apparir\u00e0 per il nostro caso.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Avvio veloce\" src=\"\/wp-content\/uploads\/2019\/12\/7f1d81669cb4c10db5f0afa3bf04eddf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Per coloro che non hanno capito, ecco cosa succede:<\/p>\n<p><\/p>\n<ol>\n<li>Fare una richiesta nel nodo <strong>get-post<\/strong><\/li>\n<li>Nella scheda <strong>Analizzato<\/strong> nell risposta per far apparire il menu contestuale e selezionare <strong>Create assertion<\/strong> -&gt; <strong>Compare<\/strong> -&gt; <strong>Equal<\/strong><\/li>\n<\/ol>\n<p><\/p>\n<p>Congratulazioni, abbiamo creato il nostro primo test! Facile, vero? Adesso puoi eseguire lo scenario completamente e goderti il risultato. Rimane solo un po' da rifattorizzare e portare <code>title<\/code> in una variabile separata. Ma questo lo lasciamo a te come compito a casa)<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Conclusione<\/h1>\n<p><\/p>\n<p>In questa guida abbiamo creato uno scenario completo e nel contempo esaminato alcune funzionalit\u00e0 del nostro prodotto. Ovviamente, non abbiamo utilizzato tutte le funzionalit\u00e0 e nei prossimi articoli faremo un'analisi dettagliata delle capacit\u00e0 di TestMace. Restate sintonizzati per gli aggiornamenti!<\/p>\n<p><\/p>\n<p>P.S. Per coloro che non vogliono ripetere tutti i passaggi, abbiamo gentilmente preparato <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/TestMace\/testmace-quick-start-project\">repository<\/a><\/noindex> con il progetto dell'articolo. Puoi aprirlo tramite <strong>File<\/strong> -&gt; <strong>Open project<\/strong> e selezionare la cartella Project.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458964\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u044b \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0442\u0435\u043d\u0438 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0435. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043e\u0431\u0437\u043e\u0440\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0437\u044b\u0432\u043e\u0432 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445), \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 bug \u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c TestMace \u0432 \u0434\u0435\u043b\u0435 \u0438 \u0432\u044b \u043f\u043e \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0443 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0438\u0448\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54167","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\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\/news\/testmace-bystryj-start\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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\udd47TestMace. \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/news\/testmace-bystryj-start\" \/>\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-12-18T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:08+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\udd47TestMace. Avvio rapido | ProHoster","description":"Ciao a tutti.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/testmace-bystryj-start","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\udd47TestMace. \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.","og:url":"https:\/\/prohoster.info\/it\/blog\/news\/testmace-bystryj-start","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-12-18T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54167","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-24 10:17:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:10:34","updated":"2026-01-24 10:17:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/54167","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=54167"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/54167\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=54167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=54167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=54167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}