{"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\/novosti-interneta\/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>! Molti di voi potrebbero conoscerci da <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">nostri<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462585\/\">precedenti<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458964\/\">articoli<\/a><\/noindex>. Per chi si \u00e8 appena collegato: stiamo sviluppando un IDE per lavorare con l'API TestMace. La domanda pi\u00f9 comune quando si confronta TestMace con prodotti concorrenti \u00e8: \u00abQual \u00e8 la vostra differenza rispetto a Postman?\u00bb. Abbiamo deciso che era ora di fornire una risposta dettagliata a questa domanda. 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\">Separazione in nodi<\/h2>\n<p><\/p>\n<p>Se lavori con Postman, sai che l'interfaccia della richiesta contiene tutte le funzionalit\u00e0 necessarie. Qui ci sono script, test e, in effetti, le richieste stesse. Questo semplifica il lavoro per i principianti, ma con scenari complessi questo approccio non \u00e8 flessibile. Cosa succede se vuoi creare pi\u00f9 richieste e fare aggregazioni su di esse? Cosa succede se desideri eseguire uno script senza richiesta o eseguire pi\u00f9 script logicamente separati di fila? Dopotutto, sarebbe utile separare i test dagli script utilitari comuni. Inoltre, l'approccio di \u00abaggiungere tutte le funzionalit\u00e0 in un nodo\u00bb non \u00e8 scalabile \u2014 l'interfaccia diventa rapidamente sovraccarica.<\/p>\n<p><\/p>\n<p>TestMace separa fin dall'inizio tutte le funzionalit\u00e0 in diversi tipi di nodi. Vuoi fare una richiesta? Ecco a te <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/requeststep\">richiesta passo<\/a><\/noindex> nodo. Vuoi scrivere uno script? Ecco a te <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, puoi anche avvolgere tutto questo in <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/folder\">cartella<\/a><\/noindex> nodo. E tutto ci\u00f2 si combina facilmente. Questo approccio non solo \u00e8 molto flessibile, ma, in conformit\u00e0 con il principio di responsabilit\u00e0 unica, consente di utilizzare solo ci\u00f2 di cui hai davvero bisogno in quel momento. Perch\u00e9 dovrei avere script e test se voglio solo 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 in cui vengono memorizzati. In Postman tutte le richieste vengono memorizzate da qualche parte in uno spazio di archiviazione locale. Se c'\u00e8 bisogno di condividere le richieste tra pi\u00f9 utenti, \u00e8 necessario utilizzare la sincronizzazione integrata. In realt\u00e0, questo \u00e8 un approccio comune, ma non privo di svantaggi. E per quanto riguarda la sicurezza dei dati? La politica di alcune aziende pu\u00f2 non consentire di memorizzare dati presso terzi. Tuttavia, riteniamo che TestMace possa offrire qualcosa di meglio! E il nome di questo miglioramento \u00e8: \u00abformato di progetto leggibile dall'uomo\u00bb.<\/p>\n<p><\/p>\n<p>Cominciamo col fatto che in TestMace esiste in effetti un'entit\u00e0 chiamata \u201cprogetto\u201d. L'applicazione \u00e8 stata originariamente sviluppata con l'obiettivo di memorizzare progetti nei sistemi di controllo versione: l'albero del progetto si proietta praticamente uno a uno sulla struttura dei file, utilizzando il formato yaml (senza parentesi e virgole superflue), e la rappresentazione file di ogni nodo \u00e8 descritta nel dettaglio nella documentazione con commenti. Ma nella maggior parte dei casi non dovrete guardare l\u00ec \u2014 tutti i nomi dei campi hanno denominazioni logiche. <\/p>\n<p><\/p>\n<p>Cosa offre agli utenti? Questo consente di cambiare il flusso di lavoro del team in modo molto flessibile, utilizzando approcci familiari. Ad esempio, gli sviluppatori possono memorizzare il progetto nello stesso repository del backend. Nei branch, oltre a modificare direttamente la base di codice, lo sviluppatore pu\u00f2 correggere gli scenari di richiesta esistenti e i test. Dopo aver registrato le modifiche nel repository (git, svn, mercurial \u2014 quello che preferite) il CI (la vostra amata, non imposta 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 ottenuto dopo l'esecuzione (ad esempio, in formato junit, anch'esso supportato in testmace-cli) viene inviato al sistema corrispondente. Inoltre, la questione della sicurezza sopra menzionata non rappresenta pi\u00f9 un problema.<\/p>\n<p><\/p>\n<p>Come potete vedere, TestMace non impone il proprio ecosistema e paradigma. Al contrario, 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, cerchiamo di offrire tale possibilit\u00e0. Lavorare con le variabili \u00e8 proprio quella funzionalit\u00e0 in cui, nella maggior parte dei casi, si pu\u00f2 fare a meno della programmazione.<\/p>\n<p><\/p>\n<p>Esempio: abbiamo ricevuto una risposta dal server e vogliamo salvare parte di essa in una variabile. In Postman, nel nostro script di test (che di per s\u00e9 \u00e8 strano), scriveremmo 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 a nostro avviso, scrivere uno script per uno scenario cos\u00ec semplice e frequentemente utilizzato appare superfluo. Ecco perch\u00e9 in TestMace c'\u00e8 la possibilit\u00e0 di assegnare a una variabile un pezzo della risposta utilizzando l'interfaccia grafica. Scoprite quanto sia 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 permette non solo di effettuare un'assegnazione, ma anche di eseguire un certo pre-processing. 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>Bene, 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 in esecuzione con 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 di nuovo svolto un buon lavoro. E per un caso cos\u00ec semplice come quello descritto sopra, potete semplicemente assegnare l'espressione <code>${crypto.MD5($response.data)}<\/code> a una variabile creata attraverso 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 vantaggi indiscutibili: flessibilit\u00e0 praticamente illimitata, soluzioni pronte all'uso, e cos\u00ec via.<\/p>\n<p><\/p>\n<p>Tuttavia, la realt\u00e0 \u00e8 spesso tale (non siamo noi, \u00e8 la vita) che il tester non possiede abilit\u00e0 di programmazione, mentre sarebbe desideroso di contribuire al team gi\u00e0 da subito. Per situazioni come queste, seguendo il concetto di no-code, TestMace consente di creare test semplici attraverso un'interfaccia grafica, senza dover scrivere script. Ecco, ad esempio, come appare il processo di creazione di un test che confronta i valori per l'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 in codice<\/a><\/noindex>. Qui troviamo tutte le stesse librerie che si trovano nel nodo script, e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.chaijs.com\/\">chai<\/a><\/noindex> per scrivere test.<\/p>\n<p><\/p>\n<h2 id=\"vozmozhnost-zapustit-uzhe-suschestvuyuschiy-scenariy-po-ssylke-link-uzel\">La possibilit\u00e0 di eseguire un copione esistente tramite un link (nodo Link)<\/h2>\n<p><\/p>\n<p>Spesso si presentano situazioni in cui \u00e8 necessario eseguire una certa richiesta o addirittura un intero scenario pi\u00f9 volte in diverse parti del progetto. Un esempio di tali richieste potrebbe essere l'autenticazione multi-fase personalizzata, la preparazione dell'ambiente per uno stato desiderato, ecc. In generale, usando termini di linguaggi di programmazione, vorremmo 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> un nodo. \u00c8 molto semplice da utilizzare:<br \/>\n1) crea una richiesta o uno scenario<br \/>\n2) crea un nodo di tipo Link<br \/>\n3) nelle impostazioni, specifica il link allo scenario creato nel primo passaggio<\/p>\n<p><\/p>\n<p>In una versione pi\u00f9 avanzata, puoi specificare quali variabili dinamiche dello scenario passare al livello superiore rispetto al link. Suona complicato? Supponiamo di aver creato una Cartella con il 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> venga assegnata all'antenato <strong>create-post-link<\/strong>. Questo meccanismo (ancora una volta, parlando in linguaggio di programmazione) pu\u00f2 essere utilizzato per restituire un risultato da \u00abuna funzione\u00bb. In generale, \u00e8 fantastico, DRY al massimo e di nuovo non \u00e8 stata danneggiata nemmeno una riga di codice.<\/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 attesa dal 2015<\/a><\/noindex>, e sembra anche che ci siano <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1535#issuecomment-280305898\">alcuni indizi<\/a><\/noindex>, che ci si stia lavorando. Nella sua forma attuale, Postman ha sicuramente la possibilit\u00e0 di cambiare il flusso di esecuzione, il che in teoria potrebbe consentire di implementare un comportamento simile, ma \u00e8 pi\u00f9 un hack sporco che un vero approccio funzionante. <\/p>\n<p><\/p>\n<h2 id=\"prochie-otlichiya\">Altre differenze<\/h2>\n<p><\/p>\n<ul>\n<li>Maggiore controllo sull'ambito delle variabili. L'ambito pi\u00f9 limitato all'interno del quale \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\">intestazioni ereditate<\/a><\/noindex>, che possono essere inserite per impostazione predefinita nelle richieste figlie. A questo riguardo, in Postman c'\u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1947\">un task<\/a><\/noindex>, che \u00e8 anche stato chiuso, ma come soluzione viene proposto... <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postmanlabs\/postman-app-support\/issues\/1947#issuecomment-292741840\">di utilizzare script<\/a><\/noindex>. In TestMace, everything is configured through the GUI, and there is an option to disable inherited headers in specific child elements.<\/li>\n<li>Undo\/Redo. This works not only when editing nodes but also when moving, deleting, renaming, and performing other operations that change the project structure.<\/li>\n<li>Files attached to requests become part of the project and are stored together with it, syncing seamlessly unlike in Postman. (Yes, no more manually selecting files at each run and transferring them to colleagues in archives.)<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"fichi-kotorye-uzhe-na-podhode\">Features that are already on the way.<\/h2>\n<p><\/p>\n<p>We couldn't resist the temptation to lift the veil on the upcoming releases, especially when the functionality is very enticing and already undergoing pre-release polishing. So, here we go.<\/p>\n<p><\/p>\n<h3 id=\"funkcii\">Le funzioni<\/h3>\n<p><\/p>\n<p>As you know, dynamic variables are used for generating values in Postman. <noindex><a rel=\"nofollow\" href=\"https:\/\/learning.getpostman.com\/docs\/postman\/variables-and-environments\/variables-list\/\">The list is extensive.<\/a><\/noindex> And the overwhelming majority of functions serve to generate fake values. For example, to generate a random email, you need to write:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">{{$randomEmail}}<\/code><\/pre>\n<p><\/p>\n<p>Tuttavia, poich\u00e9 sono variabili (anche se dinamiche), non possono essere utilizzate come funzioni: non sono parametrizzabili, quindi non \u00e8 possibile calcolare l'hash di una stringa.<\/p>\n<p><\/p>\n<p>In TestMace prevediamo di aggiungere funzioni \u00abgiuste\u00bb. All'interno di ${} sar\u00e0 possibile non solo riferirsi a una variabile, ma anche chiamare una funzione. Cio\u00e8, se \u00e8 necessario generare il famigerato email falso, semplicemente scriveremo<\/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 c\u2019\u00e8 la possibilit\u00e0 di chiamare un metodo di un oggetto. E invece di un grande elenco piatto 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 \u00e8 anche possibile passare 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 non a torto! Quando sono state definite le esigenze per le funzioni, abbiamo improvvisamente giunto alla conclusione che nelle espressioni dovevamo permettere di scrivere JavaScript valido. Quindi ora sei libero di scrivere espressioni nel modo seguente:<\/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 \u00e8 possibile utilizzare solo variabili, e quando si cerca di scrivere un'espressione anche minimamente complessa, il validatore genera un 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 offre 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, \u00e8 indicato a cosa appartiene questa stringa. Questo meccanismo funziona solo all'interno delle espressioni racchiuse tra parentesi ${}.<\/p>\n<p><\/p>\n<p>Come si pu\u00f2 notare, sono stati aggiunti indicatori visivi che indicano il tipo di variabile (ad esempio, stringa, numero, array, ecc.). Inoltre, \u00e8 possibile cambiare le modalit\u00e0 di completamento automatico (ad esempio, si pu\u00f2 scegliere il completamento automatico con variabili o intestazioni). Ma questo non \u00e8 nemmeno 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>E 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: il suo completamento automatico si limita solo a elenchi statici di variabili, intestazioni e i loro valori (correggetemi se mi scordo qualcosa). Gli script non vengono completati automaticamente \ud83d\ude41<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Conclusione<\/h1>\n<p><\/p>\n<p>Ottobre segna un anno dall'inizio dello sviluppo del nostro prodotto. In questo periodo abbiamo realizzato molte cose e in alcuni parametri ci siamo messi al passo con i nostri concorrenti. Tuttavia, il nostro obiettivo \u00e8 creare uno strumento davvero conveniente per lavorare con le API. Abbiamo ancora molto lavoro da fare, ecco un piano indicativo 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 muoverci meglio nell'abbondanza di funzionalit\u00e0, e il vostro supporto ci d\u00e0 forza e fiducia nel fatto che stiamo facendo la cosa giusta. Oggi \u00e8 un giorno importante per il nostro progetto: 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. Soprattutto considerando che 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-novosti-interneta"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.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\/novosti-interneta\/chem-testmace-luchshe-postman\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.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\/novosti-interneta\/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 migliore di Postman | ProHoster","description":"Ciao a tutti, qui \u00e8","canonical_url":"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/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\/novosti-interneta\/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}]}}