{"id":54187,"date":"2019-12-20T00:00:00","date_gmt":"2019-12-19T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/testmace-moshhnaya-ide-dlya-raboty-s-api"},"modified":"2020-02-18T14:02:10","modified_gmt":"2020-02-18T11:02:10","slug":"testmace-moshhnaya-ide-dlya-raboty-s-api","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api","title":{"rendered":"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej allihopa! Idag vill vi presentera v\u00e5rt produkt \u2014 en IDE f\u00f6r arbete med API:n till IT-samh\u00e4llet. <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">TestMace<\/a><\/noindex>. Kanske k\u00e4nner n\u00e5gra av er redan till oss fr\u00e5n <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace.com\/blog\/\">tidigare artiklar.<\/a><\/noindex>. Men det har inte funnits n\u00e5gon omfattande \u00f6versikt av verktyget, s\u00e5 vi \u00e5tg\u00e4rdar denna olyckliga brist.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er\" src=\"\/wp-content\/uploads\/2019\/12\/798c0783510a07e7fd162bdf14151c29.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"motivaciya\">Motivation<\/h1>\n<p><\/p>\n<p>Vi skulle vilja b\u00f6rja med hur vi kom till detta liv och besl\u00f6t oss f\u00f6r att skapa v\u00e5rt eget verktyg f\u00f6r avancerat arbete med API:er. L\u00e5t oss b\u00f6rja med en lista \u00f6ver funktioner som produkten b\u00f6r ha, som enligt v\u00e5r \u00e5sikt kan beskrivas som \"IDE f\u00f6r arbete med API:er\":<\/p>\n<p><\/p>\n<ul>\n<li>Skapa och k\u00f6ra f\u00f6rfr\u00e5gningar och skript (sekvenser av f\u00f6rfr\u00e5gningar).<\/li>\n<li>Skriva olika typer av tester.<\/li>\n<li>Generera tester.<\/li>\n<li>Arbeta med API-beskrivningar, inklusive import fr\u00e5n format s\u00e5som Swagger, OpenAPI, WADL osv.<\/li>\n<li>Mocka f\u00f6rfr\u00e5gningar.<\/li>\n<li>Bra st\u00f6d f\u00f6r ett eller flera programmeringsspr\u00e5k f\u00f6r att skriva skript, inklusive integration med popul\u00e4ra bibliotek.<\/li>\n<li>och s\u00e5 vidare.<\/li>\n<\/ul>\n<p><\/p>\n<p>Listan kan kompletteras efter smak. Det \u00e4r ocks\u00e5 viktigt att skapa inte bara sj\u00e4lva IDE:n, utan ocks\u00e5 en viss infrastruktur, s\u00e5som molnsynkronisering, kommandoradsverktyg, online \u00f6vervakningstj\u00e4nster osv. I slut\u00e4ndan dikterar de senaste \u00e5rens trender att vi inte bara beh\u00f6ver kraftfull funktionalitet i applikationen utan ocks\u00e5 en tilltalande anv\u00e4ndargr\u00e4nssnitt.<\/p>\n<p><\/p>\n<p>Vem beh\u00f6ver ett s\u00e5dant verktyg? Uppenbarligen alla som p\u00e5 n\u00e5got s\u00e4tt \u00e4r involverade i utveckling och testning av API:n \u2014 utvecklare och testare =). F\u00f6r de f\u00f6rra r\u00e4cker det oftast med att utf\u00f6ra enstaka f\u00f6rfr\u00e5gningar och enkla skript, medan f\u00f6r testarna \u00e4r detta ett av de viktigaste verktygen, som f\u00f6rutom andra aspekter b\u00f6r inkludera en kraftfull mekanism f\u00f6r att skriva tester med m\u00f6jlighet att k\u00f6ra dem i CI.<\/p>\n<p><\/p>\n<p>S\u00e5, i enlighet med dessa riktlinjer b\u00f6rjade vi skapa v\u00e5r produkt. L\u00e5t oss titta p\u00e5 vad vi har \u00e5stadkommit hittills.<\/p>\n<p><\/p>\n<h1 id=\"bystryy-start\">Snabbstart<\/h1>\n<p><\/p>\n<p>L\u00e5t oss b\u00f6rja med den f\u00f6rsta bekantskapen med applikationen. Du kan ladda ner den <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\/\">p\u00e5 v\u00e5r webbplats<\/a><\/noindex>. F\u00f6r tillf\u00e4llet st\u00f6ds alla tre huvudplattformar \u2014 Windows, Linux, MacOS. Ladda ner, installera, starta. Vid f\u00f6rsta uppstarten kan du se f\u00f6ljande f\u00f6nster:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er\" src=\"\/wp-content\/uploads\/2019\/12\/dbbd26d8656488cd11716f7dbede9ec7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Klicka p\u00e5 plusset h\u00f6gst upp i inneh\u00e5llsomr\u00e5det f\u00f6r att skapa din f\u00f6rsta f\u00f6rfr\u00e5gan. Fliken med f\u00f6rfr\u00e5gan ser ut p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er\" src=\"\/wp-content\/uploads\/2019\/12\/d76205f43ec821018642a3d354532e7e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss titta n\u00e4rmare p\u00e5 det. F\u00f6rfr\u00e5gningsgr\u00e4nssnittet p\u00e5minner mycket om gr\u00e4nssnittet f\u00f6r popul\u00e4ra REST-klienter, vilket g\u00f6r \u00f6verg\u00e5ngen fr\u00e5n s\u00e5dana verktyg enklare. L\u00e5t oss g\u00f6ra den f\u00f6rsta f\u00f6rfr\u00e5gan p\u00e5 URL:en. <noindex><a rel=\"nofollow\" href=\"https:\/\/next.json-generator.com\/api\/json\/get\/NJv-NT-U8\">https:\/\/next.json-generator.com\/api\/json\/get\/NJv-NT-U8<\/a><\/noindex><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er\" src=\"\/wp-content\/uploads\/2019\/12\/19e639baa1e0d51f1a40b76ae9144d6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vid f\u00f6rsta anblicken tycks svarspanelen inte \u00f6verraska med n\u00e5got ov\u00e4ntat. Jag vill dock p\u00e5peka n\u00e5gra punkter:<\/p>\n<p><\/p>\n<ol>\n<li>Svaret \u00e4r strukturerat i form av ett tr\u00e4d, vilket dels \u00f6kar informationsinneh\u00e5llet och dels m\u00f6jligg\u00f6r vissa intressanta funktioner som jag kommer att beskriva nedan.<\/li>\n<li>Det finns en flik f\u00f6r p\u00e5st\u00e5enden (Assertions), d\u00e4r en lista \u00f6ver tester f\u00f6r denna f\u00f6rfr\u00e5gan visas.<\/li>\n<\/ol>\n<p><\/p>\n<p>Som ni kan se kan v\u00e5rt verktyg anv\u00e4ndas som en bekv\u00e4m REST-klient. Men vi skulle inte vara h\u00e4r om dess funktioner begr\u00e4nsades till att bara skicka f\u00f6rfr\u00e5gningar. H\u00e4rn\u00e4st kommer jag att beskriva de grundl\u00e4ggande begreppen och funktionaliteterna i TestMace.<\/p>\n<p><\/p>\n<h1 id=\"osnovnye-ponyatiya-i-vozmozhnosti\">Grundl\u00e4ggande begrepp och funktioner<\/h1>\n<p><\/p>\n<h2 id=\"uzel\">Nod<\/h2>\n<p><\/p>\n<p>Funktionaliteten i TestMace \u00e4r uppdelad i olika typer av noder. I exemplet ovan har vi demonstrerat arbetet med RequestStep-noden. Just nu finns dock ocks\u00e5 f\u00f6ljande typer av noder tillg\u00e4ngliga i applikationen:<\/p>\n<p><\/p>\n<ul>\n<li>RequestStep. Detta \u00e4r en nod som g\u00f6r det m\u00f6jligt att skapa en f\u00f6rfr\u00e5gan. Som underordnad nod kan den endast ha en Assertion-nod.<\/li>\n<li>Assertion. Noden anv\u00e4nds f\u00f6r att skriva tester. Den kan bara vara en underordnad nod till RequestStep-noden.<\/li>\n<li>Folder. G\u00f6r det m\u00f6jligt att gruppera Folder- och RequestStep-noder inom sig.<\/li>\n<li>Project. Detta \u00e4r rot-noden som automatiskt skapas n\u00e4r ett projekt skapas. I \u00f6vrigt upprepar den funktionen hos Folder-noden.<\/li>\n<li>Link. L\u00e4nk till Folder eller RequestStep-nod. M\u00f6jligg\u00f6r \u00e5teranv\u00e4ndning av f\u00f6rfr\u00e5gningar och scenarier.<\/li>\n<li>och s\u00e5 vidare.<\/li>\n<\/ul>\n<p><\/p>\n<p>Knutpunkterna placeras i scratches (panelen l\u00e4ngst ner till v\u00e4nster, som anv\u00e4nds f\u00f6r att snabbt skapa \"eng\u00e5ngsf\u00f6rfr\u00e5gningar\") och i project (panelen l\u00e4ngst upp till v\u00e4nster), som vi kommer att g\u00e5 in p\u00e5 mer detaljerat.<\/p>\n<p><\/p>\n<h2 id=\"proekt\">Projektet<\/h2>\n<p><\/p>\n<p>N\u00e4r du startade applikationen kanske du lade m\u00e4rke till en ensam rad 'Project' uppe till v\u00e4nster. Detta \u00e4r rotat av projekttr\u00e4det. N\u00e4r ett projekt startas skapas ett tempor\u00e4rt projekt, vars plats beror p\u00e5 ditt operativsystem. N\u00e4r som helst kan du flytta projektet till en mer bekv\u00e4m plats.<\/p>\n<p><\/p>\n<p>Projektets huvudsakliga syfte \u00e4r att m\u00f6jligg\u00f6ra lagring av arbete i filsystemet och vidare synkronisering via versionskontrollsystem, k\u00f6rning av skript i CI, granskning av f\u00f6r\u00e4ndringar osv.<\/p>\n<p><\/p>\n<h2 id=\"peremennye\">Variabler<\/h2>\n<p><\/p>\n<p>Variabler \u00e4r en av de centrala mekanismerna i applikationen. De av er som arbetar med verktyg som TestMace har kanske redan f\u00f6rst\u00e5tt vad det handlar om. S\u00e5, variabler \u00e4r ett s\u00e4tt att lagra gemensamma data och kommunicera mellan noder. En motsvarighet \u00e4r till exempel milj\u00f6variabler i Postman eller Insomnia. Men vi har g\u00e5tt l\u00e4ngre och utvecklat \u00e4mnet. I TestMace kan variabler st\u00e4llas in p\u00e5 nodniv\u00e5. Vilken som helst. Det finns \u00e4ven en mekanism f\u00f6r arv av variabler fr\u00e5n f\u00f6r\u00e4ldrar och \u00f6verskrivning av variabler i avkommor. Ut\u00f6ver detta finns det ett antal inbyggda variabler, namnen p\u00e5 de inbyggda variablerna b\u00f6rjar med <code>$<\/code>. H\u00e4r \u00e4r n\u00e5gra av dem:<\/p>\n<p><\/p>\n<ul>\n<li><code>$prevStep<\/code> \u2014 en referens till variablerna i den f\u00f6reg\u00e5ende noden<\/li>\n<li><code>$nextStep<\/code> \u2014 en referens till variablerna i den f\u00f6ljande noden<\/li>\n<li><code>$parent<\/code> \u2014 samma sak, men f\u00f6r en f\u00f6r\u00e4lder<\/li>\n<li><code>$response<\/code> \u2014 svaret fr\u00e5n servern<\/li>\n<li><code>$env<\/code> \u2014 aktuella milj\u00f6variabler<\/li>\n<li><code>$dynamicVar<\/code> \u2014 dynamiska variabler som skapas under k\u00f6rning av scenariot eller f\u00f6rfr\u00e5gan<\/li>\n<\/ul>\n<p><\/p>\n<p><code>$env<\/code> \u2014 detta \u00e4r i princip vanliga variabler p\u00e5 projekt-niv\u00e5, men upps\u00e4ttningen av milj\u00f6variabler \u00e4ndras beroende p\u00e5 den valda milj\u00f6n. <\/p>\n<p><\/p>\n<p>\u00c5tkomst till variabeln g\u00f6rs via <code>${variable_name}<\/code><br \/>\nSom v\u00e4rde f\u00f6r en variabel kan vara en annan variabel, eller till och med ett helt uttryck. Till exempel, som en url-variabel kan ett uttryck av typen<br \/>\n<code>http:\/\/${host}:${port}\/${endpoint}<\/code>.<\/p>\n<p><\/p>\n<p>Det \u00e4r v\u00e4rt att n\u00e4mna m\u00f6jligheten att tilldela variabler under k\u00f6rningen av skriptet. Till exempel uppst\u00e5r det ofta behov av att spara autentiseringsdata (token eller hela rubriken) som kom fr\u00e5n servern efter en lyckad inloggning. TestMace m\u00f6jligg\u00f6r att spara s\u00e5dana data i dynamiska variabler av en av f\u00f6rf\u00e4derna. F\u00f6r att undvika kollisioner med redan existerande \"statisk\" variabler har de dynamiska variablerna flyttats till ett separat objekt. <code>$dynamicVar<\/code>. <\/p>\n<p><\/p>\n<h2 id=\"scenarii\">Scenarier<\/h2>\n<p><\/p>\n<p>Genom att anv\u00e4nda alla ovanst\u00e5ende m\u00f6jligheter kan du k\u00f6ra hela scenarier f\u00f6r f\u00f6rfr\u00e5gningar. Till exempel, skapa entitet -&gt; beg\u00e4r entitet -&gt; ta bort entitet. I detta fall kan du till exempel anv\u00e4nda en Folder-nod f\u00f6r att gruppera flera RequestStep noder.<\/p>\n<p><\/p>\n<h2 id=\"avtodopolnenie-i-podsvetka-znacheniya-vyrazheniya\">Autocompletion och syntaktisk f\u00e4rgning av uttrycksv\u00e4rden<\/h2>\n<p><\/p>\n<p>F\u00f6r att arbeta effektivt med variabler (och mer) \u00e4r autocompleting n\u00f6dv\u00e4ndigt. Och sj\u00e4lvklart en belysning av uttryckets v\u00e4rde, s\u00e5 att det blir enklare och smidigare att klarg\u00f6ra vad en viss variabel har f\u00f6r v\u00e4rde. Det \u00e4r just ett s\u00e5dant fall d\u00e4r det \u00e4r b\u00e4ttre att se en g\u00e5ng \u00e4n att h\u00f6ra hundra g\u00e5nger:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er\" src=\"\/wp-content\/uploads\/2019\/12\/cf9d30c9623b18575825d4282b8fe3e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det \u00e4r v\u00e4rt att n\u00e4mna att autocompleting inte bara till\u00e4mpas p\u00e5 variabler, utan ocks\u00e5, till exempel, p\u00e5 rubriker, v\u00e4rden av specifika rubriker (till exempel autocompleting f\u00f6r Content-Type-rubriken), protokoll och mycket mer. Listan fylls st\u00e4ndigt p\u00e5 allt eftersom applikationen v\u00e4xer.<\/p>\n<p><\/p>\n<h2 id=\"undoredo\">\u00c5ngra\/redo<\/h2>\n<p><\/p>\n<p>Att \u00e5ngra\/\u00e5terf\u00f6ra \u00e4ndringar \u00e4r en mycket anv\u00e4ndbar funktion, men av n\u00e5gon anledning implementeras den inte \u00f6verallt (och verktyg f\u00f6r att arbeta med API \u00e4r inget undantag). Men vi g\u00f6r inte s\u00e5!) \u00c5ngra\/redo \u00e4r implementerat i hela projektet, vilket m\u00f6jligg\u00f6r att \u00e5ngra inte bara redigerandet av en specifik nod, utan \u00e4ven dess skapande, radering, flyttning, etc. De mest kritiska operationerna kr\u00e4ver bekr\u00e4ftelse.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-testov\">Skapa tester<\/h2>\n<p><\/p>\n<p>Det \u00e4r Assertion-noden som ansvarar f\u00f6r skapande av tester. En av de viktigaste funktionerna \u00e4r m\u00f6jligheten att skapa tester utan programmering, med hj\u00e4lp av inbyggda redigerare. <\/p>\n<p><\/p>\n<p>Assertion-noden best\u00e5r av en upps\u00e4ttning asserts (p\u00e5st\u00e5enden). Varje assert har sin typ; just nu finns det flera typer av asserts.<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>J\u00e4mf\u00f6r v\u00e4rden \u2014 j\u00e4mf\u00f6r helt enkelt 2 v\u00e4rden. Det finns flera j\u00e4mf\u00f6relseoperat\u00f6rer \"lika med\", \"inte lika med\", \"st\u00f6rre \u00e4n\", \"st\u00f6rre \u00e4n eller lika med\", \"mindre \u00e4n\", \"mindre \u00e4n eller lika med.\"<\/p>\n<p>\n<\/li>\n<li>\n<p>Inneh\u00e5ller v\u00e4rde \u2014 kontrollerar n\u00e4rvaron av en delstr\u00e4ng i en str\u00e4ng.<\/p>\n<p>\n<\/li>\n<li>\n<p>XPath \u2014 kontrollerar att ett visst v\u00e4rde finns vid en v\u00e4ljare i XML.<\/p>\n<p>\n<\/li>\n<li>\n<p>JavaScript assertion \u2014 en godtycklig skript p\u00e5 JavaScript, som returnerar true vid framg\u00e5ng och false vid misslyckande.<\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<p>Jag noterar att endast den sista kr\u00e4ver att anv\u00e4ndaren har programmeringskunskaper, de andra tre assertioner skapas med hj\u00e4lp av grafiskt gr\u00e4nssnitt. H\u00e4r \u00e4r, till exempel, hur dialogrutan f\u00f6r att skapa j\u00e4mf\u00f6ra v\u00e4rden assertion ser ut:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er\" src=\"\/wp-content\/uploads\/2019\/12\/e71e11fb0fb664d1d9751a71fbdcc850.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00f6rsb\u00e4ret p\u00e5 t\u00e5rtan \u00e4r snabb skapande av asserts fr\u00e5n svaret, bara se p\u00e5 detta!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er\" src=\"\/wp-content\/uploads\/2019\/12\/3b86084419339a7a05a3548df5c12d6a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00e4remot har s\u00e5dana asserts uppenbara begr\u00e4nsningar, n\u00e4r du st\u00f6ttar p\u00e5 dem kan du anv\u00e4nda javascript assertion. Och h\u00e4r erbjuder TestMace ocks\u00e5 en bekv\u00e4m milj\u00f6 med autocompleting, syntaxbelysning och till och med en statisk analyzator.<\/p>\n<p><\/p>\n<h2 id=\"opisanie-api\">API-beskrivning<\/h2>\n<p><\/p>\n<p>TestMace g\u00f6r det m\u00f6jligt att inte bara anv\u00e4nda API:et, utan \u00e4ven att dokumentera det. Beskrivningen har en hierarkisk struktur och integreras smidigt i resten av projektet. Dessutom finns det nu m\u00f6jlighet att importera API-beskrivningar fr\u00e5n Swagger 2.0 \/ OpenAPI 3.0-format. Beskrivningen \u00e4r inte bara stillast\u00e5ende utan integreras t\u00e4tt med projektets \u00f6vriga delar, till exempel finns det automatisk komplettering av URL:er, HTTP-huvuden, query-parametrar och mer, och i framtiden planerar vi att l\u00e4gga till tester f\u00f6r att kontrollera att svaret \u00f6verensst\u00e4mmer med API-beskrivningen.<\/p>\n<p><\/p>\n<h2 id=\"sharing-nod\">Noddelning<\/h2>\n<p><\/p>\n<p>Fallstudie: Du skulle vilja dela en problematisk f\u00f6rfr\u00e5gan eller till och med ett helt scenario med en kollega eller enkelt bifoga den till en bugg. TestMace t\u00e4cker \u00e4ven detta fall: applikationen g\u00f6r det m\u00f6jligt att serialisera vilken nod som helst och till och med ett deltr\u00e4d till en URL. Kopiera och klistra in s\u00e5 har du enkelt flyttat f\u00f6rfr\u00e5gan till en annan maskin eller projekt.<\/p>\n<p><\/p>\n<h2 id=\"chelovekochitaemyy-format-hraneniya-proekta\">L\u00e4sligt format f\u00f6r projekts f\u00f6rvaring<\/h2>\n<p><\/p>\n<p>F\u00f6r n\u00e4rvarande lagras varje nod i en separat fil med fil\u00e4ndelsen yml (som i fallet med Assertion-noden), eller i en mapp med nodens namn och en fil som heter index.yml inuti den.<br \/>\nS\u00e5 h\u00e4r ser till exempel filen med f\u00f6rfr\u00e5gan ut som vi gjorde i \u00f6versikten ovan:<\/p>\n<p>\n<b class=\"spoiler_title\">index.yml<\/b><\/p>\n<pre><code class=\"ruby\">children: []\nvariables: {}\ntype: RequestStep\nassignVariables: []\nrequestData:\n  request:\n    method: GET\n    url: 'https:\/\/next.json-generator.com\/api\/json\/get\/NJv-NT-U8'\n  headers: []\n  disabledInheritedHeaders: []\n  params: []\n  body:\n    type: Json\n    jsonBody: ''\n    xmlBody: ''\n    textBody: ''\n    formData: []\n    file: ''\n    formURLEncoded: []\n  strictSSL: Inherit\nauthData:\n  type: inherit\nname: Scratch 1<\/code><\/pre>\n<p><\/p>\n<p>Som du ser \u00e4r allt helt klart. Om s\u00e5 \u00f6nskas kan detta format redigeras enkelt \u00e4ven manuellt.<\/p>\n<p><\/p>\n<p>Hierarkin av mappar i filsystemet speglar helt hierarkin av noder i projektet. Till exempel ett scenario av typen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er\" src=\"\/wp-content\/uploads\/2019\/12\/8f08d934a977e4fdacd269f4ea0c34b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mappas i filsystemet till f\u00f6ljande struktur (endast hierarkin av mappar visas, men inneb\u00f6rden \u00e4r klar)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace \u2014 en kraftfull IDE f\u00f6r att arbeta med API:er\" src=\"\/wp-content\/uploads\/2019\/12\/60a54704979f5a77ee05735fd8ebe824.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vilket underl\u00e4ttar processen f\u00f6r granskning av projektet.<\/p>\n<p><\/p>\n<h2 id=\"import-iz-postman\">Import fr\u00e5n Postman<\/h2>\n<p><\/p>\n<p>Efter att ha l\u00e4st allt ovanst\u00e5ende kanske n\u00e5gra anv\u00e4ndare vill prova (eller hur?) den nya produkten eller (vad vet man!) anv\u00e4nda den fullt ut i sitt projekt. Men migrationen kan stoppas av ett stort antal arbeten i samma Postman. F\u00f6r s\u00e5dana fall st\u00f6djer TestMace import av samlingar fr\u00e5n Postman. F\u00f6r n\u00e4rvarande st\u00f6ds import utan tester, men vi utesluter inte att st\u00f6dja dem senare.<\/p>\n<p><\/p>\n<h1 id=\"plany\">Planer<\/h1>\n<p><\/p>\n<p>Jag hoppas att m\u00e5nga av er som har l\u00e4st detta stycke har uppskattat v\u00e5r produkt. Men det \u00e4r inte allt! Arbete med produkten p\u00e5g\u00e5r f\u00f6r fullt och h\u00e4r \u00e4r n\u00e5gra funktioner som vi planerar att l\u00e4gga till inom kort.<\/p>\n<p><\/p>\n<h2 id=\"oblachnaya-sinhronizaciya\">Molnsynkronisering<\/h2>\n<p><\/p>\n<p>En av de mest efterfr\u00e5gade funktionerna. Just nu erbjuder vi versionskontrollsystem som en synkronisering, vilket g\u00f6r att vi g\u00f6r formatet mer v\u00e4nligt f\u00f6r denna typ av lagring. Men f\u00f6r m\u00e5nga passar inte detta arbetsfl\u00f6de, s\u00e5 vi planerar att l\u00e4gga till en mer v\u00e4lbekant synkroniseringsmekanism via v\u00e5ra servrar. <\/p>\n<p><\/p>\n<h2 id=\"cli\">CLI<\/h2>\n<p><\/p>\n<p>Som redan n\u00e4mnts, produkter p\u00e5 IDE-niv\u00e5 \u00e4r beroende av olika integrationer med redan existerande applikationer eller arbetsfl\u00f6den. CLI \u00e4r n\u00f6dv\u00e4ndigt f\u00f6r att integrera tester skrivna i TestMace i kontinuerlig integration. Arbetet med CLI p\u00e5g\u00e5r f\u00f6r fullt, i de tidiga versionerna kommer det att finnas ett projekt med en enkel konsolrapport. Fram\u00f6ver planerar vi att l\u00e4gga till rapporten i JUnit-format.<\/p>\n<p><\/p>\n<h2 id=\"plaginnaya-sistema\">Plugin-system<\/h2>\n<p><\/p>\n<p>Trots kraften hos v\u00e5rt verktyg \u00e4r m\u00e4ngden fall som kr\u00e4ver l\u00f6sning o\u00e4ndlig. I slut\u00e4ndan finns det uppgifter som \u00e4r specifika f\u00f6r varje projekt. D\u00e4rf\u00f6r planerar vi att l\u00e4gga till SDK f\u00f6r plugin-utveckling, s\u00e5 varje utvecklare kan l\u00e4gga till funktionalitet efter eget tycke.<\/p>\n<p><\/p>\n<h2 id=\"rasshirenie-assortimenta-tipov-uzlov\">Ut\u00f6ka sortimentet av nodtyper<\/h2>\n<p><\/p>\n<p>Denna upps\u00e4ttning noder t\u00e4cker inte alla fall som anv\u00e4ndaren beh\u00f6ver. Noder som planeras att l\u00e4ggas till:<\/p>\n<p><\/p>\n<ul>\n<li>Script-nod \u2014 omvandlar och placerar data med hj\u00e4lp av js och motsvarande API. Genom att anv\u00e4nda denna nodtyp kan du g\u00f6ra saker som pre-request och post-request skript i Postman.<\/li>\n<li>GraphQL-nod \u2014 st\u00f6d f\u00f6r graphql<\/li>\n<li>Custom assertion-nod \u2014 m\u00f6jligg\u00f6r utvidgning av setet med befintliga assertioner i projektet.<br \/>\nNaturligtvis \u00e4r detta inte en slutgiltig lista, den kommer st\u00e4ndigt att ut\u00f6kas genom bland annat er feedback.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"faq\">FAQ<\/h1>\n<p><\/p>\n<p><strong>Hur skiljer ni er fr\u00e5n Postman?<\/strong><\/p>\n<p><\/p>\n<ol>\n<li>Konceptet av noder som g\u00f6r det m\u00f6jligt att n\u00e4stan o\u00e4ndligt skala funktionaliteten i projektet.<\/li>\n<li>M\u00e4nskligt l\u00e4sbart format f\u00f6r projektet som sparas i filsystemet, vilket underl\u00e4ttar arbetet med versionskontrollsystem.<\/li>\n<li>M\u00f6jlighet att skapa tester utan programmering och mer avancerat st\u00f6d f\u00f6r js i testredigeraren (autokomplettering, statisk analysator).<\/li>\n<li>Avancerad autokomplettering och markering av aktuella variabelv\u00e4rden<\/li>\n<\/ol>\n<p><\/p>\n<p><strong>\u00c4r detta en open-source produkt?<\/strong><\/p>\n<p><\/p>\n<p>Nej, f\u00f6r n\u00e4rvarande \u00e4r k\u00e4llkoden st\u00e4ngd, men vi \u00f6verv\u00e4ger att \u00f6ppna k\u00e4llkoden i framtiden.<\/p>\n<p><\/p>\n<p><strong>Hur f\u00f6rs\u00f6rjer ni er?<\/strong><\/p>\n<p><\/p>\n<p>Vid sidan av gratisversionen planerar vi att sl\u00e4ppa en betald version av produkten. Den kommer f\u00f6rst och fr\u00e4mst att inneh\u00e5lla funktioner som kr\u00e4ver serverdelar, exempelvis synkronisering.<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Slutsats<\/h1>\n<p><\/p>\n<p>V\u00e5rt projekt g\u00e5r fram\u00e5t med stormsteg mot en stabil release. Men produkten kan redan nu anv\u00e4ndas, och de positiva recensionerna fr\u00e5n v\u00e5ra tidiga anv\u00e4ndare bekr\u00e4ftar det. Vi samlar aktivt in feedback, f\u00f6r utan ett n\u00e4ra samarbete med communityn \u00e4r det om\u00f6jligt att bygga ett bra verktyg. Du kan hitta oss h\u00e4r:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">Officiell webbplats<\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/testmace\">Telegram<\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/testmaceslackin.herokuapp.com\">Slack<\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/testmace\">Facebook<\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/TestMace\/TestMace-issues\">Issues-tracker<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Vi ser fram emot era \u00f6nskem\u00e5l och f\u00f6rslag!<\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">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! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0443\u0434 IT-\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u2014 IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0437\u043d\u0430\u044e\u0442 \u043e \u043d\u0430\u0441 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435\u043e\u0431\u044a\u0435\u043c\u043b\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u0437\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c \u044d\u0442\u043e\u0442 \u0434\u043e\u0441\u0430\u0434\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a. \u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0442\u043e\u0433\u043e \u043a\u0430\u043a, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u0442\u0430\u043a\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0438 \u0440\u0435\u0448\u0438\u043b\u0438 [&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-54187","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0443\u0434 IT-\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u2014 IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace.\" \/>\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\/sv\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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 \u2014 \u043c\u043e\u0449\u043d\u0430\u044f IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0443\u0434 IT-\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u2014 IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api\" \/>\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\udd47TestMace \u2014 kraftfull IDE f\u00f6r arbete med API | ProHoster","description":"Hej alla! Idag vill vi presentera v\u00e5rt produkt f\u00f6r IT-communityn \u2014 en IDE f\u00f6r arbete med API TestMace.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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 \u2014 \u043c\u043e\u0449\u043d\u0430\u044f IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0443\u0434 IT-\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u2014 IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API TestMace.","og:url":"https:\/\/prohoster.info\/sv\/blog\/news\/testmace-moshhnaya-ide-dlya-raboty-s-api","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":"54187","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\/sv\/wp-json\/wp\/v2\/posts\/54187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=54187"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/54187\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=54187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=54187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=54187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}