Ahoj všichni! Dnes chceme představit našemu IT společenství náš produkt – IDE pro práci s API . Možná někteří z vás o nás již ví z . Nicméně nebyl proveden komplexní přehled nástroje, proto se snažíme tento nepříjemný nedostatek napravit.

Motivace
Rádi bychom začali tím, jak jsme se vlastně dostali k této myšlence a rozhodli se vytvořit svůj nástroj pro pokročilou práci s API. Začneme seznamem funkčních možností, kterými by měl produkt, o kterém podle našeho názoru můžeme říci, že je to „IDE pro práci s API“, disponovat:
- Vytváření a provádění dotazů a skriptů (pořadí dotazů)
- Psání různých typů testů
- Generování testů
- Práce s popisem API, včetně importu z formátů jako Swagger, OpenAPI, WADL atd.
- Mockování dotazů
- Dobrá podpora jednoho nebo více programovacích jazyků pro psaní skriptů, včetně integrace s populárními knihovnami
- atd.
Seznam lze doplnit dle libosti. Důležité je vytvořit nejen samotné IDE, ale i určitou infrastrukturu, jako je cloudová synchronizace, nástroje příkazového řádku, služba online monitorování atd. Nakonec trendy posledních let nám dávají najevo, že kromě silné funkce aplikace, je také důležitý její příjemný design.
Pro koho je tento nástroj určen? Očividně pro všechny, kteří mají co do činění s vývojem a testováním API – vývojáře a testery =). Pokud pro první by často stačilo provádět jednotlivé dotazy a jednoduché scénáře, pak pro testery je to jeden z hlavních nástrojů, který kromě jiného musí zahrnovat silný mechanismus pro psaní testů s možností jejich spuštění v CI.
Takže, v souladu s těmito orientacemi, jsme začali vytvářet svůj produkt. Podívejme se, co jsme v této fázi vytvořili.
Rychlý start
Začněme prvním seznámením s aplikací. Můžete si ji stáhnout . V současnosti jsou podporovány všechny 3 hlavní platformy – Windows, Linux, MacOS. Stáhněte si, nainstalujte a spusťte. Při prvním spuštění můžete spatřit následující okno:

Klikněte na plus nahoře v oblasti obsahu pro vytvoření prvního dotazu. Záložka s dotazem vypadá takto:

Podívejme se na něj podrobněji. Rozhraní pro dotazy velmi připomíná rozhraní populárních REST klientů, což usnadňuje migraci z podobných nástrojů. Pojďme provést první dotaz na url

Na první pohled se zdá, že odpovědní panel také nepřináší žádná překvapení. Rád bych však upozornil na některé momenty:
- Tělo odpovědi je prezentováno jako strom, což jednak zvyšuje informativnost a jednak umožňuje přidat některé zajímavé funkce, o kterých se zmíním níže.
- Existuje záložka Assertions, ve které je zobrazen seznam testů pro daný dotaz.
Jak můžete vidět, náš nástroj lze použít jako pohodlný REST klient. Avšak nesešli jsme se zde, pokud by jeho možnosti byly omezeny pouze na odesílání dotazů. Nyní popíšu základní pojmy a funkční možnosti TestMace.
Základní pojmy a možnosti
Uzla
Funkčnost TestMace je rozdělena do různých typů uzlů. Na příkladu výše jsme demonstrovali práci s RequestStep uzlem. Nyní jsou však v aplikaci k dispozici také následující typy uzlů:
- RequestStep. Toto je uzel, pomocí kterého můžete vytvořit dotaz. Jako podřízený prvek může mít pouze jeden Assertion uzel.
- Assertion. Uzel se používá k psaní testů. Může být podřízeným uzlem pouze pro RequestStep uzel.
- Folder. Umožňuje seskupit Folder a RequestStep uzly uvnitř sebe.
- Project. Toto je kořenový uzel, který se vytváří automaticky při vytváření projektu. Jinak opakuje funkční možnosti uzlu Folder.
- Link. Odkaz na Folder nebo RequestStep uzel. Umožňuje znovu použít dotazy a scénáře.
- atd.
Uzly se nacházejí v scratches (panel v levém dolním rohu, slouží k rychlému vytváření „jednorázových“ dotazů) a v project (panel v levém horním rohu), na který se podrobněji zaměříme.
Projekt
Při spuštění aplikace jste si mohli všimnout osamělé řádky Project v levém horním rohu. Toto je kořen stromu projektu. Při spuštění projektu se vytváří dočasný projekt, jehož cesta závisí na vaší operačním systému. Kdykoli můžete projekt přesunout na místo, které vám vyhovuje.
Hlavním účelem projektu je možnost ukládat vývoj v souborovém systému a následně synchronizovat prostřednictvím systémů pro kontrolu verzí, provádění scénářů v CI, revizi změn atd.
Proměnné
Proměnné jsou jedním z klíčových mechanismů aplikace. Ti z vás, kteří pracují s nástroji, jako je TestMace, již možná pochopili, o čem je řeč. Takže, proměnné jsou způsob, jak uchovávat sdílená data a komunikovat mezi uzly. Analogicky to jsou například proměnné prostředí v Postman nebo Insomnia. Nicméně, šli jsme dál a rozvinuli toto téma. V TestMace lze proměnné nastavit na úrovni jakéhokoli uzlu. Existuje také mechanismus dědění proměnných od předků a překrývání proměnných u potomků. Kromě toho existuje řada vestavěných proměnných, jejichž názvy začínají na $. Zde je několik z nich:
$prevStep— odkaz na proměnné předchozího uzlu$nextStep— odkaz na proměnné následujícího uzlu$parent— totéž, ale jen pro předka$response— odpověď od serveru$env— aktuální proměnné prostředí$dynamicVar— dynamické proměnné, které se vytvářejí během provádění skriptu nebo požadavku
$env — to jsou v podstatě běžné proměnné úrovně Project uzlu, ale sada proměnných prostředí se mění v závislosti na vybraném prostředí.
Přístup k proměnné se provádí přes ${variable_name}
Jako hodnota proměnné může být jiná proměnná, nebo dokonce celé výrazy. Například jako proměnná url může být výraz typu
http://${host}:${port}/${endpoint}.
Samostatně stojí za zmínku možnost přiřazení proměnných během provádění skriptu. Například často nastává potřeba uchovat autentizační údaje (token nebo celý hlavičkový řetězec), které přišly ze serveru po úspěšném přihlášení. TestMace umožňuje uchovávat podobná data do dynamických proměnných jednoho z předků. Aby se předešlo kolizím s již existujícími "statickými" proměnnými, jsou dynamické proměnné umístěny do samostatného objektu. $dynamicVar.
Scénáře
Použitím všech výše uvedených možností můžete vykonávat celé scénáře požadavků. Například, vytvoření entity -> požadavek na entitu -> smazání entity. V tomto případě můžete například použít Folder uzel pro seskupení několika RequestStep uzlů.
Automatické doplňování a zvýraznění hodnoty výrazu
Pro pohodlnou práci s proměnnými (a nejen s nimi) je potřebné automatické doplňování. A samozřejmě zvýraznění hodnoty výrazu, aby bylo snazší a pohodlnější zjistit, čemu odpovídá ta či ona proměnná. Tady je to přesně ten případ, kdy je lepší jednou vidět, než stokrát slyšet:

Je třeba poznamenat, že automatické doplňování je realizováno nejen pro proměnné, ale také například pro hlavičky, hodnoty určitých hlaviček (například automatické doplňování pro hlavičku Content-Type), protokoly a mnohé další. Seznam se neustále rozšiřuje s růstem aplikace.
Zpět/opakovat
Zpět/opakovat změny je velmi pohodlná věc, avšak z nějakého důvodu se implementuje daleko ne všude (a nástroje pro práci s API nejsou výjimkou). Ale my mezi takovými nejsme!) Zpět/opakovat je u nás realizováno v rámci celého projektu, což umožňuje zrušit nejen úpravy určité uzlu, ale také jeho vytvoření, smazání, přesunutí atd. Nejdůležitější operace vyžadují potvrzení.
Vytváření testů
Za vytváření testů odpovídá uzel Assertion. Jednou z hlavních vlastností je možnost vytváření testů bez programování, s využitím integrovaných editorů.
Uzel Assertion se skládá z množiny assertionů (tvrzení). Každý assertion má svůj typ, v současnosti existuje několik typů assertionů.
Porovnat hodnoty — jednoduše porovnává 2 hodnoty. Existuje několik porovnávacích operatorů „rovná se“, „nerovná se“, „větší“, „větší nebo rovno“, „menší“, „menší nebo rovno“.
Obsahuje hodnotu — kontroluje, zda podřetězec je obsažen ve řetězci.
XPath — kontroluje, zda má selektor v XML určitou hodnotu.
JavaScript assertion — libovolný skript v jazyce javascript, který vrací true v případě úspěchu a false v případě neúspěchu.
Poznamenávám, že pouze poslední vyžaduje od uživatele dovednosti programování, ostatní 3 assertiony se vytvářejí pomocí grafického rozhraní. Tady je například, jak vypadá dialog pro vytváření assertion porovnání hodnot:

Třešničkou na dortu je rychlé vytváření assertionů z odpovědi, jen se podívejte na to!

Nicméně takové assertiony mají zřejmá omezení, při jejichž setkání můžete použít javascript assertion. A tady TestMace také poskytuje pohodlné prostředí s automatickým doplňováním, zvýrazněním syntaktických chyb a dokonce i se statickým analyzátorem.
Popis API
TestMace umožňuje nejen využívat API, ale také jej dokumentovat. Při tom má samotný popis hierarchickou strukturu a organicky zapadá do ostatního projektu. Kromě toho v současné době existuje možnost importu popisu API z formátů Swagger 2.0 / OpenAPI 3.0. Samotný popis není jen mrtvou váhou, ale úzce se integruje s ostatní částí projektu, konkrétně je dostupné automatické doplňování URL, HTTP hlaviček, dotazových parametrů a dalšího, a v budoucnu plánujeme přidat testy na shodu odpovědi s popisem API.
Sdílení uzlů
Případ: chtěli byste sdílet problémový dotaz nebo dokonce celý scénář s kolegou, nebo jej prostě připojit k chybě. TestMace pokrývá i tento případ: aplikace umožňuje serializaci jakéhokoli uzlu a dokonce podstromu do URL. Kopírování a vložení a už jste bez problémů přenesli dotaz na jiný počítač nebo projekt.
Člověku čitelný formát ukládání projektu
V současné době každý uzel je uložen v samostatném souboru s příponou yml (jak je tomu u uzlu Assertion), nebo v složce s názvem uzlu a souborem index.yml uvnitř ní.
Takhle například vypadá soubor s dotazem, který jsme udělali v přehledu výše:
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 1Jak vidíte, všechno je zcela jasné. Při přání je tento formát zcela pohodlné editovat i ručně.
Hierarchie složek v souborovém systému zcela odpovídá hierarchii uzlů v projektu. Například scénář ve formátu:

Je mapován v souborovém systému na následující strukturu (ukázána pouze hierarchie složek, ale podstata je jasná)

Co usnadňuje proces revize projektu.
Import z Postmanu
Po přečtení všech výše uvedených informací někteří uživatelé budou chtít vyzkoušet (tak že?) nový produkt nebo (co čert nechtěl!) jej plně využít ve svém projektu. Ovšem migraci může zastavit velké množství vývojů ve stejném Postmanu. Pro takové případy TestMace podporuje import kolekcí z Postmanu. V současné době je podporován import bez testů, nicméně v budoucnu nevyřazujeme ani jejich podporu.
Plány
Doufám, že náš produkt zaujal mnohé z těch, kteří dočetli až sem. To však není vše! Práce na produktu pokračuje naplno a zde jsou některé funkce, které plánujeme brzy přidat.
Cloudová synchronizace
Jedna z nejžádanějších funkcí. V současnosti nabízíme pro synchronizaci využít systémy kontroly verzí, pro což upravujeme formát tak, aby byl přívětivější pro tento typ ukládání. Nicméně ne každý takový tok práce vyhovuje, proto plánujeme přidat všem známý mechanismus synchronizace přes naše servery.
CLI
Jak již bylo uvedeno výše, produkty na úrovni IDE se neobejdou bez různých integrací s již existujícími aplikacemi nebo workflow. CLI je přesně to, co potřebujeme pro integraci testů napsaných v TestMace do procesu continuous integration. Práce na CLI probíhá naplno, v raných verzích bude spuštění projektu s jednoduchou konzolovou zprávou. V budoucnu plánujeme přidat výstup zprávy ve formátu JUnit.
Pluginový systém
Navzdory veškeré síle našeho nástroje je množství případů, které je třeba vyřešit, nekonečné. Koneckonců existují úkoly specifické pro konkrétní projekt. Proto plánujeme v budoucnu přidat SDK pro vývoj pluginů, aby každý vývojář mohl přidat funkčnost podle svých představ.
Rozšíření sortimentu typů uzlů
Tento soubor uzlů nepokrývá všechny případy potřebné uživateli. Uzel, který plánujeme přidat:
- Script uzel — transformuje a ukládá data pomocí js a příslušného API. Použitím tohoto typu uzlu lze vytvořit věci jako pre-request a post-request skripty v Postman.
- GraphQL uzel — podpora graphql
- Custom assertion uzel — umožní rozšířit sadu existujících assertionů v projektu
Samozřejmě, že to není konečný seznam, bude se neustále rozšiřovat i na základě vaší zpětné vazby.
Často kladené dotazy
Čím se lišíte od Postman?
- Koncept uzlů, který umožňuje téměř nekonečně škálovat funkčnost projektu
- Člověkem čitelný formát projektu s uložením v souborovém systému, což usnadňuje práci se systémy kontroly verzí
- Možnost vytváření testů bez programování a pokročilejší podpora js v editoru testů (automatické doplňování, statický analyzátor)
- Pokročilé automatické doplňování a zvýraznění aktuálních hodnot proměnných
Je to produkt s otevřeným zdrojovým kódem?
Ne, v současnosti jsou zdrojové kódy uzavřeny, ale do budoucna zvažujeme možnost jejich otevření.
Z čeho žijete?)
Kromě bezplatné verze plánujeme vydat i placenou verzi produktu. Ta bude především obsahovat funkce vyžadující serverovou část, jako například synchronizaci.
Závěr
Náš projekt se rychlými kroky blíží ke stabilnímu vydání. Již nyní je ale produkt k použití a pozitivní zpětná vazba od našich raných uživatelů to potvrzuje. Aktivně shromažďujeme zpětnou vazbu, protože bez úzké spolupráce s komunitou není možné vybudovat dobrý nástroj. Najdete nás zde:
Těšíme se na vaše přání a návrhy!
Zdroj: habr.com
