Salut tuturor! Astăzi vrem să vă prezentăm produsul nostru — un IDE pentru lucrul cu API-uri . Poate că unii dintre voi știu deja despre noi din . Cu toate acestea, nu a existat o prezentare generală cuprinzătoare a instrumentului, așa că remediem această neplăcere.

Motivația
Am dori să începem prin a explica cum am ajuns aici și am decis să dezvoltăm propriul nostru instrument pentru lucrul avansat cu API-uri. Vom începe cu lista de funcționalități pe care ar trebui să le aibă un produs despre care putem spune că este «un IDE pentru lucrul cu API-uri»:
- Crearea și executarea de solicitări și scripturi (secvențe de solicitări)
- Scrierea diferitelor tipuri de teste
- Generarea de teste
- Lucrul cu descrierile API-ului, inclusiv importul din formate precum Swagger, OpenAPI, WADL etc.
- Mocking-ul solicitărilor
- O bună suportare a unuia sau mai multor limbaje de programare pentru scrierea scripturilor, inclusiv integrarea cu biblioteci populare
- etc.
Lista poate fi completată după preferințe. Este important să creăm nu doar IDE-ul în sine, ci și o anumită infrastructură, precum sincronizarea în cloud, instrumente de linie de comandă, servicii de monitorizare online etc. În cele din urmă, tendințele din ultimii ani ne impun nu doar un funcțional bogat, ci și o interfață plăcută.
Pentru cine este destinat un astfel de instrument? Evident, pentru toți cei care sunt cumva implicați în dezvoltarea și testarea API-urilor — dezvoltatori și testeri =). De cele mai multe ori, pentru primii este suficient să execute solicitări unice și scenarii simple, în timp ce pentru testeri acesta este unul dintre principalele instrumente, care, pe lângă alte funcționalități, ar trebui să includă un mecanism puternic pentru scrierea testelor cu posibilitatea de a le rula în CI.
Așadar, urmând aceste orientări, am început să ne creăm produsul. Să vedem ce am realizat până acum.
Pornire rapidă
Să începem cu prima întâlnire cu aplicația. O puteți descărca . În prezent, sunt suportate toate cele 3 platforme principale — Windows, Linux, MacOS. Descărcați, instalați, rulați. La prima rulare, puteți vedea fereastra următoare:

Faceți clic pe plusul din partea de sus a zonei de conținut pentru a crea prima solicitare. Tab-ul de solicitări arată astfel:

Să ne concentrăm puțin mai în detaliu. Interfața cererii seamănă foarte mult cu interfața clienților rest populari, ceea ce ușurează migrarea de la astfel de instrumente. Să facem prima cerere la url

În general, la prima vedere, panoul de răspuns nici nu aduce vreo surpriză. Totuși, vreau să subliniez câteva puncte:
- Corpul răspunsului are o reprezentare sub formă de arbore, ceea ce, pe de o parte, adaugă informativitate și, pe de altă parte, permite adăugarea unor caracteristici interesante, despre care voi vorbi mai jos.
- Există o filă numită Assertions, care afișează lista testelor pentru această cerere.
După cum se poate observa, instrumentul nostru poate fi utilizat ca un client rest convenabil. Totuși, nu ne-am adunat aici dacă capacitățile sale s-ar limita doar la trimiterea cererilor. Mai departe, voi prezenta conceptele de bază și funcționalitățile TestMace.
Conceptele și funcționalitățile principale
Nod
Funcționalitatea TestMace este împărțită în diferite tipuri de noduri. În exemplul de mai sus, am demonstrat funcționarea nodului RequestStep. Totuși, în aplicație sunt disponibile și următoarele tipuri de noduri:
- RequestStep. Acesta este nodul prin care se poate crea o cerere. Ca element copil, poate avea doar un singur nod Assertion.
- Assertion. Nodul este folosit pentru a scrie teste. Poate fi un nod copil doar pentru nodul RequestStep.
- Folder. Permite gruparea nodurilor Folder și RequestStep în interiorul său.
- Project. Acesta este nodul rădăcină, creat automat la crearea unui proiect. În rest, repetă funcționalitățile nodului Folder.
- Link. Legătură către un nod Folder sau RequestStep. Permite reutilizarea cererilor și scenariilor.
- etc.
Nodurile sunt situate în scratches (panoul din stânga jos, folosit pentru a crea rapid cereri „de unică folosință”) și în project (panoul din stânga sus), la care ne vom opri mai în detaliu.
Proiect
Când ați lansat aplicația, ați putut observa o singură linie Project în colțul din stânga sus. Aceasta este rădăcina arborelui proiectului. Atunci când se lansează un proiect, se creează un proiect temporar, a cărui cale depinde de sistemul dumneavoastră de operare. În orice moment, puteți muta proiectul într-un loc convenabil pentru dumneavoastră.
Principala destinație a proiectului este posibilitatea de a salva progresul în sistemul de fișiere și de a realiza sincronizarea ulterioară prin sisteme de control al versiunilor, rularea scenariilor în CI, revizuirea modificărilor etc.
Variabile
Variabilele sunt un mecanism cheie al aplicației. Cei dintre voi care lucrează cu instrumente precum TestMace probabil că și-au dat deja seama despre ce este vorba. Așadar, variabilele sunt o modalitate de a păstra date comune și de a comunica între noduri. Un exemplu ar fi variabilele de mediu în Postman sau Insomnia. Cu toate acestea, noi am mers mai departe și am dezvoltat subiectul. În TestMace, variabilele pot fi setate la nivel de nod. Orice nod. De asemenea, există un mecanism de moștenire a variabilelor de la părinți și de suprascriere a variabilelor în descendenți. În plus, există un set de variabile încorporate, numele variabilelor încorporate încep cu $. Iată câteva dintre ele:
$prevStep— referință la variabilele nodului anterior$nextStep— referință la variabilele nodului următor$parent— același lucru, dar pentru părinte$response— răspuns de la server$env— variabilele de mediu curente$dynamicVar— variabile dinamice, create în timpul execuției scenariului sau al cererii
$env — acestea sunt, practic, variabile obișnuite la nivelul nodului Project, însă setul de variabile de mediu se schimbă în funcție de mediul selectat.
Accesul la variabilă se face prin ${variable_name}
Ca valoare a variabilei poate fi o altă variabilă sau chiar o întreagă expresie. De exemplu, ca variabilă url poate fi o expresie de forma
http://${host}:${port}/${endpoint}.
Merită menționat în mod special posibilitatea de a atribui variabile în timpul execuției scriptului. De exemplu, de multe ori apare necesitatea de a salva datele de autorizare (token sau întregul antet) care au venit de la server după un login reușit. TestMace permite salvarea unor astfel de date în variabile dinamice ale unuia dintre părinți. Pentru a evita coliziunile cu variabilele „statice” deja existente, variabilele dinamice sunt extrase într-un obiect separat. $dynamicVar.
Scenarii
Folosind toate aceste posibilități, puteți executa întregi scenarii de cereri. De exemplu, crearea unei entități -> cererea entității -> ștergerea entității. În acest caz, puteți folosi nodul Folder pentru a grupa mai multe noduri RequestStep.
Autocompletare și evidențierea valorii expresiei
Pentru o utilizare convenabilă a variabilelor (și nu numai) este necesară completarea automată. Și, desigur, evidențierea valorii expresiei, pentru a fi mai ușor și mai confortabil să clarificăm la ce valorează fiecare variabilă. Aici este un caz în care este mai bine să vezi o dată decât să auzi de o sută de ori:

Se cuvine să menționăm că completarea automată este implementată nu doar pentru variabile, ci și, de exemplu, pentru titluri, valorile anumitor titluri (de exemplu, completarea automată pentru titlul Content-Type), protocoale și multe altele. Lista este constant actualizată pe măsură ce aplicația crește.
Anulare / refacere
Anularea / refacerea modificărilor este o funcție foarte utilă, totuși, dintr-un motiv oarecare, nu este implementată peste tot (instrumentele pentru lucrul cu API-ul nu fac excepție). Dar noi nu facem parte din acești!) Anularea / refacerea este implementată în cadrul întregului proiect, ceea ce permite anularea nu doar a editării unei anumite nod, ci și a creării, ștergerii, mutării acesteia etc. Operațiile cele mai critice necesită confirmare.
Crearea testelor
Crearea testelor este responsabilitatea nodului Assertion. Una dintre trăsăturile principale este capacitatea de a crea teste fără programare, folosind editorii încorporați.
Nodul Assertion este compus dintr-un set de aserțiuni. Fiecare aserțiune are tipul său, în prezent existând mai multe tipuri de aserțiuni.
Compararea valorilor — compară pur și simplu 2 valori. Există mai mulți operatori de comparare: „egal”, „diferit”, „mai mare”, „mai mare sau egale”, „mai mic”, „mai mic sau egale”.
Conține valoare — verifică includerea unui substring într-un string.
XPath — verifică dacă un selector din XML are o anumită valoare.
Aserțiune JavaScript — un script arbitrar scris în limbajul JavaScript, care returnează true în cazul succesului și false în cazul eșecului.
Observ că numai ultima necesită abilități de programare din partea utilizatorului, celelalte 3 aserțiuni sunt create cu ajutorul interfeței grafice. Iată, de exemplu, cum arată dialogul de creare a unei aserțiuni de comparare a valorilor:

Cireașa de pe tort este crearea rapidă a aserțiunilor din răspuns, doar privește la asta!

Cu toate acestea, aceste aserțiuni au limitări evidente, în fața cărora poți folosi aserțiunea JavaScript. Și aici TestMace oferă, de asemenea, un mediu confortabil cu completare automată, evidențierea sintaxei și chiar un analist static.
Descriere API
TestMace permite nu doar utilizarea API-ului, ci și documentarea acestuia. Descrierea are, de asemenea, o structură ierarhică și se integrează organic în restul proiectului. În plus, în acest moment există posibilitatea de a importa descrierea API din formatele Swagger 2.0 / OpenAPI 3.0. Descrierea nu stă doar ca un bagaj mort, ci se integrează strâns cu restul proiectului, în special oferind completarea automată a URL-urilor, anteturilor HTTP, parametrilor de interogare și altele, iar în viitor planificăm să adăugăm teste pentru conformitatea răspunsului cu descrierea API-ului.
Partajarea nodurilor
Caz: ți-ar plăcea să partajezi o cerere problematică sau chiar un întreg scenariu cu un coleg sau pur și simplu să o atasezi la un bug. TestMace acoperă și acest caz: aplicația permite serializarea oricărui nod și chiar a subarborescenței în URL. Copy-paste și deja ai transferat cu ușurință cererea pe o altă mașină sau proiect.
Format de stocare ușor de citit pentru proiect
În prezent, fiecare nod este stocat într-un fișier separat cu extensia yml (ca în cazul nodului Assertion), sau într-un folder cu numele nodului și un fișier index.yml în interiorul acestuia.
Iată cum arată, de exemplu, fișierul cu cererea pe care am realizat-o în revizuirea de mai sus:
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 1După cum poți vedea, totul este extrem de clar. Dacă dorești, acest format este destul de confortabil de editat și manual.
Ierarhia folderelor în sistemul de fișiere reproduce complet ierarhia nodurilor din proiect. De exemplu, un scenariu de gen:

Se mappează în sistemul de fișiere pe următoarea structură (doar ierarhia folderelor este arătată, dar ideea este clară)

Ceea ce facilitează procesul de revizuire a proiectului.
Importul din Postman
Citind tot ce a fost prezentat mai sus, unii utilizatori ar putea dori să încerce (nu-i așa?) noul produs sau (cine știe?) să-l folosească pe deplin în proiectul lor. Cu toate acestea, migrarea poate fi oprită de un număr mare de lucrări realizate în același Postman. Pentru astfel de cazuri, TestMace suportă importul colecțiilor din Postman. În acest moment, se suportă imporul fără teste, dar în viitor nu excludem și suportul acestora.
Planuri
Sper că mulți dintre cei care au citit până aici au găsit produsul nostru pe plac. Totuși, asta nu e tot! Lucrările la produs continuă cu avânt și iată câteva caracteristici pe care plănuim să le adăugăm în curând.
Sincronizare în cloud
Una dintre cele mai solicitate caracteristici. În prezent, oferim ca soluție de sincronizare utilizarea sistemelor de control al versiunilor, de aceea facem formatul mai prietenos pentru acest tip de stocare. Totuși, nu toată lumea preferă acest flux de lucru, așa că plănuim să adăugăm un mecanism de sincronizare obișnuit, cunoscut de mulți, prin intermediul serverelor noastre.
CLI
După cum s-a menționat anterior, produsele de tip IDE nu sunt complete fără diverse integrații cu aplicațiile existente sau cu fluxurile de lucru. CLI este exact ceea ce avem nevoie pentru integrarea testelor scrise în TestMace în procesul de integrare continuă. Lucrările la CLI se desfășoară intens, iar în versiunile timpurii va exista un proiect care va genera un raport simplu în consolă. Ulterior, ne propunem să adăugăm o ieșire a raportului în format JUnit.
Sistem de pluginuri
În ciuda puterii instrumentului nostru, setul de cazuri care necesită soluționare este nelimitat. La urma urmei, există sarcini specifice pentru fiecare proiect. Din acest motiv, ne propunem să adăugăm un SDK pentru dezvoltarea de pluginuri, astfel încât fiecare programator să poată adăuga funcționalități după preferințele sale.
Extinderea gamei de tipuri de noduri
Acest set de noduri nu acoperă toate cazurile necesare utilizatorilor. Nodurile pe care plănuim să le adăugăm sunt:
- Nod Script — transformă și plasează date folosind js și API-ul corespunzător. Folosind acest tip de nod, se pot realiza lucruri precum scripturi pre-request și post-request în Postman.
- Nod GraphQL — suport pentru graphql
- Nod Custom assertion — va permite extinderea setului de aserțiuni existente în proiect
Bineînțeles, aceasta nu este o listă finală; aceasta va fi constant îmbogățită, inclusiv cu feedback-ul dumneavoastră.
Întrebări frecvente
Ce vă diferențiază de Postman?
- Conceptul de noduri, care permite scalarea aproape infinită a funcționalității proiectului
- Format prietenos pentru utilizatori al proiectului, cu stocarea acestuia în sistemul de fișiere, ceea ce simplifică utilizarea sistemelor de control al versiunilor
- Posibilitatea de a crea teste fără programare și o suport mai avansat pentru js în editorul de teste (completare automată, analizator static)
- Autocompletare avansată și evidențierea valorii curente a variabilelor
Este un produs open-source?
Nu, în prezent sursele sunt închise, dar în viitor analizăm posibilitatea de a le deschide
Din ce vă întrețineți?)
Pe lângă versiunea gratuită, plănuim să lansăm o versiune plătită a produsului. Aceasta va include în primul rând caracteristici care necesită parte de server, de exemplu, sincronizarea.
Concluzie
Proiectul nostru avansează rapid spre o lansare stabilă. Totuși, deja acum produsul poate fi folosit, iar feedback-ul pozitiv al utilizatorilor noștri timpurii confirmă acest lucru. Colectăm activ feedback, deoarece fără o colaborare strânsă cu comunitatea nu se poate construi un instrument bun. Ne puteți găsi aici:
Așteptăm cu nerăbdare dorințele și propunerile voastre!
Sursa: habr.com
