TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

Kamusta kayong lahat! Ngayon gusto naming ipakita sa publiko ng IT ang aming produkto - isang IDE para sa pagtatrabaho sa mga API TestMace. Marahil ang ilan sa inyo ay may alam na tungkol sa amin mula sa mga nakaraang artikulo. Gayunpaman, walang komprehensibong pagsusuri sa tool, kaya tinutugunan namin ang kapus-palad na pagkukulang na ito.

TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

Pagganyak

Gusto kong magsimula sa kung paano, sa katunayan, dumating tayo sa buhay na ito at nagpasya na lumikha ng sarili nating tool para sa advanced na trabaho gamit ang API. Magsimula tayo sa isang listahan ng functionality na dapat mayroon ang isang produkto, kung saan, sa aming opinyon, maaari naming sabihin na ito ay isang "IDE para sa pagtatrabaho sa mga API":

  • Paglikha at pagpapatupad ng mga query at script (mga pagkakasunud-sunod ng mga query)
  • Pagsusulat ng iba't ibang uri ng pagsusulit
  • Pagbuo ng pagsubok
  • Paggawa gamit ang mga paglalarawan ng API, kabilang ang pag-import mula sa mga format gaya ng Swagger, OpenAPI, WADL, atbp.
  • Mapanuksong mga kahilingan
  • Magandang suporta para sa isa o higit pang mga wika para sa pagsulat ng mga script, kabilang ang pagsasama sa mga sikat na aklatan
  • at iba pa

Ang listahan ay maaaring palawakin upang umangkop sa iyong panlasa. Bukod dito, mahalagang lumikha hindi lamang ang IDE mismo, kundi pati na rin ang isang tiyak na imprastraktura, tulad ng cloud synchronization, command line tool, online monitoring service, atbp. Sa huli, ang mga uso ng mga nakaraang taon ay nagdidikta sa amin hindi lamang sa malakas na pag-andar ng application, kundi pati na rin sa kaaya-ayang interface nito.

Sino ang nangangailangan ng gayong kasangkapan? Malinaw, ang lahat ng kahit papaano ay konektado sa pagbuo at pagsubok ng mga API ay mga developer at tester =). Bukod dito, kung para sa dating ito ay madalas na sapat upang magsagawa ng mga solong query at simpleng mga script, kung gayon para sa mga tester ito ay isa sa mga pangunahing tool, na, bukod sa iba pang mga bagay, ay dapat magsama ng isang malakas na mekanismo para sa pagsulat ng mga pagsubok na may kakayahang patakbuhin ang mga ito sa CI.

Kaya, pagsunod sa mga alituntuning ito, nagsimula kaming lumikha ng aming produkto. Tingnan natin kung ano ang naabot natin sa yugtong ito.

Mabilis na pagsisimula

Magsimula tayo sa isang unang kakilala sa aplikasyon. Maaari mong i-download ito sa aming website. Sa ngayon, lahat ng 3 pangunahing platform ay suportado - Windows, Linux, MacOS. I-download, i-install, ilunsad. Kapag inilunsad mo ito sa unang pagkakataon, maaari mong makita ang sumusunod na window:

TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

Mag-click sa plus sign sa tuktok ng lugar ng nilalaman upang gawin ang iyong unang kahilingan. Ganito ang hitsura ng tab ng query:

TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

Tingnan natin ito nang mas detalyado. Ang interface ng kahilingan ay halos kapareho sa interface ng mga sikat na rest client, na ginagawang mas madali ang paglipat mula sa mga katulad na tool. Gawin natin ang unang kahilingan sa url https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

Sa pangkalahatan, sa unang sulyap, ang panel ng pagtugon ay hindi rin naglalabas ng anumang mga sorpresa. Gayunpaman, nais kong iguhit ang iyong pansin sa ilang mga punto:

  1. Ang katawan ng tugon ay kinakatawan sa anyo ng isang puno, na unang nagdaragdag ng nilalaman ng impormasyon at pangalawa ay nagbibigay-daan sa iyo upang magdagdag ng ilang mga kagiliw-giliw na tampok tungkol sa kung saan sa ibaba
  2. Mayroong tab na Mga Assertion, na nagpapakita ng listahan ng mga pagsubok para sa isang partikular na kahilingan

Tulad ng nakikita mo, ang aming tool ay maaaring magamit bilang isang maginhawang kliyente ng pahinga. Gayunpaman, wala tayo rito kung limitado lamang ang mga kakayahan nito sa pagpapadala ng mga kahilingan. Susunod, ilalarawan ko ang mga pangunahing konsepto at pag-andar ng TestMace.

Pangunahing Konsepto at Tampok

Knot

Ang pag-andar ng TestMace ay nahahati sa iba't ibang uri ng mga node. Sa halimbawa sa itaas, ipinakita namin ang pagpapatakbo ng RequestStep node. Gayunpaman, ang mga sumusunod na uri ng mga node ay magagamit na rin sa application:

  • RequestStep. Ito ang node kung saan maaari kang lumikha ng isang kahilingan. Maaari lang itong magkaroon ng isang Assertion node bilang child element.
  • Paninindigan. Ang node ay ginagamit upang magsulat ng mga pagsubok. Maaari lamang maging isang child node ng RequestStep node.
  • Folder. Nagbibigay-daan sa iyong pagpangkatin ang Folder at RequestStep na mga node sa loob ng kanilang mga sarili.
  • Proyekto. Ito ang root node, awtomatikong nilikha kapag nilikha ang proyekto. Kung hindi, inuulit nito ang functionality ng Folder node.
  • Link. Mag-link sa Folder o RequestStep node. Binibigyang-daan kang muling gumamit ng mga query at script.
  • at iba pa

Ang mga node ay matatagpuan sa mga gasgas (ang panel sa kaliwang ibaba, ginagamit para sa mabilis na paglikha ng "one-off" na mga query) at sa mga proyekto (ang panel sa kaliwang tuktok), na tatalakayin natin nang mas detalyado.

Proyekto

Kapag inilunsad mo ang application, maaari mong mapansin ang nag-iisang linya ng Project sa kaliwang sulok sa itaas. Ito ang ugat ng puno ng proyekto. Kapag nagsimula ka ng isang proyekto, isang pansamantalang proyekto ang nilikha, ang landas kung saan nakasalalay sa iyong operating system. Sa anumang oras maaari mong ilipat ang proyekto sa isang lugar na maginhawa para sa iyo.

Ang pangunahing layunin ng proyekto ay ang kakayahang i-save ang mga pag-unlad sa file system at higit pang i-synchronize ang mga ito sa pamamagitan ng mga version control system, magpatakbo ng mga script sa CI, suriin ang mga pagbabago, atbp.

Mga variable

Ang mga variable ay isa sa mga pangunahing mekanismo ng isang application. Iyong mga nagtatrabaho sa mga tool tulad ng TestMace ay maaaring may ideya na kung ano ang pinag-uusapan natin. Kaya, ang mga variable ay isang paraan upang mag-imbak ng karaniwang data at makipag-usap sa pagitan ng mga node. Ang isang analogue, halimbawa, ay mga variable ng kapaligiran sa Postman o Insomnia. Gayunpaman, lumayo kami at binuo ang paksa. Sa TestMace, maaaring itakda ang mga variable sa antas ng node. Anuman. Mayroon ding mekanismo para sa pagmamana ng mga variable mula sa mga ninuno at magkakapatong na mga variable sa mga inapo. Bilang karagdagan mayroong isang bilang ng mga built-in na variable, ang mga pangalan ng mga built-in na variable ay nagsisimula sa $. Narito ang ilan sa kanila:

  • $prevStep β€” link sa mga variable ng nakaraang node
  • $nextStep β€” link sa mga variable ng susunod na node
  • $parent - ang parehong bagay, ngunit para lamang sa ninuno
  • $response - tugon mula sa server
  • $env - kasalukuyang mga variable ng kapaligiran
  • $dynamicVar - mga dynamic na variable na nilikha sa panahon ng script o query execution

$env - ang mga ito ay mahalagang ordinaryong mga variable ng antas ng Project node, gayunpaman, ang hanay ng mga variable ng kapaligiran ay nagbabago depende sa napiling kapaligiran.

Ang variable ay ina-access sa pamamagitan ng ${variable_name}
Ang halaga ng isang variable ay maaaring isa pang variable, o kahit isang buong expression. Halimbawa, ang variable ng url ay maaaring isang expression na tulad ng
http://${host}:${port}/${endpoint}.

Hiwalay, ito ay nagkakahalaga ng pagpuna sa posibilidad ng pagtatalaga ng mga variable sa panahon ng pagpapatupad ng script. Halimbawa, madalas na kailangang i-save ang data ng pahintulot (isang token o ang buong header) na nagmula sa server pagkatapos ng matagumpay na pag-login. Pinapayagan ka ng TestMace na i-save ang naturang data sa mga dynamic na variable ng isa sa mga ninuno. Upang maiwasan ang mga banggaan sa mga umiiral nang "static" na mga variable, ang mga dynamic na variable ay inilalagay sa isang hiwalay na bagay $dynamicVar.

Mga senaryo

Gamit ang lahat ng feature sa itaas, maaari mong patakbuhin ang buong query script. Halimbawa, ang paggawa ng entity -> pagtatanong ng entity -> pagtanggal ng entity. Sa kasong ito, halimbawa, maaari mong gamitin ang Folder node upang pagpangkatin ang ilang RequestStep node.

Autocompletion at pag-highlight ng expression

Para sa maginhawang trabaho na may mga variable (at hindi lamang) ang autocompletion ay kinakailangan. At siyempre, i-highlight ang halaga ng isang expression upang gawing mas madali at mas maginhawa upang linawin kung ano ang katumbas ng isang partikular na variable. Ganito talaga ang kaso kapag mas mabuting makakita ng isang beses kaysa makarinig ng isang daang beses:

TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

Kapansin-pansin na ang autocompletion ay ipinatupad hindi lamang para sa mga variable, kundi pati na rin, halimbawa, para sa mga header, mga halaga ng ilang mga header (halimbawa, autocompletion para sa Content-Type header), mga protocol at marami pa. Ang listahan ay patuloy na ina-update habang lumalaki ang application.

I-undo/gawing muli

Ang pag-undo/pag-redo ng mga pagbabago ay isang napaka-maginhawang bagay, ngunit sa ilang kadahilanan ay hindi ito ipinapatupad sa lahat ng dako (at ang mga tool para sa pagtatrabaho sa mga API ay walang pagbubukod). Ngunit hindi kami isa sa mga iyon!) Ipinatupad namin ang undo/redo sa buong proyekto, na nagbibigay-daan sa iyong i-undo hindi lamang ang pag-edit ng isang partikular na node, kundi pati na rin ang paglikha, pagtanggal, paggalaw, atbp. Ang pinakamahalagang operasyon ay nangangailangan ng kumpirmasyon.

Paglikha ng mga pagsubok

Ang Assertion node ay responsable para sa paglikha ng mga pagsubok. Ang isa sa mga pangunahing tampok ay ang kakayahang lumikha ng mga pagsubok nang walang programming, gamit ang mga built-in na editor.

Ang Assertion node ay binubuo ng isang set ng mga assertion. Ang bawat paninindigan ay may sariling uri; sa ngayon ay may ilang uri ng mga pahayag

  1. Paghambingin ang mga halaga - naghahambing lamang ng 2 halaga. Mayroong ilang mga operator ng paghahambing: katumbas, hindi katumbas, mas malaki kaysa sa, mas malaki kaysa o katumbas ng, mas mababa sa, mas mababa sa o katumbas ng.

  2. Naglalaman ng halaga - sinusuri ang paglitaw ng isang substring sa isang string.

  3. XPath - sinusuri na ang tagapili sa XML ay naglalaman ng isang tiyak na halaga.

  4. Ang assertion ng JavaScript ay isang arbitrary na script ng javascript na nagbabalik ng totoo sa tagumpay at mali sa pagkabigo.

Tandaan ko na ang huli lamang ang nangangailangan ng mga kasanayan sa programming mula sa gumagamit, ang iba pang 3 assertion ay nilikha gamit ang isang graphical na interface. Narito, halimbawa, kung ano ang hitsura ng dialog para sa paglikha ng paghahambing ng mga halaga ng assertion:

TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

Ang icing sa cake ay ang mabilis na paglikha ng mga assertion mula sa mga tugon, tingnan lamang ito!

TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

Gayunpaman, ang mga naturang assertion ay may malinaw na mga limitasyon, na maaaring gusto mong gumamit ng javascript assertion upang mapagtagumpayan. At dito nagbibigay din ang TestMace ng komportableng kapaligiran na may autocompletion, syntax highlighting at kahit isang static analyzer.

Paglalarawan ng API

Binibigyang-daan ka ng TestMace hindi lamang na gamitin ang API, kundi pati na rin idokumento ito. Bukod dito, ang paglalarawan mismo ay mayroon ding hierarchical na istraktura at akma nang organiko sa natitirang bahagi ng proyekto. Bilang karagdagan, kasalukuyang posibleng mag-import ng mga paglalarawan ng API mula sa mga format ng Swagger 2.0 / OpenAPI 3.0. Ang paglalarawan mismo ay hindi lamang nagsisinungaling, ngunit malapit na isinama sa natitirang bahagi ng proyekto, lalo na, ang awtomatikong pagkumpleto ng mga URL, mga header ng HTTP, mga parameter ng query, atbp. ay magagamit, at sa hinaharap plano naming magdagdag ng mga pagsubok para sa pagsunod sa tugon sa paglalarawan ng API.

Pagbabahagi ng node

Kaso: gusto mong magbahagi ng may problemang kahilingan o kahit isang buong script sa isang kasamahan o i-attach lang ito sa isang bug. Sinasaklaw din ng TestMace ang kasong ito: pinapayagan ka ng application na i-serialize ang anumang node at kahit isang subtree sa isang URL. Kopyahin-paste at madali mong mailipat ang kahilingan sa ibang makina o proyekto.

Nababasa ng tao na format ng imbakan ng proyekto

Sa ngayon, ang bawat node ay naka-imbak sa isang hiwalay na file na may yml extension (tulad ng kaso sa Assertion node), o sa isang folder na may pangalan ng node at ang index.yml file sa loob nito.
Halimbawa, ganito ang hitsura ng file ng kahilingan na ginawa namin sa pagsusuri sa itaas:

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 1

Tulad ng nakikita mo, ang lahat ay napakalinaw. Kung nais, ang format na ito ay madaling mai-edit nang manu-mano.

Ang hierarchy ng mga folder sa file system ay ganap na inuulit ang hierarchy ng mga node sa proyekto. Halimbawa, isang script tulad ng:

TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

I-map ang file system sa sumusunod na istraktura (ang hierarchy ng folder lamang ang ipinapakita, ngunit ang kakanyahan ay malinaw)

TestMace - isang makapangyarihang IDE para sa pagtatrabaho sa mga API

Ginagawa nitong mas madali ang proseso ng pagsusuri ng proyekto.

Import mula sa Postman

Pagkatapos basahin ang lahat ng nasa itaas, gugustuhin ng ilang user na subukan (tama ba?) ang isang bagong produkto o (what the hell is not kidding!) ganap na gamitin ito sa kanilang proyekto. Gayunpaman, ang paglipat ay maaaring ihinto ng isang malaking bilang ng mga pag-unlad sa parehong Postman. Para sa mga ganitong kaso, sinusuportahan ng TestMace ang pag-import ng mga koleksyon mula sa Postman. Sa ngayon, sinusuportahan ang mga pag-import na walang pagsubok, ngunit hindi namin inaalis ang pagsuporta sa mga ito sa hinaharap.

Mga Plano

Sana marami sa mga nakabasa hanggang sa puntong ito ay nagustuhan ang aming produkto. Gayunpaman, hindi lang iyon! Ang paggawa sa produkto ay puspusan na at narito ang ilang mga tampok na plano naming idagdag sa lalong madaling panahon.

Cloud sync

Isa sa mga pinaka-hinihiling na tampok. Sa ngayon, iminumungkahi namin ang paggamit ng mga version control system para sa pag-synchronize, kung saan ginagawa naming mas friendly ang format para sa ganitong uri ng storage. Gayunpaman, ang daloy ng trabaho na ito ay hindi angkop para sa lahat, kaya plano naming magdagdag ng mekanismo ng pag-synchronize na pamilyar sa marami sa pamamagitan ng aming mga server.

CLI

Gaya ng nabanggit sa itaas, hindi magagawa ng mga produkto sa antas ng IDE kung wala ang lahat ng uri ng pagsasama sa mga umiiral nang application o workflow. Ang CLI ay eksakto kung ano ang kinakailangan upang maisama ang mga pagsubok na nakasulat sa TestMace sa tuluy-tuloy na proseso ng pagsasama. Ang paggawa sa CLI ay puspusan; ilulunsad ng mga naunang bersyon ang proyekto gamit ang isang simpleng ulat ng console. Sa hinaharap, plano naming magdagdag ng output ng ulat sa JUnit na format.

Sistema ng plugin

Sa kabila ng lahat ng kapangyarihan ng aming tool, ang hanay ng mga kaso na nangangailangan ng mga solusyon ay walang limitasyon. Pagkatapos ng lahat, may mga gawain na tiyak sa isang partikular na proyekto. Kaya naman sa hinaharap plano naming magdagdag ng SDK para sa pagbuo ng mga plugin at ang bawat developer ay makakapagdagdag ng functionality ayon sa gusto nila.

Pagpapalawak ng hanay ng mga uri ng node

Ang hanay ng mga node na ito ay hindi sumasaklaw sa lahat ng mga kaso na kinakailangan ng user. Mga node na pinaplanong idagdag:

  • Script node - nagko-convert at naglalagay ng data gamit ang js at ang kaukulang API. Gamit ang ganitong uri ng node, magagawa mo ang mga bagay tulad ng mga script ng pre-request at post-request sa Postman.
  • GraphQL node - suporta sa graphql
  • Custom na assertion node - magbibigay-daan sa iyong palawakin ang hanay ng mga umiiral na assertion sa proyekto
    Naturally, hindi ito panghuling listahan; ito ay patuloy na ia-update dahil sa, bukod sa iba pang mga bagay, ang iyong feedback.

FAQ

Paano ka naiiba sa Postman?

  1. Ang konsepto ng mga node, na nagpapahintulot sa iyo na halos walang katapusang sukatin ang pag-andar ng proyekto
  2. Nababasa ng tao ang format ng proyekto sa pamamagitan ng pag-save nito sa isang file system, na pinapasimple ang trabaho gamit ang mga version control system
  3. Kakayahang lumikha ng mga pagsubok nang walang programming at mas advanced na suporta sa js sa editor ng pagsubok (autocompletion, static analyzer)
  4. Advanced na autocompletion at pag-highlight ng kasalukuyang halaga ng mga variable

Ito ba ay isang open-source na produkto?

Hindi, sa sandaling ang mga mapagkukunan ay sarado, ngunit sa hinaharap ay isinasaalang-alang namin ang posibilidad ng pagbubukas ng mga mapagkukunan

Ano ang iyong ikinabubuhay?)

Kasama ng libreng bersyon, plano naming maglabas ng bayad na bersyon ng produkto. Pangunahing isasama nito ang mga bagay na nangangailangan ng panig ng server, halimbawa, pag-synchronize.

Konklusyon

Ang aming proyekto ay gumagalaw nang mabilis patungo sa isang matatag na paglabas. Gayunpaman, magagamit na ang produkto, at ang positibong feedback mula sa aming mga naunang gumagamit ay patunay nito. Aktibong kinokolekta namin ang feedback, dahil walang malapit na pakikipagtulungan sa komunidad imposibleng bumuo ng isang mahusay na tool. Maaari mo kaming mahanap dito:

Opisyal na website

Telegrama

Walang ingat

Facebook

Tagasubaybay ng mga isyu

Inaasahan namin ang iyong mga kagustuhan at mungkahi!

Pinagmulan: www.habr.com

Magdagdag ng komento