{"id":54188,"date":"2019-12-20T00:00:00","date_gmt":"2019-12-19T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/chem-testmace-luchshe-postman"},"modified":"2020-02-18T14:02:10","modified_gmt":"2020-02-18T11:02:10","slug":"chem-testmace-luchshe-postman","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/news\/chem-testmace-luchshe-postman","title":{"rendered":"Perch\u00e9 TestMace \u00e8 migliore di Postman","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Perch\u00e9 TestMace \u00e8 migliore di Postman\" src=\"\/wp-content\/uploads\/2019\/12\/4b61986c287c32a4cefeb2f805fc228f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ciao a tutti, qui \u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace.com\/\">TestMace<\/a><\/noindex>! Forse molti di voi ci conoscono da <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">noi<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462585\/\">le precedenti<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458964\/\">articoli<\/a><\/noindex>. Per quelli che si stanno appena collegando: stiamo sviluppando un IDE per lavorare con l'API TestMace. La domanda pi\u00f9 frequente quando si confronta TestMace con prodotti concorrenti \u00e8 \u2014 &#171;Cosa vi distingue da Postman?&#187;. Abbiamo deciso che \u00e8 ora di dare una risposta esaustiva a questa domanda. Qui di seguito abbiamo elencato i nostri vantaggi rispetto a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.getpostman.com\/\">Postman<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"razdelenie-na-uzly\">Divisione in nodi<\/h2>\n<p><\/p>\n<p>Se lavori con Postman, sai che l'interfaccia della richiesta contiene tutte le funzionalit\u00e0 necessarie. Ci sono script, test e, fondamentalmente, le richieste stesse. Questo semplifica il lavoro per i principianti, ma con scenari pi\u00f9 complessi, questo approccio non \u00e8 flessibile. Cosa succede se vuoi creare pi\u00f9 richieste e fare aggregazione su di esse? Cosa succede se desideri eseguire uno script senza richiesta o pi\u00f9 script logicamente separati uno dopo l'altro? Infine, sarebbe opportuno separare i test dagli script utilitari comuni. Inoltre, l'approccio &#171;aggiungiamo tutte le funzionalit\u00e0 in un nodo&#187; non \u00e8 scalabile: l'interfaccia diventa rapidamente sovraccaricata.<\/p>\n<p><\/p>\n<p>TestMace inizialmente divide tutte le funzionalit\u00e0 in diversi tipi di nodi. Vuoi fare una richiesta? Ecco un <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/requeststep\">request step<\/a><\/noindex> nodo. Vuoi scrivere uno script? Ecco un <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/script\">script<\/a><\/noindex> nodo. Hai bisogno di test? Prego \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">Assertion<\/a><\/noindex> nodo. Ah gi\u00e0, puoi anche avvolgere tutto questo in un <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/folder\">folder<\/a><\/noindex> nodo. E tutto ci\u00f2 \u00e8 facilmente combinabile tra loro. Questo approccio non solo \u00e8 molto flessibile, ma, seguendo il principio della singola responsabilit\u00e0, consente di utilizzare solo ci\u00f2 di cui hai realmente bisogno in quel momento. Perch\u00e9 dovrei avere script e test se voglio semplicemente fare una richiesta?<\/p>\n<p><\/p>\n<h2 id=\"chelovekochitaemyy-format-proekta\">Formato leggibile dall'uomo del progetto<\/h2>\n<p><\/p>\n<p>Tra TestMace e Postman c'\u00e8 una differenza concettuale nel modo di archiviare. In Postman tutte le richieste sono memorizzate da qualche parte in un'archiviazione locale. Se \u00e8 necessario condividere le richieste tra pi\u00f9 utenti, \u00e8 necessario utilizzare la sincronizzazione integrata. In realt\u00e0, questo \u00e8 un approccio comunemente accettato, ma non privo di difetti. Che dire della sicurezza dei dati? Infatti, la politica di alcune aziende potrebbe non consentire di memorizzare i dati presso terzi. Tuttavia, riteniamo che TestMace possa offrire qualcosa di meglio! E il nome di questo miglioramento \u00e8 &#171;formato di progetto leggibile dall'uomo&#187;.<\/p>\n<p><\/p>\n<p>Iniziamo col dire che in TestMace esiste fondamentalmente l'entit\u00e0 \"progetto\". L'applicazione \u00e8 stata originariamente sviluppata con l'obiettivo di memorizzare i progetti nei sistemi di controllo versione: la struttura dell'albero di progetto si proietta praticamente uno a uno sulla struttura delle cartelle, utilizzando il formato di memorizzazione yaml (senza parentesi e virgole superflue), e la rappresentazione file di ogni nodo \u00e8 descritta in dettaglio nella documentazione con commenti. Ma nella maggior parte dei casi non sar\u00e0 necessario dare un'occhiata a questa \u2014 tutti i nomi dei campi hanno denominazioni logiche. <\/p>\n<p><\/p>\n<p>Cosa offre questo all'utente? Permette di modificare in maniera molto flessibile il workflow del team, adottando approcci familiari. Ad esempio, gli sviluppatori possono memorizzare il progetto nello stesso repository del backend. Nei rami, oltre a modificare direttamente la base di codice, lo sviluppatore pu\u00f2 correggere gli scenari di richieste esistenti e i test. Dopo aver registrato le modifiche nel repository (git, svn, mercurial \u2014 quello che preferisci), CI (il tuo preferito, non imposto da nessuno) avvia la nostra utility da console <noindex><a rel=\"nofollow\" href=\"https:\/\/www.npmjs.com\/package\/@testmace\/cli\">testmace-cli<\/a><\/noindex>, e il rapporto generato dopo l'esecuzione (ad esempio, in formato junit, che \u00e8 anche supportato in testmace-cli) viene inviato al sistema corrispondente. E anche la questione di cui sopra riguardante la sicurezza non \u00e8 pi\u00f9 un problema.<\/p>\n<p><\/p>\n<p>Come puoi vedere, TestMace non impone il suo ecosistema e paradigma. Invece, si integra facilmente nei processi gi\u00e0 consolidati.<\/p>\n<p><\/p>\n<h2 id=\"dinamicheskie-peremennye\">Variabili dinamiche<\/h2>\n<p><\/p>\n<p>TestMace segue il concetto di no-code: se un problema pu\u00f2 essere risolto senza l'uso di codice, ci impegniamo a offrire tale opportunit\u00e0. Lavorare con le variabili \u00e8 proprio quella funzionalit\u00e0 nella quale la maggior parte delle volte \u00e8 possibile fare a meno della programmazione.<\/p>\n<p><\/p>\n<p>Esempio: abbiamo ricevuto una risposta dal server e vogliamo salvare una parte della risposta in una variabile. In Postman scriveremmo nello script di test (che di per s\u00e9 \u00e8 strano) qualcosa del tipo:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">var jsonData = JSON.parse(responseBody);\npostman.setEnvironmentVariable(\"data\", jsonData.data);<\/code><\/pre>\n<p><\/p>\n<p>Ma secondo noi, scrivere uno script per uno scenario cos\u00ec semplice e frequentemente utilizzato appare eccessivo. Pertanto, in TestMace \u00e8 possibile assegnare una parte della risposta a una variabile utilizzando l'interfaccia grafica. Guarda quanto \u00e8 semplice:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Perch\u00e9 TestMace \u00e8 migliore di Postman\" src=\"\/wp-content\/uploads\/2019\/12\/2ce8ce2f9aa2964cb5bd1d5eacead423.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E ora, ad ogni richiesta, questa variabile dinamica verr\u00e0 aggiornata. Ma potreste obiettare, sostenendo che l'approccio di Postman \u00e8 pi\u00f9 flessibile e consente non solo di effettuare un'assegnazione, ma anche di eseguire una certa pre-elaborazione. Ecco come si pu\u00f2 modificare l'esempio precedente:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">var jsonData = JSON.parse(responseBody);\npostman.setEnvironmentVariable(\"data\", CryptoJS.MD5(jsonData.data));<\/code><\/pre>\n<p><\/p>\n<p>Beh, per questo in TestMace c'\u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/script\">script<\/a><\/noindex> un nodo che copre questo scenario. Per riprodurre il caso precedente, ma gi\u00e0 nell'implementazione di TestMace, \u00e8 necessario creare un nodo script dopo la richiesta e utilizzare il seguente codice come script:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const data = tm.currentNode.prev.response.body.data;\ntm.currentNode.parent.setDynamicVar('data', crypto.MD5(data));<\/code><\/pre>\n<p><\/p>\n<p>Come vedete, la composizione dei nodi ha funzionato bene anche qui. E per un caso cos\u00ec semplice, come descritto sopra, potete semplicemente assegnare l'espressione <code>${crypto.MD5($response.data)}<\/code> a una variabile creata tramite l'interfaccia grafica!<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-testov-cherez-gui\">Creazione di test tramite GUI<\/h2>\n<p><\/p>\n<p>Postman consente di creare test scrivendo script (nel caso di Postman, si tratta di JavaScript). Questo approccio ha solo vantaggi: flessibilit\u00e0 praticamente illimitata, presenza di soluzioni pronte, ecc.<\/p>\n<p><\/p>\n<p>Tuttavia, le realt\u00e0 sono spesso tali (non siamo noi, \u00e8 la vita) che il tester non ha competenze di programmazione, e si vorrebbe gi\u00e0 contribuire al team. Per questi casi, seguendo il concetto no-code, TestMace consente di creare test semplici tramite l'interfaccia grafica, senza ricorrere alla scrittura di script. Ecco, ad esempio, come appare il processo di creazione di un test che confronta valori per uguaglianza:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Perch\u00e9 TestMace \u00e8 migliore di Postman\" src=\"\/wp-content\/uploads\/2019\/12\/c0a8ce4cbe264dd76e3b5d90594eeff5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tuttavia, la creazione di test nell'editor grafico non esclude la possibilit\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\/script\">di scrivere test nel codice<\/a><\/noindex>. Qui ci sono tutte le stesse librerie che nel nodo script, e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.chaijs.com\/\">chai<\/a><\/noindex> per scrivere i test.<\/p>\n<p><\/p>\n<h2 id=\"vozmozhnost-zapustit-uzhe-suschestvuyuschiy-scenariy-po-ssylke-link-uzel\">La possibilit\u00e0 di eseguire uno scenario gi\u00e0 esistente tramite un link (nodo Link)<\/h2>\n<p><\/p>\n<p>Spesso si presentano situazioni in cui una certa richiesta o addirittura un intero scenario devono essere eseguiti pi\u00f9 volte in diverse parti del progetto. Un esempio di tali richieste pu\u00f2 essere una registrazione personalizzata a pi\u00f9 fasi, portare l'ambiente allo stato desiderato, ecc. In breve, se parliamo in termini di linguaggi di programmazione, sarebbe utile avere funzioni che possano essere riutilizzate in diverse parti dell'applicazione. In TestMace questa funzione \u00e8 svolta da <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/link\">link<\/a><\/noindex> nodo. \u00c8 molto semplice usarlo:<br \/>\n1) crea una richiesta o uno script<br \/>\n2) crea un nodo di tipo Link<br \/>\n3) nelle impostazioni indica il link allo script creato al primo passo<\/p>\n<p><\/p>\n<p>Nella versione pi\u00f9 avanzata, puoi specificare quali variabili dinamiche dallo script passeranno al livello superiore rispetto al link. Sembra complicato? Supponiamo di aver creato una cartella di nome <strong>create-post<\/strong>, all'interno della quale viene assegnata una variabile dinamica a questo nodo <code>postId<\/code>. Ora, nel nodo Link <strong>create-post-link<\/strong> puoi specificare esplicitamente che la variabile <code>postId<\/code> viene assegnata al genitore <strong>create-post-link<\/strong>. Questo meccanismo (per usare ancora una volta un linguaggio da programmatore) pu\u00f2 essere utilizzato per restituire il risultato da una &#171;funzione&#187;. In generale, \u00e8 fantastico, DRY al massimo e ancora nessuna riga di codice \u00e8 stata danneggiata.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Perch\u00e9 TestMace \u00e8 migliore di Postman\" src=\"\/wp-content\/uploads\/2019\/12\/5235473a43e5bc2e05aeb2779846245f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Per quanto riguarda Postman, la richiesta di funzionalit\u00e0 per il riutilizzo delle richieste <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1535\">\u00e8 in sospeso dal 2015<\/a><\/noindex>, e sembra che ci siano anche <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1535#issuecomment-280305898\">alcuni segnali<\/a><\/noindex>, che su questo problema stanno lavorando. Nella sua forma attuale, Postman ha sicuramente la possibilit\u00e0 di cambiare il flusso di esecuzione, il che in teoria permette di realizzare un comportamento simile, ma \u00e8 pi\u00f9 un hack sporco che un approccio davvero funzionante. <\/p>\n<p><\/p>\n<h2 id=\"prochie-otlichiya\">Altre differenze<\/h2>\n<p><\/p>\n<ul>\n<li>Maggiore controllo sulla visibilit\u00e0 delle variabili. Il minor scope in cui \u00e8 possibile definire una variabile in Postman \u00e8 la collezione. TestMace consente di definire variabili per qualsiasi richiesta o cartella. In Postman, la condivisione della collezione consente di esportare solo collezioni, mentre in TestMace la condivisione funziona per qualsiasi nodo<\/li>\n<li>TestMace supporta <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/other\/default-http-headers\">header ereditati<\/a><\/noindex>, che per impostazione predefinita possono essere inseriti nelle richieste figlie. Per quanto riguarda Postman, c'\u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1947\">compito<\/a><\/noindex>, ed \u00e8 anche chiusa, ma come soluzione si propone\u2026 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1947#issuecomment-292741840\">di utilizzare script<\/a><\/noindex>. In TestMace tutto ci\u00f2 \u00e8 configurato tramite GUI e c'\u00e8 la possibilit\u00e0 di disattivare opzionalmente gli header ereditati nei discendenti specifici<\/li>\n<li>Annulla\/Rifai. Funziona non solo durante la modifica dei nodi, ma anche durante lo spostamento, la cancellazione, la rinomina e altre operazioni che modificano la struttura del progetto<\/li>\n<li>I file allegati alle richieste diventano parte del progetto e vengono archiviati con esso, sincronizzandosi perfettamente, a differenza di Postman. (S\u00ec, non \u00e8 pi\u00f9 necessario selezionare manualmente i file ogni volta all'avvio e passarli ai colleghi in archivi)<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"fichi-kotorye-uzhe-na-podhode\">Funzioni che sono gi\u00e0 in arrivo<\/h2>\n<p><\/p>\n<p>Non siamo riusciti a resistere alla tentazione di sollevare il velo di mistero sui prossimi rilasci, specialmente considerando quanto sia allettante la funzionalit\u00e0 e che sia gi\u00e0 in fase di rifinitura pre-rilascio. Quindi, diamo il benvenuto.<\/p>\n<p><\/p>\n<h3 id=\"funkcii\">Funzioni<\/h3>\n<p><\/p>\n<p>Come \u00e8 noto, per generare valori in Postman vengono utilizzate le cosiddette variabili dinamiche. <noindex><a rel=\"nofollow\" href=\"https:\/\/learning.getpostman.com\/docs\/postman\/variables-and-environments\/variables-list\/\">L'elenco \u00e8 impressionante<\/a><\/noindex> e la stragrande maggioranza delle funzioni serve a generare valori fittizi. Ad esempio, per generare un'email casuale \u00e8 necessario scrivere:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">{{$randomEmail}}<\/code><\/pre>\n<p><\/p>\n<p>Tuttavia, poich\u00e9 si tratta di variabili (anche se dinamiche), non possono essere usate come funzioni: non sono parametrizzabili, quindi non \u00e8 possibile ottenere l'hash da una stringa.<\/p>\n<p><\/p>\n<p>In TestMace intendiamo aggiungere funzioni &#171;oneste&#187;. All'interno di ${} sar\u00e0 possibile non solo accedere a una variabile, ma anche chiamare una funzione. Cio\u00e8, se \u00e8 necessario generare il temuto email falso, scriveremo semplicemente<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">${faker.internet.email()}<\/code><\/pre>\n<p><\/p>\n<p>Oltre al fatto che si tratta di una funzione, si pu\u00f2 notare che \u00e8 possibile chiamare un metodo di un oggetto. E invece di un lungo elenco di variabili dinamiche, abbiamo un insieme di oggetti logicamente raggruppati.<\/p>\n<p><\/p>\n<p>E se vogliamo calcolare l'hash di una stringa? Facile!<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">${crypto.MD5($dynamicVar.data)}<\/code><\/pre>\n<p><\/p>\n<p>Si pu\u00f2 notare che come parametri possono persino essere passate variabili! In questo punto, il lettore curioso potrebbe sospettare qualcosa di strano\u2026 <\/p>\n<p><\/p>\n<h3 id=\"ispolzovanie-javascript-v-vyrazheniyah\">Uso di JavaScript nelle espressioni<\/h3>\n<p><\/p>\n<p>\u2026 E a ragione! Quando sono stati formulati i requisiti per le funzioni, ci siamo resi conto che nelle espressioni era necessario permettere di scrivere un javascript valido. Pertanto, ora sei libero di scrivere espressioni del tipo:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">${1 + '' + crypto.MD5('asdf')}<\/code><\/pre>\n<p><\/p>\n<p>E tutto questo senza script direttamente nei campi di input!<\/p>\n<p><\/p>\n<p>Per quanto riguarda Postman, qui si possono solo utilizzare variabili e, nel tentativo di scrivere anche una minima espressione, il validatore d\u00e0 errore e si rifiuta di calcolarla.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Perch\u00e9 TestMace \u00e8 migliore di Postman\" src=\"\/wp-content\/uploads\/2019\/12\/b301760640ff15ea682e9dfb1462116b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"prodvinutoe-avtodopolnenie\">Completamento automatico avanzato<\/h3>\n<p><\/p>\n<p>Attualmente, TestMace dispone di un completamento automatico standard che appare come segue:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Perch\u00e9 TestMace \u00e8 migliore di Postman\" src=\"\/wp-content\/uploads\/2019\/12\/1f5ec38a6a6da29e8308882d271b6b14.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Qui, oltre alla stringa di completamento automatico, viene indicato a cosa appartiene questa stringa. Questo meccanismo funziona solo nelle espressioni racchiuse tra parentesi ${}.<\/p>\n<p><\/p>\n<p>Come si pu\u00f2 notare, sono stati aggiunti dei marcatori visivi che indicano il tipo di variabile (ad esempio, stringa, numero, array, ecc.). \u00c8 possibile anche cambiare le modalit\u00e0 di completamento automatico (ad esempio, si pu\u00f2 scegliere il completamento automatico con variabili o intestazioni). Ma anche questo non \u00e8 il punto principale!<\/p>\n<p><\/p>\n<p>Innanzitutto, il completamento automatico funziona anche nelle espressioni (dove possibile). Ecco come appare:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Perch\u00e9 TestMace \u00e8 migliore di Postman\" src=\"\/wp-content\/uploads\/2019\/12\/676721c8d12f6c43970ed335deb238f7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In secondo luogo, ora il completamento automatico \u00e8 disponibile anche negli script. Date un'occhiata a come funziona!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Perch\u00e9 TestMace \u00e8 migliore di Postman\" src=\"\/wp-content\/uploads\/2019\/12\/3b6b4335447c0cbed7044d98831001dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Non ha senso confrontare questa funzionalit\u00e0 con Postman \u2014 l\u00ec, il completamento automatico \u00e8 limitato solo a liste statiche di variabili, intestazioni e relativi valori (correggetemi se ho dimenticato qualcosa). Gli script non sono soggetti a completamento automatico \ud83d\ude41<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Conclusione<\/h1>\n<p><\/p>\n<p>Ad ottobre \u00e8 passato un anno dall'inizio dello sviluppo del nostro prodotto. In questo periodo abbiamo fatto molto e in alcuni parametri abbiamo raggiunto i nostri concorrenti. Tuttavia, il nostro obiettivo rimane quello di creare uno strumento veramente utile per lavorare con le API. Abbiamo ancora molto lavoro da fare, ecco un piano approssimativo per lo sviluppo del nostro progetto nel prossimo anno: <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace.com\/roadmap\/\">https:\/\/testmace.com\/roadmap<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Il vostro feedback ci aiuter\u00e0 a orientarci meglio in un'abbondanza di funzionalit\u00e0, mentre il vostro supporto ci d\u00e0 forza e fiducia nel fatto che stiamo facendo qualcosa di necessario. Oggi \u00e8 un giorno importante per il nostro progetto \u2014 il giorno della pubblicazione di TestMace su <noindex><a rel=\"nofollow\" href=\"https:\/\/www.producthunt.com\/posts\/testmace\">ProductHunt<\/a><\/noindex>. Vi preghiamo di supportare il nostro progetto; \u00e8 molto importante per noi. Inoltre, sulla nostra pagina PH oggi c'\u00e8 un'offerta allettante, e questa \u00e8 limitata<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/480734\/\">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, \u043d\u0430 \u0441\u0432\u044f\u0437\u0438 TestMace! \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u043d\u043e\u0433\u0438\u0435 \u0437\u043d\u0430\u044e\u0442 \u043e \u043d\u0430\u0441 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f: \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace. \u0421\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 TestMace \u0441 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c\u0438 \u2014 &#171;\u0427\u0435\u043c \u0432\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0435\u0441\u044c \u043e\u0442 Postman?&#187;. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u043e\u0440\u0430 \u0434\u0430\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441. \u041d\u0438\u0436\u0435 \u043c\u044b [&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-54188","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, \u043d\u0430 \u0441\u0432\u044f\u0437\u0438\" \/>\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\/chem-testmace-luchshe-postman\" \/>\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\udd47\u0427\u0435\u043c TestMace \u043b\u0443\u0447\u0448\u0435 Postman | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043d\u0430 \u0441\u0432\u044f\u0437\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/news\/chem-testmace-luchshe-postman\" \/>\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-19T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:10+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\udd47Perch\u00e9 TestMace \u00e8 meglio di Postman | ProHoster","description":"Ciao a tutti, qui \u00e8","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/chem-testmace-luchshe-postman","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\udd47\u0427\u0435\u043c TestMace \u043b\u0443\u0447\u0448\u0435 Postman | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043d\u0430 \u0441\u0432\u044f\u0437\u0438","og:url":"https:\/\/prohoster.info\/it\/blog\/news\/chem-testmace-luchshe-postman","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-19T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54188","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:21:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:10:33","updated":"2026-01-24 10:21:21","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\/54188","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=54188"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/54188\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=54188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=54188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=54188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}