
Živjo, dobrodošli! ! Mnogi nas že poznajo iz . Za tiste, ki ste se pravkar pridružili: razvijamo IDE za delo z API-ji TestMace. Najpogostejše vprašanje ob primerjavi TestMace s konkurenco je: "Kaj vas loči od Postman?". Odločili smo se, da je čas, da podamo celovit odgovor na to vprašanje. Spodaj smo po točkah opisali naše prednosti v primerjavi z .
Razdelitev na vozlišča
Če delate s Postman, potem veste, da vmesnik zahteve vsebuje vse potrebne funkcionalnosti. Tukaj so skripti, testi in, pravzaprav, same zahteve. To poenostavi delo za začetnike, a pri večjih scenarijih ta pristop ni dovolj fleksibilen. Kaj pa, če želite ustvariti več zahtev in izvesti agregacijo? Kaj pa, če želite izvesti skript brez zahteve ali več logično ločenih skriptov zaporedoma? Na koncu je dobro ločiti teste od običajnih utilitarnih skript. Poleg tega je pristop „dodajamo vse funkcionalnosti v eno vozlišče“ nestopen, saj vmesnik hitro postane preobremenjen.
TestMace od začetka ločuje vse funkcionalnosti na različne vrste vozlišč. Hočeš izvesti zahtevo? Tukaj je ti vozlišče. Hočeš napisati skript? Tukaj je ti vozlišče. Potrebni so testi? Prosim — vozlišče. Oh ja, to lahko oviješ vse skupaj v vozlišče. In vse to se enostavno kombinira. Ta pristop ni le zelo fleksibilen, ampak v skladu z načelom edine odgovornosti omogoča uporabo le tistega, kar resnično potrebuješ v tem trenutku. Zakaj mi skripti in testi, če želim le izvesti zahtevo?
Človeško berljiv format projekta
Med TestMace in Postman obstaja konceptualna razlika v načinu shranjevanja. V Postman so vse zahteve shranjene nekje v lokalnem skladišču. Če je potrebno deliti zahteve med več uporabniki, je treba uporabiti vgrajeno sinhronizacijo. V resnici je to splošno sprejet pristop, ki pa ni brez pomanjkljivosti. Kako pa je z varnostjo podatkov? Politika nekaterih podjetij morda ne dovoljuje shranjevanja podatkov pri tretjih osebah. Vendar menimo, da lahko TestMace ponudi nekaj boljšega! In ime temu izboljšanju je "človeško berljiv format projekta".
Začnemo s tem, da v TestMace v bistvu obstaja entiteta 'projekt'. Aplikacija je bila sprva razvita z namenom shranjevanja projektov v sistemih za nadzor različic: drevo projekta je skoraj v celoti projicirano na datotečno strukturo, kot format shranjevanja pa se uporablja yaml (brez odvečnih oklepajev in vejic), datotečna predstavitev vsakega vozlišča pa je podrobno opisana v dokumentaciji s komentarji. Vendar večino časa ne boste potrebovali dostopati do tega — vsa imena polj imajo smiselna imena.
Kaj to prinaša uporabniku? To omogoča zelo fleksibilno spreminjanje delovnega toka ekipe, z uporabo znanih pristopov. Na primer, razvijalci lahko shranijo projekt v istem repozitoriju kot backend. V vejah, poleg spreminjanja same kode, lahko razvijalec popravlja obstoječih skriptov in testov. Po potrditvi sprememb v repozitoriju (git, svn, mercurial - kar vam je ljubše) CI (vaša najljubša, nikomur ne vsiljena) zažene našo konzolno orodje , in poročilo, pridobljeno po izvedbi (na primer v formatu junit, ki ga podpira tudi testmace-cli), se pošlje v ustrezni sistem. In vprašanje varnosti, omenjeno zgoraj, ni več težava.
Kot vidite, TestMace ne vsiljuje svoje ekosisteme in paradigme. Namesto tega se enostavno vklopi v že ustaljene procese.
Dinamične spremenljivke
TestMace sledi konceptu no-code: če je problem mogoče rešiti brez uporabe kode, se trudimo ponuditi to možnost. Delo s spremenljivkami je prav tisti funkcionalnost, kjer se v večini primerov da brez programiranja.
Primer: prejeli smo odgovor od strežnika in želimo del odgovora shraniti v spremenljivko. V Postmanu bi v testnem skriptu (kar je samo po sebi čudno) napisali nekaj v smislu:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", jsonData.data);Vendar se nam zdi, da pisanje skripte za tako enostaven in pogosto uporabljen scenarij deluje pretirano. Zato v TestMace obstaja možnost dodelitve spremenljivki dela odgovora, s pomočjo grafičnega vmesnika. Poglejte, kako preprosto je to:

In every request, this dynamic variable will be updated. However, you might argue that the Postman approach is more flexible, allowing not only assignment but also some preprocessing. Here's how to modify the previous example:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", CryptoJS.MD5(jsonData.data));Well, for this, TestMace has a node that covers this scenario. To reproduce the previous case, but now using TestMace, you need to create a script node after the request and use the following code as the script:
const data = tm.currentNode.prev.response.body.data;
tm.currentNode.parent.setDynamicVar('data', crypto.MD5(data));As you can see, the composition of nodes proved useful here as well. And for such a simple case as described above, you can simply assign the expression ${crypto.MD5($response.data)} to a variable created through the graphical interface!
Creating tests through the GUI
Postman allows creating tests by writing scripts (in the case of Postman, this is JavaScript). This approach has many advantages — virtually unlimited flexibility, availability of ready-made solutions, etc.
However, the reality is often such (it's not us, it's life) that the tester lacks programming skills, but would like to add value to the team right now. For such cases, following the no-code concept, TestMace allows creating simple tests through the graphical interface without writing scripts. Here’s what the process of creating a test that compares values for equality looks like:

However, creating tests in the graphical editor does not eliminate the possibility . Here, you have all the same libraries as in the script node, and for writing tests.
The ability to run an already existing scenario via a link (Link node)
Often, situations arise where a certain request or even an entire scenario needs to be executed multiple times in different parts of the project. Examples of such requests may include custom multi-step authorization, bringing the environment to the desired state, etc. In general, speaking in programming language terms, it would be nice to have functions that can be reused in different parts of the application. In TestMace, this function is fulfilled by Vožec. Njegova uporaba je zelo enostavna:
1) ustvarite zahtevo ali skripto
2) ustvarite vožec tipa Link
3) v parametrih navedite povezavo do skripte, ustvarjene v prvem koraku
V bolj napredni različici lahko navedete, katere dinamične spremenljivke iz skripte posredovati na višjo raven v zvezi s povezavo. Zveni zapleteno? Recimo, da smo ustvarili mapo z imenom create-post, znotraj katere je ta vožec dodeljen dinamični spremenljivki postId. Zdaj v vožcu Link create-post-link lahko izrecno navedete, da se spremenljivka postId dodeli predniku create-post-link. Ta mehanizem (spet v programerskem jeziku) se lahko uporablja za vračanje rezultata iz "funkcije". Na splošno je to super, DRY v polni meri in spet ni enega samega vrstice kode trpelo.

Kar se tiče Postmana, je zahteva za funkcijo ponovne uporabe zahtevkov , in zdi se, da obstajajo , da na tej težavi delajo. V aktu Postman se seveda lahko spremeni tok izvajanja, kar v teoriji, morda, omogoča uresničitev takega obnašanja, vendar je to bolj umazan hakat, kot pa resnično delujoč pristop.
Druge razlike
- Boljši nadzor nad vidnostjo spremenljivk. Najmanjši obseg, znotraj katerega lahko določite spremenljivko v Postmanu, je kolekcija. TestMace omogoča določitev spremenljivk za katerokoli zahtevo ali mapo. V Postmanu možnost deljenja kolekcij omogoča izvoz samo kolekcij, medtem ko v TestMace deljenje deluje za katerikoli vožec.
- TestMace podpira , ki se privzeto lahko vstavijo v podrejene zahteve. Glede tega ima Postman , in je celo zaprta, vendar se kot rešitev predlaga... . V TestMace je vse to mogoče konfigurirati preko GUI, obstaja možnost opcijskega izklopa dedovanih glav v določenih potomcih.
- Undo/Redo. Deluje ne samo pri urejanju vozlišč, temveč tudi pri premikanju, brisanju, preimenovanju in drugih operacijah, ki spreminjajo strukturo projekta.
- Datoteke, pritrjene na zahteve, postanejo del projekta in se hranijo z njim, ob tem pa se odlično sinhronizirajo, v nasprotju s Postmanom. (Da, več ni treba vsakič ročno izbirati datotek pri vsakem zagonu in jih prenašati sodelavcem v arhivih.)
Funkcije, ki so že na poti.
Nismo mogli odoljeti iskušenju da malo razotkrijemo misteriju budućih izdanja, pogotovo kada je funkcionalnost jako privlačna i već prolazi predizbornu doradu. Dakle, dobrodošli.
Functions
Kao što je poznato, za generiranje vrijednosti u Postmanu koriste se takozvane dinamičke varijable. i velika većina funkcija služi za generiranje lažnih vrijednosti. Na primjer, za generiranje nasumičnog emaila potrebno je napisati:
{{ $randomEmail }}Međutim, budući da su to varijable (čak i dinamičke), ne mogu se koristiti kao funkcije: nisu parametrizirane, stoga nije moguće dobiti hash od stringa.
U TestMace-u planiramo dodati "poštene" funkcije. Direktno unutar ${} moći ćete ne samo pristupiti varijablama, već i pozvati funkciju. Dakle, ako želite generirati famozni lažni email, jednostavno ćemo napisati
${faker.internet.email()}Osim što je ovo funkcija, možemo primijetiti da postoji mogućnost poziva metode objekta. I umjesto velikog ravnog popisa dinamičkih varijabli, imamo set logički grupiranih objekata.
A što ako želimo izračunati hash od stringa? Lako!
${crypto.MD5($dynamicVar.data)}Možemo primijetiti da se kao parametri mogu čak proslijediti i varijable! Na ovom mjestu znatiželjni čitatelj može posumnjati u nešto...
Korištenje JavaScript-a u izrazima
... I nije bez razloga! Kada su se formirali zahtjevi za funkcije, iznenada smo došli do zaključka da u izrazima treba omogućiti pisanjem valjanog JavaScript-a. Zato sada možete slobodno pisati izraze u stilu:
${1 + '' + crypto.MD5('asdf')}I sve to bez skripti direktno u unosnim poljima!
Što se tiče Postmana, ovdje se mogu koristiti samo varijable, a prilikom pokušaja pisanja bilo kakvog izraza, validator se žali i odbija ga izračunati.
![]()
Napredno automatsko dovršavanje
Trenutno TestMace ima standardno automatsko dovršavanje, koje izgleda ovako:

Ovdje, osim automatski dovršene stringa, navodi se s čime je taj string povezan. Ovaj mehanizam djeluje samo u izrazima obuhvaćenim zagradama ${}.
Kot lahko opazimo, so se dodali vizualni markerji, ki nakazujejo vrsto spremenljivke (na primer, niz, številka, seznam itd.). Prav tako lahko spreminjate načine samodejnega dopolnjevanja (na primer, lahko izberete samodejno dopolnjevanje s spremenljivkami ali naslovi). A to še ni najpomembnejše!
Prvič, samodejno dopolnjevanje deluje tudi v izrazih (kjer je to mogoče). Tako to izgleda:

In drugič, zdaj je samodejno dopolnjevanje na voljo tudi v skriptih. Oglejte si, kako to deluje!

Te funkcionalnosti ni smiselno primerjati s Postmanom — tam se samodejno dopolnjevanje omejuje le na statične sezname spremenljivk, naslovov in njihovih vrednosti (popravite me, če sem kaj pozabil). Skripti se ne samodejno dopolnjujejo 🙁
Zaključek
V oktobru je minilo leto od začetka razvoja našega izdelka. V tem času smo uspeli narediti veliko in v nekaterih parametrih dohiteti naše konkurente. A kljub vsemu je naš cilj ustvariti resnično udoben pripomoček za delo z API-ji. Čaka nas še veliko dela, tukaj je okvirni načrt razvoja našega projekta za naslednje leto: .
Vaša povratna informacija nam bo pomagala bolje usmeriti obilo funkcij, vaša podpora pa nam daje moč in zaupanje, da delamo pravo stvar. Tako se je zgodilo, da je danes pomemben dan za naš projekt — dan objave TestMace na . Prosim, podprite naš projekt, to nam zelo pomeni. Še posebej, ker imamo danes na naši PH strani privlačno ponudbo, ki je omejena
Izvor: habr.com
