Hej allihopa! Idag vill vi presentera vĂ„rt produkt â en IDE för arbete med API:n till IT-samhĂ€llet. . Kanske kĂ€nner nĂ„gra av er redan till oss frĂ„n . Men det har inte funnits nĂ„gon omfattande översikt av verktyget, sĂ„ vi Ă„tgĂ€rdar denna olyckliga brist.

Motivation
Vi skulle vilja börja med hur vi kom till detta och beslutade oss för att skapa vÄrt eget verktyg för avancerat arbete med API:n. LÄt oss börja med en lista över funktionerna som produkten bör ha, om vi kan sÀga att det Àr "en IDE för arbete med API:n":
- Skapa och köra förfrÄgningar och skript (sekvenser av förfrÄgningar).
- Skriva olika typer av tester.
- Generera tester.
- Arbeta med API-beskrivningar, inklusive import frÄn format sÄsom Swagger, OpenAPI, WADL osv.
- Mocka förfrÄgningar.
- Bra stöd för ett eller flera programmeringssprÄk för att skriva skript, inklusive integration med populÀra bibliotek.
- och sÄ vidare.
Listan kan kompletteras efter smak. Det Àr ocksÄ viktigt att skapa inte bara sjÀlva IDE:n, utan ocksÄ en viss infrastruktur, sÄsom molnsynkronisering, kommandoradsverktyg, online övervakningstjÀnster osv. I slutÀndan dikterar de senaste Ärens trender att vi inte bara behöver kraftfull funktionalitet i applikationen utan ocksÄ en tilltalande anvÀndargrÀnssnitt.
Vem behöver ett sĂ„dant verktyg? Uppenbarligen alla som pĂ„ nĂ„got sĂ€tt Ă€r involverade i utveckling och testning av API:n â utvecklare och testare =). För de förra rĂ€cker det oftast med att utföra enstaka förfrĂ„gningar och enkla skript, medan för testarna Ă€r detta ett av de viktigaste verktygen, som förutom andra aspekter bör inkludera en kraftfull mekanism för att skriva tester med möjlighet att köra dem i CI.
SÄ, i enlighet med dessa riktlinjer började vi skapa vÄr produkt. LÄt oss titta pÄ vad vi har Ästadkommit hittills.
Snabbstart
LĂ„t oss börja med den första bekantskapen med applikationen. Du kan ladda ner den . För tillfĂ€llet stöds alla tre huvudplattformar â Windows, Linux, MacOS. Ladda ner, installera, starta. Vid första uppstarten kan du se följande fönster:

Klicka pÄ plusset högst upp i innehÄllsomrÄdet för att skapa din första förfrÄgan. Fliken med förfrÄgan ser ut pÄ följande sÀtt:

LÄt oss titta nÀrmare pÄ det. FörfrÄgningsgrÀnssnittet pÄminner mycket om grÀnssnittet för populÀra REST-klienter, vilket gör övergÄngen frÄn sÄdana verktyg enklare. LÄt oss göra den första förfrÄgan pÄ URL:en.

Vid första anblicken tycks svarspanelen inte överraska med nÄgot ovÀntat. Jag vill dock pÄpeka nÄgra punkter:
- Svaret Àr strukturerat i form av ett trÀd, vilket dels ökar informationsinnehÄllet och dels möjliggör vissa intressanta funktioner som jag kommer att beskriva nedan.
- Det finns en flik för pÄstÄenden (Assertions), dÀr en lista över tester för denna förfrÄgan visas.
Som ni kan se kan vÄrt verktyg anvÀndas som en bekvÀm REST-klient. Men vi skulle inte vara hÀr om dess funktioner begrÀnsades till att bara skicka förfrÄgningar. HÀrnÀst kommer jag att beskriva de grundlÀggande begreppen och funktionaliteterna i TestMace.
GrundlÀggande begrepp och funktioner
Nod
Funktionaliteten i TestMace Àr uppdelad i olika typer av noder. I exemplet ovan har vi demonstrerat arbetet med RequestStep-noden. Just nu finns dock ocksÄ följande typer av noder tillgÀngliga i applikationen:
- RequestStep. Detta Àr en nod som gör det möjligt att skapa en förfrÄgan. Som underordnad nod kan den endast ha en Assertion-nod.
- Assertion. Noden anvÀnds för att skriva tester. Den kan bara vara en underordnad nod till RequestStep-noden.
- Folder. Gör det möjligt att gruppera Folder- och RequestStep-noder inom sig.
- Project. Detta Àr rot-noden som automatiskt skapas nÀr ett projekt skapas. I övrigt upprepar den funktionen hos Folder-noden.
- Link. LÀnk till Folder eller RequestStep-nod. Möjliggör ÄteranvÀndning av förfrÄgningar och scenarier.
- och sÄ vidare.
Noderna placeras i scratches (panelen nere till vÀnster, anvÀnds för snabb skapande av "engÄngsförfrÄgningar") och i project (panelen uppe till vÀnster), som vi kommer att titta nÀrmare pÄ.
Projektet
NÀr du startade applikationen kanske du lade mÀrke till en ensam rad 'Project' uppe till vÀnster. Detta Àr rotat av projekttrÀdet. NÀr ett projekt startas skapas ett temporÀrt projekt, vars plats beror pÄ ditt operativsystem. NÀr som helst kan du flytta projektet till en mer bekvÀm plats.
Projektets huvudsakliga syfte Àr att möjliggöra lagring av arbete i filsystemet och vidare synkronisering via versionskontrollsystem, körning av skript i CI, granskning av förÀndringar osv.
Variabler
Variabler Àr en av de centrala mekanismerna i applikationen. De av er som arbetar med verktyg som TestMace har kanske redan förstÄtt vad det handlar om. SÄ, variabler Àr ett sÀtt att lagra gemensamma data och kommunicera mellan noder. En motsvarighet Àr till exempel miljövariabler i Postman eller Insomnia. Men vi har gÄtt lÀngre och utvecklat Àmnet. I TestMace kan variabler stÀllas in pÄ nodnivÄ. Vilken som helst. Det finns Àven en mekanism för arv av variabler frÄn förÀldrar och överskrivning av variabler i avkommor. Utöver detta finns det ett antal inbyggda variabler, namnen pÄ de inbyggda variablerna börjar med $. HÀr Àr nÄgra av dem:
$prevStepâ en referens till variablerna i den föregĂ„ende noden$nextStepâ en referens till variablerna i den följande noden$parentâ samma sak, men för en förĂ€lder$responseâ svaret frĂ„n servern$envâ aktuella miljövariabler$dynamicVarâ dynamiska variabler som skapas under körning av scenariot eller förfrĂ„gan
$env â detta Ă€r i princip vanliga variabler pĂ„ projekt-nivĂ„, men uppsĂ€ttningen av miljövariabler Ă€ndras beroende pĂ„ den valda miljön.
Ă
tkomst till variabeln görs via ${variable_name}
Som vÀrde för 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
http://${host}:${port}/${endpoint}.
Det Àr sÀrskilt vÀrt att nÀmna möjligheten att tilldela variabler under körning av skript. Till exempel, det uppstÄr ofta behovet av att lagra autentiseringsuppgifter (token eller hela headers), som kom frÄn servern efter en lyckad inloggning. TestMace lÄter dig spara sÄdana uppgifter i dynamiska variabler hos en av förÀldrarna. För att undvika kollisioner med redan existerande "statisk" variabler, har dynamiska variabler placerats i ett separat objekt. $dynamicVar.
Scenarier
Genom att anvÀnda alla ovanstÄende möjligheter kan du köra hela scenarier för förfrÄgningar. Till exempel, skapa entitet -> begÀr entitet -> ta bort entitet. I detta fall kan du till exempel anvÀnda en Folder-nod för att gruppera flera RequestStep noder.
Autocompletion och syntaktisk fÀrgning av uttrycksvÀrden
För att arbeta effektivt med variabler (och mer) Àr autocompleting nödvÀndigt. Och sjÀlvklart en belysning av uttryckets vÀrde, sÄ att det blir enklare och smidigare att klargöra vad en viss variabel har för vÀrde. Det Àr just ett sÄdant fall dÀr det Àr bÀttre att se en gÄng Àn att höra hundra gÄnger:

Det Àr vÀrt att nÀmna att autocompleting inte bara tillÀmpas pÄ variabler, utan ocksÄ, till exempel, pÄ rubriker, vÀrden av specifika rubriker (till exempel autocompleting för Content-Type-rubriken), protokoll och mycket mer. Listan fylls stÀndigt pÄ allt eftersom applikationen vÀxer.
Ă ngra/redo
Att Ängra/Äterföra Àndringar Àr en mycket anvÀndbar funktion, men av nÄgon anledning implementeras den inte överallt (och verktyg för att arbeta med API Àr inget undantag). Men vi gör inte sÄ!) à ngra/redo Àr implementerat i hela projektet, vilket möjliggör att Ängra inte bara redigerandet av en specifik nod, utan Àven dess skapande, radering, flyttning, etc. De mest kritiska operationerna krÀver bekrÀftelse.
Skapa tester
Det Àr Assertion-noden som ansvarar för skapande av tester. En av de viktigaste funktionerna Àr möjligheten att skapa tester utan programmering, med hjÀlp av inbyggda redigerare.
Assertion-noden bestÄr av en uppsÀttning asserts (pÄstÄenden). Varje assert har sin typ; just nu finns det flera typer av asserts.
JĂ€mför vĂ€rden â enkelt jĂ€mför tvĂ„ vĂ€rden. Det finns flera jĂ€mförelseoperatorer som "lika med", "inte lika med", "större", "större Ă€n eller lika med", "mindre", "mindre Ă€n eller lika med."
InnehĂ„ller vĂ€rde â kontrollerar nĂ€rvaron av en delstrĂ€ng i en strĂ€ng.
XPath â kontrollerar att ett visst vĂ€rde finns vid en vĂ€ljare i XML.
JavaScript assertion â en godtycklig skript pĂ„ JavaScript, som returnerar true vid framgĂ„ng och false vid misslyckande.
Jag noterar att endast den sista krÀver att anvÀndaren har programmeringskunskaper, de andra tre assertioner skapas med hjÀlp av grafiskt grÀnssnitt. HÀr Àr, till exempel, hur dialogrutan för att skapa jÀmföra vÀrden assertion ser ut:

KörsbÀret pÄ tÄrtan Àr snabb skapande av asserts frÄn svaret, bara se pÄ detta!

DÀremot har sÄdana asserts uppenbara begrÀnsningar, nÀr du stöttar pÄ dem kan du anvÀnda javascript assertion. Och hÀr erbjuder TestMace ocksÄ en bekvÀm miljö med autocompleting, syntaxbelysning och till och med en statisk analyzator.
API-beskrivning
TestMace gör det möjligt att inte bara anvÀnda API:et, utan Àven att dokumentera det. Beskrivningen har en hierarkisk struktur och integreras smidigt i resten av projektet. Dessutom finns det nu möjlighet att importera API-beskrivningar frÄn Swagger 2.0 / OpenAPI 3.0-format. Beskrivningen Àr inte bara stillastÄende utan integreras tÀtt med projektets övriga delar, till exempel finns det automatisk komplettering av URL:er, HTTP-huvuden, query-parametrar och mer, och i framtiden planerar vi att lÀgga till tester för att kontrollera att svaret överensstÀmmer med API-beskrivningen.
Noddelning
Fallstudie: Du skulle vilja dela en problematisk förfrÄgan eller till och med ett helt scenario med en kollega eller enkelt bifoga den till en bugg. TestMace tÀcker Àven detta fall: applikationen gör det möjligt att serialisera vilken nod som helst och till och med ett deltrÀd till en URL. Kopiera och klistra in sÄ har du enkelt flyttat förfrÄgan till en annan maskin eller projekt.
LÀsligt format för projekts förvaring
För nÀrvarande lagras varje nod i en separat fil med filÀndelsen yml (som i fallet med Assertion-noden), eller i en mapp med nodens namn och en fil som heter index.yml inuti den.
SÄ hÀr ser till exempel filen med förfrÄgan ut som vi gjorde i översikten ovan:
index.yml
children: []
variables: {}
type: RequestStep
assignVariables: []
requestData:
request:
method: GET
url: 'https://next.json-generator.com/api/json/get/NJv-NT-U8'
headers: []
disabledInheritedHeaders: []
params: []
body:
type: Json
jsonBody: ''
xmlBody: ''
textBody: ''
formData: []
file: ''
formURLEncoded: []
strictSSL: Inherit
authData:
type: inherit
name: Scratch 1Som du ser Àr allt helt klart. Om sÄ önskas kan detta format redigeras enkelt Àven manuellt.
Hierarkin av mappar i filsystemet speglar helt hierarkin av noder i projektet. Till exempel ett scenario av typen:

Mappas i filsystemet till följande struktur (endast hierarkin av mappar visas, men innebörden Àr klar)

Vilket underlÀttar processen för granskning av projektet.
Import frÄn Postman
Efter att ha lÀst allt ovanstÄende kanske nÄgra anvÀndare vill prova (eller hur?) den nya produkten eller (vad vet man!) anvÀnda den fullt ut i sitt projekt. Men migrationen kan stoppas av ett stort antal arbeten i samma Postman. För sÄdana fall stödjer TestMace import av samlingar frÄn Postman. För nÀrvarande stöds import utan tester, men vi utesluter inte att stödja dem senare.
Planer
Jag hoppas att mÄnga av er som har lÀst detta stycke har uppskattat vÄr produkt. Men det Àr inte allt! Arbete med produkten pÄgÄr för fullt och hÀr Àr nÄgra funktioner som vi planerar att lÀgga till inom kort.
Molnsynkronisering
En av de mest efterfrÄgade funktionerna. Just nu erbjuder vi versionskontrollsystem som en synkronisering, vilket gör att vi gör formatet mer vÀnligt för denna typ av lagring. Men för mÄnga passar inte detta arbetsflöde, sÄ vi planerar att lÀgga till en mer vÀlbekant synkroniseringsmekanism via vÄra servrar.
CLI
Som redan nÀmnts, produkter pÄ IDE-nivÄ Àr beroende av olika integrationer med redan existerande applikationer eller arbetsflöden. CLI Àr nödvÀndigt för att integrera tester skrivna i TestMace i kontinuerlig integration. Arbetet med CLI pÄgÄr för fullt, i de tidiga versionerna kommer det att finnas ett projekt med en enkel konsolrapport. Framöver planerar vi att lÀgga till rapporten i JUnit-format.
Plugin-system
Trots kraften hos vÄrt verktyg Àr mÀngden fall som krÀver lösning oÀndlig. I slutÀndan finns det uppgifter som Àr specifika för varje projekt. DÀrför planerar vi att lÀgga till SDK för plugin-utveckling, sÄ varje utvecklare kan lÀgga till funktionalitet efter eget tycke.
Utöka sortimentet av nodtyper
Denna uppsÀttning noder tÀcker inte alla fall som anvÀndaren behöver. Noder som planeras att lÀggas till:
- Script-nod â omvandlar och placerar data med hjĂ€lp av js och motsvarande API. Genom att anvĂ€nda denna nodtyp kan du göra saker som pre-request och post-request skript i Postman.
- GraphQL-nod â stöd för graphql
- Custom assertion-nod â möjliggör utvidgning av setet med befintliga assertioner i projektet.
Naturligtvis Àr detta inte en slutgiltig lista, den kommer stÀndigt att utökas genom bland annat er feedback.
FAQ
Hur skiljer ni er frÄn Postman?
- Konceptet av noder som gör det möjligt att nÀstan oÀndligt skala funktionaliteten i projektet.
- MÀnskligt lÀsbart format för projektet som sparas i filsystemet, vilket underlÀttar arbetet med versionskontrollsystem.
- Möjlighet att skapa tester utan programmering och mer avancerat stöd för js i testredigeraren (autokomplettering, statisk analysator).
- Avancerad autokomplettering och markering av aktuella variabelvÀrden
Ăr detta en open-source produkt?
Nej, för nÀrvarande Àr kÀllkoden stÀngd, men vi övervÀger att öppna kÀllkoden i framtiden.
Hur försörjer ni er?
Vid sidan av gratisversionen planerar vi att slÀppa en betald version av produkten. Den kommer först och frÀmst att innehÄlla funktioner som krÀver serverdelar, exempelvis synkronisering.
Slutsats
VÄrt projekt gÄr framÄt med stormsteg mot en stabil release. Men produkten kan redan nu anvÀndas, och de positiva recensionerna frÄn vÄra tidiga anvÀndare bekrÀftar det. Vi samlar aktivt in feedback, för utan ett nÀra samarbete med communityn Àr det omöjligt att bygga ett bra verktyg. Du kan hitta oss hÀr:
Vi ser fram emot era önskemÄl och förslag!
KĂ€lla: habr.com
