Përshëndetje të gjithëve! Sot dëshirojmë t'ju prezantojmë produktin tonë — IDE për punën me API. . Ndoshta disa prej jush tashmë e dinë për ne nga . Megjithatë, nuk ka pasur një përmbledhje gjithëpërfshirëse të mjetit, ndaj po e eliminojmë këtë mangësi.

Motivimi
Dëshirojmë të fillojmë me mënyrën si kemi arritur në këtë pikë dhe vendosëm të krijojmë mjetin tonë për punën e avancuar me API. Fillojmë me listën e funksionaliteteve që duhet të ketë një produkt, për të cilin mendojmë se mund të quhet "IDE për punën me API":
- Krijimi dhe realizimi i kërkesave dhe skenarëve (sekuencave të kërkesave)
- Shkrimi i testeve të ndryshme
- Gjenërimi i testeve
- Puna me përshkrimin e API, duke përfshirë importimin nga formate të tilla si Swagger, OpenAPI, WADL etj.
- Mockimi i kërkesave
- Mbështetje e mirë për një ose më shumë gjuhë programuese për shkrimin e skripteve, përfshirë integrimin me bibliotekat e njohura
- etj.
Lista mund të plotësohet sipas dëshirës. E rëndësishme është të krijojmë jo vetëm vetë IDE, por edhe një infrastrukture të caktuar, e tillë si sinkronizimi në cloud, mjetet e komandës, shërbimi i monitorimit online etj. Në fund të fundit, trendet e viteve të fundit na diktojnë jo vetëm një funksionalitet të fuqishëm të aplikacionit, por edhe një ndërfaqe të këndshme.
Për kë është i nevojshëm një mjet i tillë? Në mënyrë të qartë, për ata që janë në ndonjë mënyrë të lidhur me zhvillimin dhe testimin e API — zhvilluesit dhe testerët =). Dhe ndonëse për të parët shpesh mjafton realizimi i kërkesave të vetme dhe skenarëve të thjeshtë, për testerët kjo është një nga mjetet kryesore, që përveç të tjerash duhet të përfshijë një mekanizëm të fuqishëm për shkrimin e testeve me mundësinë e ekzekutimit të tyre në CI.
Tani, duke ndjekur këto orientime, filluam të krijojmë produktin tonë. Le të shohim se çfarë kemi arritur në këtë fazë.
Fillim i shpejtë
Le të fillojmë me takimin e parë me aplikacionin. Mund ta shkarkoni . Aktualisht janë mbështetur të tri platformat kryesore — Windows, Linux, MacOS. Shkarkoni, instaloni, hapni. Në hapjen e parë, mund të shihni këtë dritare:

Klikoni në plusin lart në zonën e përmbajtjes për të krijuar kërkesën tuaj të parë. Tab-i i kërkesave duket kështu:

Le të fokusohemi në të. Ndërfaqja e kërkesës i ngjan shumë ndërfaqeve të klientëve të njohur rest, gjë që e lehtëson migrimin nga mjetet e tilla. Le të realizojmë kërkesën tonë të parë në url

Përfundimisht, në dukje, paneli i përgjigjes gjithashtu nuk ka ndonjë surprizë. Megjithatë, dua të theksoj disa pika:
- Trupi i përgjigjes përfaqëson si një pemë, që, nga njëra anë, e rrit informimin dhe, nga ana tjetër, lejon të shtojmë disa veçori interesante që do të përmendim më poshtë.
- Ka një tab për Assertions, ku shfaqet lista e testeve për këtë kërkesë.
Siç mund të vëreni, mjeti ynë mund të përdoret si një klient i rehatshëm rest. Megjithatë, nuk do të ishim këtu nëse mundësitë e tij do të kufizoheshin vetëm në dërgimin e kërkesave. Më poshtë do të paraqes konceptet kryesore dhe funksionalitetet e TestMace.
Konceptet dhe mundësitë kryesore
Nyja
Funksionaliteti i TestMace ndahet në kategori të ndryshme nyjash. Në shembullin e mësipërm demonstruam punën e nyjës RequestStep. Megjithatë, tani në aplikacion gjithashtu janë të disponueshme lloje të tjera nyjash:
- RequestStep. Kjo është nyja me ndihmën e së cilës mund të krijoni një kërkesë. Si element fëmijor ajo mund të ketë vetëm një nyjë Assertion.
- Assertion. Nyja përdoret për shkrimin e testeve. Mund të jetë vetëm fëmijore për nyjën RequestStep.
- Folder. Lejon grupimin e nyjave Folder dhe RequestStep brenda saj.
- Project. Kjo është nyja rrënjë, krijohet automatikisht kur krijoni një projekt. Në të tjerat përsërit funksionalitetet e nyjës Folder.
- Link. Lidhje me nyjën Folder ose RequestStep. Lejon ri-përdorimin e kërkesave dhe skenarëve.
- etj.
Nyjat janë të vendosura në scratches (paneli majtas poshtë, që shërben për krijimin e kërkesave "me një përdorim") dhe në project (paneli majtas lart), ku do të ndalemi më në detaje.
Projekt
Kur hapni aplikacionin, mund të keni vënë re një linjë të vetme Project në këndin e majtë lart. Kjo është rrënja e pemës së projektit. Kur hapi projekti krijohet një projekt përkohësisht, rruga e të cilit varet nga sistemi juaj operativ. Në çdo moment, mund të transportoni projektin në një vend më të përshtatshëm për ju.
Qëllimi kryesor i projektit është të mundësojë ruajtjen e punimeve në sistemin e skedarëve dhe më pas sinkronizimin përmes sistemeve të kontrollit të versioneve, ekzekutimin e skenarëve në CI, rishikimin e ndryshimeve etj.
Variablat
Variablat janë një nga mekanizmat kryesorë të aplikacionit. Ata ndër ju që punoni me shërbime si TestMace, ndoshta keni kuptuar për çfarë bëhet fjalë. Pra, variablat janë një mënyrë për të ruajtur të dhëna të zakonshme dhe për të komunikuar midis nyjave. Një analogji, për shembull, janë variablat mjedisorë në Postman ose Insomnia. Megjithatë, ne shkuam më tej dhe zhvilluam konceptin. Në TestMace, variablat mund të vendosen në nivelin e nyjës. Ndokush. Ka gjithashtu një mekanizëm trashëgimi të variablave nga paraardhësit dhe mbivendosjes së variablave në pasardhësit. Përveç kësaj, ekziston një grup variablash të integruar, emrat e të cilëve fillojnë me $. Ja disa prej tyre:
$prevStep— lidhja me variablat e nyjës përpara$nextStep— lidhja me variablat e nyjës pasuese$parent— e njëjta gjë, por vetëm për paraardhësin$response— përgjigja nga serveri$env— variablat aktuale të mjedisit$dynamicVar— variablat dinamike, të krijuara gjatë ekzekutimit të skenarit ose kërkesës
$env — në thelb, janë variabla të zakonshëm të nivelit të Projektit, megjithatë, grupi i variablave të mjedisit ndryshon në varësi të mjedisit të zgjedhur.
Qasja në një variabël bëhet përmes ${variable_name}
Si vlera e variablës mund të jetë një variabël tjetër, ose madje një shprehje e tërë. Për shembull, si variabël url mund të jetë një shprehje e këtij lloji
http://${host}:${port}/${endpoint}.
Veçanërisht vlen të theksohet mundësia e caktimit të variablave gjatë ekzekutimit të skenarit. Për shembull, shpesh lind nevoja për të ruajtur të dhënat e autentifikimit (tokenin ose të gjithë headerin), të cilat vijnë nga serveri pas një regjistrimi të suksesshëm. TestMace lejon ruajtjen e të dhënave të tilla në variabla dinamike të një prej paraardhësve. Për të shmangur kolizionet me variablat "statike" që tashmë ekzistojnë, variablat dinamike janë nxjerrë në një objekt të veçantë. $dynamicVar.
Scenarët
Duke përdorur të gjitha mundësitë e mësipërme, mund të kryeni skenare të tëra kërkesash. Për shembull, krijimi i një entiteti -> kërkesa për entitetin -> fshirja e entitetit. Në këtë rast, ju mund të përdorni nyjën Folder për të grupuar disa nyja RequestStep.
Plotësimi automatik dhe ndriçimi i vlerës së shprehjes
Për një punë më të lehtë me variablat (edhe jo vetëm) nevojitet plotësimi automatik. Dhe natyrisht, ndriçimi i vlerës së shprehjes, për ta bërë më të lehtë dhe më të rehatshme për të sqaruar çfarë është vlera e caktuar e një variabli. Ky është rastin kur më mirë është ta shohësh një herë, sesa ta dëgjoni njëqind herë:

Vlen të theksohet se plotësimi automatik është realizuar jo vetëm për variablat, por edhe, për shembull, për headerat, vlerat e caktuar të headerave (p.sh., plotësimi automatik për headerin Content-Type), protokollet dhe shumë gjëra të tjera. Lista vazhdon të zgjerohet me rritjen e aplikacionit.
Undo/redo
Anulimi/ripërsëritja e ndryshimeve është një gjë shumë e dobishme, megjithatë, për një arsye a tjetër realizohet shumë rrallë (dhe mjetet për punën me API nuk janë përjashtim). Por ne nuk jemi të tillë!) Undo/redo është realizuar në të gjithë projektin, gjë që lejon anulimin jo vetëm të edituar të një nyje të caktuar, por edhe krijimin e saj, fshirjen, zhvendosjen, etj. Operacionet më kritike kërkojnë konfirmim.
Krijimi i testeve
Për krijimin e testeve përgjigjen nyja Assertion. Një nga veçoritë kryesore është mundësia për të krijuar teste pa programim, duke përdorur redaktorë të integruar.
Nyja Assertion përbëhet nga një grup assertions (deklaratash). Çdo assertion ka llojin e vet, aktualisht ekzistojnë disa lloje assertions
Compare values — thjesht krahaso 2 vlera. Ka disa operatorë krahasimi "i barabartë", "nuk është i barabartë", "më i madh", "më i madh ose i barabartë", "më i vogël", "më i vogël ose i barabartë".
Contains value — kontrollon praninë e një nënstringe në një string.
XPath — kontrollon që sipas selektorit në XML të ketë një vlerë të caktuar.
JavaScript assertion — një skenar i lirë në gjuhën JavaScript, i cili kthen true në rast suksesi dhe false në rast dështimi.
Dua të theksoj se vetëm i fundit kërkon nga përdoruesi aftësi programimi, ndërsa 3 përputhjet e tjera krijohen përmes ndërfaqes grafike. Ja se si duket dialogu i krijimit të një compare values assertion:

Këtu është cilësia e shtesë e shpejtë e krijimit të assertions nga përgjigjia, thjesht hidhni një sy në këtë!

Megjithatë, një të tillë assertions kanë kufizime të dukshme, përballë të cilave mund të përdorni javascript assertion. Dhe këtu TestMace ofron gjithashtu një mjedis të rehatshëm me plotësim automatik, ndriçim të sintaksës dhe madje edhe me një analizator statik.
Përshkrimi i API
TestMace ju ofron mundësinë të përdorni API-në, por gjithashtu e dokumentoni atë. Përveç kësaj, përshkrimi vetë ka një strukturë hierarkike dhe integrohet natyrshëm në projektin tjetër. Aktualisht, ekziston mundësia për të importuar përshkrimin e API-së nga formatet Swagger 2.0 / OpenAPI 3.0. Përshkrimi vetë nuk është thjesht një peshë e vdekur, por integrihet ngushtë me pjesën tjetër të projektit, sidomos me funksionalitetin e autoshkruar të URL-ve, titujve HTTP, parametrave të query-t dhe më shumë. Në të ardhmen, planifikojmë të shtojmë teste për përputhshmërinë e përgjigjeve me përshkrimin e API-së.
Ndaje nodin
Shembuj: ju dëshironi të ndani një kërkesë problematike ose madje një skenar të tërë me një kolege ose thjesht ta bashkëngjitni atë një problemi. TestMace mbulon edhe këtë rast: aplikacioni lejon të serializohet çdo nod dhe madje një nën-struakt të URL-së. Kopjo-ngjit dhe tani e ke transferuar lehtësisht kërkesën në një makinë tjetër ose projekt.
Formati i ruajtjes së projektit që lexon lehtësisht
Aktualisht, çdo nod ruhet në një skedar të veçantë me zgjerimin yml (siç është rasti me nodin Assertion), ose në një dosje me emrin e nodit dhe një skedar index.yml brenda saj.
Kështu duket një skedar i kërkesës që ne bëmë në mënyrën e mësipërme:
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 1Siç mund ta shihni, gjithçka është fare e qartë. Nëse dëshironi, ky format është mjaft komod për ta redaktuar edhe manualisht.
Hierarkia e dosjeve në sistemin e skedarëve e përsërit plotësisht hierarkinë e nodëve në projekt. Për shembull, një skenar i tillë:

Mapohet në sistemin e skedarëve në këtë strukturë (tregohet vetëm hierarkia e dosjeve, por kuptimi është i qartë)

Çka e lehtëson procesin e rishikimit të projektit.
Importi nga Postman
Pas leximit të të gjitha të dhënave të sipërpërmendura, disa përdorues mund të dëshirojnë të provojnë (apo ndoshta?) produktin e ri ose (nuk dihet!) ta përdorin këtë plotësisht në projektin e tyre. Megjithatë, migrimi mund të pengohet nga një sasi e madhe e punëve të ndërtuara në të njëjtin Postman. Për këto rastet TestMace mbështet importin e koleksioneve nga Postman. Aktualisht, mbështetet importi pa teste, megjithatë, në të ardhmen nuk e përjashtojmë as mbështetje për to.
Planet
Shpresoj se shumë nga ata që janë duke lexuar deri në këtë pikë, janë të interesuar për produktin tonë. Megjithatë, kjo nuk është gjithçka! Puna mbi produktin vazhdon me intensitet dhe po këtu janë disa karakteristika që planifikojmë të shtojmë së shpejti.
Sinkronizimi në re
Një nga funksionet më të kërkuara. Aktualisht, ne ofrojmë në formë sinkronizimi sistemet e kontrollit të versioneve, për të cilat po e bëjmë formatin më miqësor për këtë mënyrë ruajtjeje. Megjithatë, jo të gjithëve u përshtatet ky mënyrë punimi, prandaj planifikohet të shtohet një mekanizëm të njohur për shumë përmes serverëve tanë.
CLI
Siç u tha më lart, produktet e nivelit IDE nuk mund të kalojnë pa integrime të ndryshme me aplikacione ose rrjedha ekzistuese. CLI është i nevojshëm për të integruar testet e shkruara në TestMace, në procesin e integrimit të vazhdueshëm. Puna mbi CLI po vazhdon me intensitet, në versionet e hershme do të ketë nisjen e projektit me një raportim të thjeshtë në konsolë. Më vonë, është planifikuar të shtohet raporti në formatin JUnit.
Sistemi i pluginave
Pavarësisht fuqisë tonë, grupi i rasteve që kërkojnë zgjidhje është i pafund. Në fund të fundit, ekzistojnë detyra të veçanta për projekte të veçanta. Prandaj, ne planifikojmë të shtojmë një SDK për zhvillimin e plugina, duke e lejuar çdo zhvillues të shtojë funksionalitetin sipas dëshirës.
Zgjerimi i gamës së tipave të nodëve
Ky grup nodesh nuk mbulon të gjitha rastet që kanë nevojë përdoruesit. Nodet që planifikojmë të shtojmë:
- Noda Script — konverton dhe vendos të dhënat, duke përdorur js dhe API-në përkatëse. Duke përdorur këtë tip nodi, mund të krijoni gjëra si skenarët e para-dorë dhe pas-dorë në Postman.
- Noda GraphQL — mbështetje për graphql.
- Noda e verifikimit të personalizuar — do të lejojë zgjerimin e grupit aktual të verifikimeve në projekt.
Natyrisht, kjo nuk është lista përfundimtare, ajo do të plotësohet vazhdimisht edhe nga reagimet tuaja.
FAQ
Cilat janë dallimet tuaj nga Postman?
- Koncepti i nodëve, i cili lejon praktikisht zgjerimin e pafund të funksionalitetit të projektit.
- Format i lexueshëm nga njeriu i projektit, me ruajtjen e tij në sistemin e skedarëve, çka e bën më të lehtë punën me sistemet e kontrollit të versioneve.
- Mundësia e krijimit të testeve pa programim dhe mbështetje më të avancuar për js në redaktorin e testeve (autoshkruar, analizues statik).
- Autoshkruar e avancuar dhe ndriçimi i vlerave aktuale të variablave.
A është ky një produkt open-source?
Jo, aktualisht kodet janë të mbyllura, megjithatë në të ardhmen ne po shqyrtojmë mundësinë e hapjes së kodit.
Me çfarë e mbani veten? :)
Përveç versionit falas, ne planifikojmë të nxjerrim një version me pagesë të produktit. Në të do të përfshihen fillimisht elementë që kërkojnë një pjesë serveri, për shembull, sinkronizimi.
Përfundimi
Projekti ynë po ecën me hapa të sigurt drejt një lëshimi stabil. Megjithatë, produkti tashmë është funksional, dhe komentet pozitive nga përdoruesit tanë të hershëm janë një dëshmi për këtë. Ne jemi duke mbledhur aktivisht feedback, sepse pa një bashkëpunim të ngushtë me komunitetin nuk është e mundur të ndërtohet një mjet i mirë. Mund të na gjeni këtu:
Po presim me padurim dëshirat dhe propozimet tuaja!
Burimi: habr.com
