Pozdravljeni! Danes vam želimo predstaviti naš izdelek - IDE za delo z API-ji. Morda nekateri od vas že poznate nas iz . Vendar doslej še ni bilo celovitega pregleda orodja, zato odpravimo to nadležno pomanjkljivost.

Motivacija
Želeli bi začeti s tem, kako smo prišli do takšnega orodja in se odločili razviti naš lasten izdelek za napredno delo z API-ji. Začnimo s seznamom funkcionalnosti, ki jih mora imeti izdelek, o katerem, po našem mnenju, lahko rečemo, da je "IDE za delo z API-ji":
- Ustvarjanje in izvajanje poizvedb in scenarijev (zaporedje poizvedb)
- Pisanje različnih testov
- Generiranje testov
- Delo z opisom API-ja, vključno z uvozom iz formatov, kot so Swagger, OpenAPI, WADL itd.
- Mokiranje poizvedb
- Dobra podpora za enega ali več programskih jezikov pri pisanju skript, vključno z integracijo s priljubljenimi knjižnicami
- itd.
Seznam lahko dopolnite po svojem okusu. Pomembno je ustvariti ne le samo IDE, temveč tudi določeno infrastrukturo, kot je oblačna sinhronizacija, orodja ukazne vrstice, storitev spletnega nadzora itd. Na koncu koncev, trendi zadnjih let narekujejo ne le zmogljivo funkcionalnost aplikacije, temveč tudi njen prijeten vmesnik.
Za koga je primerno to orodje? Očitno za vse tiste, ki so kakorkoli povezani z razvojem in testiranjem API-jev - programerje in testerje =). Medtem ko za prve pogosto zadostuje izvajanje posameznih poizvedb in preprostih scenarijev, je za testerje to eno izmed glavnih orodij, ki poleg vsega mora imeti močan mehanizem za pisanje testov z možnostjo njihovih izvajanj v CI.
Torej, v skladu s temi usmeritvami smo začeli razvijati svoj izdelek. Poglejmo, kaj smo dosegli v tej fazi.
Hiter začetek
Začnimo s prvim srečanjem z aplikacijo. Prenesete jo lahko . Trenutno podpiramo vse tri glavne platforme - Windows, Linux, MacOS. Prenesite, namestite, zaženite. Ob prvem zagonu lahko vidite naslednje okno:

Kliknite na plus na vrhu območja vsebine, da ustvarite svojo prvo poizvedbo. Zavihek s poizvedbo izgleda takole:

Poglejmo to malo podrobneje. Vmesnik zahtevka zelo spominja na vmesnike priljubljenih rest-strank, kar olajša prenos s takšnih orodij. Izvedimo prvi zahtevek na url

Na prvi pogled odzivna plošča tudi ne prinaša kakršnih koli nepričakovanih presenečenj. Vendar pa bi rad opozoril na nekatere točke:
- Telo odgovora ima predstavitev v obliki drevesa, kar najprej povečuje informativnost in drugič omogoča dodajanje nekaterih zanimivih funkcij, o katerih bomo govorili spodaj.
- Obstaja zavihek Assertions, v katerem je prikazan seznam testov za ta zahtevek.
Kot lahko opazite, lahko naše orodje uporabljamo kot priročen rest-klient. Vendar pa se tu nismo zbrali, če bi bile njegove možnosti omejene samo na oddajo zahtevkov. Naslednje bom predstavil glavne pojme in funkcionalnosti TestMace.
Glavni pojmi in možnosti
Sistem
Funkcionalnost TestMace je razdeljena po različnih vrstah sistemov. Na zgornjem primeru smo prikazali delovanje RequestStep sistema. Vendar pa so v aplikaciji trenutno na voljo tudi naslednje vrste sistemov:
- RequestStep. To je sistem, s pomočjo katerega lahko ustvarite zahtevek. Kot podrejen element lahko vsebuje le en Assertion sistem.
- Assertion. Sistem se uporablja za pisanje testov. Lahko je podrejeni sistem le za RequestStep sistem.
- Folder. Omogoča skupno grupiranje Folder in RequestStep sistemov znotraj sebe.
- Project. To je korenski sistem, ki se ustvari samodejno ob ustvarjanju projekta. V ostalem ponavlja funkcionalnosti Folder sistema.
- Link. Povezava na Folder ali RequestStep sistem. Omogoča ponovno uporabo zahtevkov in scenarijev.
- itd.
Sistemi so razporejeni v scratches (plošča spodaj levo, služi za hitro ustvarjanje 'enkratnih' zahtevkov) in v project (plošča zgoraj levo), na kateri se bomo podrobneje ustavili.
Projekt
Ob zagonu aplikacije ste morda opazili osamljeno vrstico Project v zgornjem levem kotu. To je koren drevesa projekta. Ob zagonu projekta se ustvari začasni projekt, katerega pot je odvisna od vašega operacijskega sistema. Kadarkoli lahko projekt prenesete na mesto, ki vam ustreza.
Glavna funkcija projekta je omogočiti shranjevanje razvojnih del v datotečnem sistemu ter nadaljnje sinhronizacije preko sistemov za nadzor različic, izvajanje scenarijev v CI, pregled sprememb itd.
Spremenljivke
Spremenljivke so mehanizem, ki je ključnega pomena za aplikacijo. Tisti izmed vas, ki delate z orodji, kot je TestMace, ste morda že razumeli, o čem teče beseda. Torej, spremenljivke so način za shranjevanje skupnih podatkov in komunikacijo med vozlišči. Primer so okoljske spremenljivke v Postmanu ali Insomnii. Vendar smo šli še dlje in to temo razvili. V TestMace je mogoče spremenljivke nastaviti na ravni katerega koli vozlišča. Obstaja tudi mehanizem dedovanja spremenljivk od prednikov in prekrivanja spremenljivk v potomcih. Poleg tega so na voljo številne vgrajene spremenljivke, katerih imena se začnejo z $. Tukaj je nekaj od njih:
$prevStep— povezava do spremenljivk prejšnjega vozlišča$nextStep— povezava do spremenljivk naslednjega vozlišča$parent— to je enako, vendar za prednika$response— odgovor strežnika$env— trenutne okoljske spremenljivke$dynamicVar— dinamične spremenljivke, ki se ustvarjajo med izvajanjem scenarija ali zahteve
$env — v bistvu gre za običajne spremenljivke na ravni projekta, vendar se nabor okoljskih spremenljivk spreminja glede na izbrano okolje.
Dostop do spremenljivke se izvede preko ${variable_name}
Kot vrednost spremenljivke je lahko druga spremenljivka ali celo celotno izraz. Na primer, kot spremenljivka url je lahko izraz, ki izgleda takole
http://${host}:${port}/${endpoint}.
Posebej je treba omeniti možnost dodeljevanja spremenljivk med izvajanjem skripte. Na primer, pogosto nastane potreba po shranjevanju avtentifikacijskih podatkov (žetona ali celotne glave), ki so prišli s strežnika po uspešnem prijavljenju. TestMace omogoča shranjevanje tovrstnih podatkov v dinamične spremenljivke enega od prednikov. Da bi se izognili kolizijam z že obstoječimi 'statičnimi' spremenljivkami, so dinamične spremenljivke ločene v poseben objekt $dynamicVar.
Scenariji
Z uporabo vseh zgoraj navedenih možnosti lahko izvajate celotne scenarije zahtevkov. Na primer, ustvarjanje entitete -> zahteva entitete -> izbris entitete. V tem primeru lahko na primer uporabite vozlišče Folder za grupiranje več vozlišč RequestStep.
Samodejno dopolnjevanje in osvetlitev vrednosti izraza
Za udobno delo z spremenljivkami (in ne samo) je potrebno samodejno dopolnjevanje. Seveda je tu tudi osvetlitev vrednosti izraza, da je lažje in bolj udobno preveriti, koliko znaša ta ali ona spremenljivka. To je tisti primer, kjer je bolje enkrat videti, kot stokrat slišati:

Omeniti je treba, da je samodejno dopolnjevanje izvedeno ne le za spremenljivke, temveč tudi, na primer, za naslove, vrednosti določenih naslovov (na primer, samodejno dopolnjevanje za naslov Content-Type), protokole in še mnogo več. Seznam se nenehno širi z rastjo aplikacije.
Razveljavitev/ponovitev
Razveljavitev/ponovitev sprememb je zelo priročna stvar, vendar se nekako ne izvaja povsod (in orodja za delo z API niso izjema). A mi nismo taki!) Razveljavitev/ponovitev pri nas je implementirana v okviru celotnega projekta, kar omogoča razveljavitev ne samo urejanja določene vozlišča, temveč tudi njeno ustvarjanje, brisanje, premikanje itd. Najbolj kritične operacije zahtevajo potrditev.
Ustvarjanje testov
Za ustvarjanje testov je odgovoren vozlišče Assertion. Ena od glavnih značilnosti je možnost ustvarjanja testov brez programiranja, z uporabo vgrajenih urednikov.
Vozlišče Assertion je sestavljeno iz niza trditev (assertion). Vsaka trditev ima svoj tip, trenutno obstaja več tipov trditev.
Compare values — preprosto primerja 2 vrednosti. Obstaja več primerjalnih operatorjev: 'enaako', 'ni enako', 'več', 'več ali enako', 'manj', 'manj ali enako'.
Contains value — preverja, ali podniz obstaja v nizu.
XPath — preverja, ali na izbranem elementu v XML leži določena vrednost.
JavaScript assertion — poljuben skript v jeziku JavaScript, ki vrne true v primeru uspeha in false v primeru neuspeha.
Opazil bom, da zadnji zahteva od uporabnika programerske veščine, medtem ko se ostale 3 trditve ustvarjajo s pomočjo grafičnega vmesnika. Tukaj je, kako izgleda pogovor za ustvarjanje trditve za primerjavo vrednosti:

Češnja na torti je hitro ustvarjanje trditev iz odgovora, samo poglejte to!

Vendar pa te trditve imajo očitne omejitve, pri katerih se lahko zatečete k JavaScript trditvam. In tu TestMace prav tako ponuja udobno okolje z samodejnim dopolnjevanjem, poudarjanjem sintakse in celo s statičnim analizatorjem.
Opis API
TestMace omogoča ne samo uporabo API, temveč tudi njegovo dokumentiranje. Pri tem ima samo opis tudi hierarhično strukturo in se organsko vključuje v preostali projekt. Poleg tega trenutno obstaja možnost uvoza opisa API iz formatov Swagger 2.0 / OpenAPI 3.0. Sam opis ne leži mrtvo, temveč tesno integrira z ostalim delom projekta, zlasti pa je na voljo samodejno dopolnjevanje URL-jev, HTTP-headerjev, poizvedbenih parametrov in drugega; v prihodnje pa načrtujemo dodati teste za skladnost odgovora z opisom API.
Dela delovnih vozlišč
Primer: želeli bi deliti problematično zahtevo ali celo celoten scenarij s kolegom ali preprosto priložiti k napaki. TestMace pokriva tudi ta primer: aplikacija omogoča, da serializirate katero koli vozlišče in celo poddrevo v URL. Kopirajte-in-prilepite in že zlahka prenesete zahtevo na drug računalnik ali projekt.
Človeško berljiv format shranjevanja projekta
Trenutno vsako vozlišče shranjujemo v ločeno datoteko z razširitvijo yml (kot v primeru z vozliščem Assertion), ali v mapo z imenom vozlišča in datoteko index.yml v njej.
Tako na primer izgleda datoteka z zahtevo, ki smo jo pripravili v pregledu zgoraj:
index.yml
otroci: []
spremenljivke: {}
tip: RequestStep
izdelajSpremenljivke: []
requestData:
zahteva:
metoda: GET
url: 'https://next.json-generator.com/api/json/get/NJv-NT-U8'
headerji: []
onemogočeniDedovaniHeaderji: []
parametri: []
telo:
tip: Json
jsonTelo: ''
xmlTelo: ''
besediloTelo: ''
podatkiObrazca: []
datoteka: ''
formURLEncoded: []
strogoSSL: Dedovati
dataZaAvtentikacijo:
tip: dedovati
ime: Scratch 1Kot vidite, je vse zelo jasno. Če želite, je tak format povsem udoben za ročno urejanje.
Hierarhija map v datotečnem sistemu popolnoma ponavlja hierarhijo vozlišč v projektu. Na primer, scenarij takšnega videza:

Se mapa v datotečnem sistemu preslika v naslednjo strukturo (prikazana je samo hierarhija map, a bistvo je jasno)

Kar olajša postopek pregleda projekta.
Uvoz iz Postmana
Ko preberete vse zgoraj navedeno, nekateri uporabniki morda želijo preizkusiti (resnično?) nov izdelek ali (saj veš, kaj pravijo!) ga v celoti uporabiti v svojem projektu. Vendar pa lahko migracijo ustavi velika količina dela v istem Postman-u. V takih primerih TestMace podpira uvoz zbirk iz Postmana. Trenutno se podpira uvoz brez testov, vendar v prihodnje ne izključujemo tudi njihove podpore.
Načrti
Upam, da je mnogim tistim, ki so prebrali do tega trenutka, naš izdelek všeč. Vendar to še ni vse! Delo na produktu poteka s polno paro in tukaj je nekaj funkcij, ki jih nameravamo kmalu dodati.
Oblačna sinhronizacija
Ena izmed najbolj iskanih funkcij. Trenutno ponujamo sistem nadzora različic kot možnost sinhronizacije, zato format prilagajamo, da bo prijaznejši za tak način shranjevanja. Vendar to ne ustreza vsem, zato načrtujemo dodati poznani mehanizem sinhronizacije preko naših strežnikov.
CLI
Kot je bilo že omenjeno, izdelki na ravni IDE ne morejo brez različnih integracij z obstoječimi aplikacijami ali delovnimi tokovi. CLI je nujno potreben za integracijo testov, napisanih v TestMace, v proces neprekinjenega integriranja. Delo na CLI poteka z veliko intenzivnostjo, v zgodnjih različicah bo možno zagnati projekt s preprosto konzolno poročilo. V prihodnje načrtujemo dodati izhodno poročilo v formatu JUnit.
Sistem vtičnikov
Kljub moči našega orodja je množica primerov, ki potrebujejo rešitev, neomejena. Na koncu so tu naloge, specifične za posamezen projekt. Prav zato načrtujemo dodati SDK za razvoj vtičnikov, da bo vsak razvijalec lahko dodal funkcionalnost po svoji izbiri.
Širitev asortimana tipov vozlišč
Ta niz vozlišč ne pokriva vseh primerov, potrebnih uporabnikom. Vozlišča, ki jih nameravamo dodati:
- Script vozlišče — pretvarja in shranjuje podatke, z uporabo js in ustreznega API. Z uporabo takšnega tipa vozlišča je mogoče narediti stvari, kot so pre-request in post-request skripti v Postmanu.
- GraphQL vozlišče — podpora za graphql
- Custom assertion vozlišče — omogočilo bo širitev obstoječega niza assertion-ov v projektu
Seveda to ni končni seznam, ta se bo nenehno dopolnjeval tudi na podlagi vaših povratnih informacij.
FAQ
Kaj vas loči od Postmana?
- Koncept vozlišč, ki omogoča praktično neskončno širitev funkcionalnosti projekta
- Človeku berljiv format projekta s shranjevanjem v datotečni sistem, kar poenostavi delo z uporabo sistemov nadzora različic
- Možnost izdelave testov brez programiranja in bolj napredna podpora js v urejevalniku testov (samodejno dopolnjevanje, statični analizator)
- Napredno automatsko dovršavanje i isticanje trenutnih vrednosti promenljivih
Da li je ovo open-source proizvod?
Ne, trenutno su izvori zatvoreni, međutim, u budućnosti razmatramo mogućnost otvaranja izvora
Kako se izdržavate?)
Pored besplatne verzije, planiramo da izdamo plaćenu verziju proizvoda. Ona će prvenstveno uključivati stvari koje zahtevaju serversku komponentu, kao što je sinhronizacija.
Zaključek
Naš projekat brzim koracima napreduje ka stabilnom izdanju. Međutim, proizvod se već sada može koristiti i pozitivni komentari naših ranih korisnika to potvrđuju. Aktivno prikupljamo povratne informacije, jer bez bliske saradnje sa zajednicom ne možemo izgraditi dobar alat. Možete nas pronaći ovde:
Radujemo se vašim željama i predlozima!
Izvor: habr.com
