
Hei alle sammen, her er vi ! Mange kjenner kanskje til oss fra . For de som nettopp har koblet seg til: vi utvikler et IDE for arbeid med API TestMace. Det mest stilte spørsmålet når man sammenligner TestMace med konkurrerende produkter er - «Hva skiller dere fra Postman?». Vi har bestemt oss for å gi et grundig svar på dette spørsmålet. Nedenfor har vi punktvis oppsummert våre fordeler i forhold til .
Oppdeling i noder
Hvis du jobber med Postman, vet du at forespørselens grensesnitt inneholder all nødvendig funksjonalitet. Her finner du skript, tester og selve forespørslene. Dette forenkler arbeidet for nybegynnere, men i større scenarier er ikke denne tilnærmingen fleksibel. Hva om du ønsker å lage flere forespørseler og aggregere dem? Hva om du vil kjøre et skript uten forespørsel eller flere logisk atskilte skript på rad? Til slutt ville det være fint å skille tester fra vanlige nyttige skript. I tillegg er tilnærmingen «vi legger all funksjonalitet i én node» ikke skalerbar — grensesnittet blir raskt overbelastet.
TestMace deler opprinnelig all funksjonalitet inn i ulike typer noder. Vil du lage en forespørsel? Her har du node. Vil du skrive et skript? Her har du node. Trenger du tester? Vær så god — node. Åh ja, du kan også pakke alt dette inn i node. Og alt dette lar seg enkelt kombinere. Denne tilnærmingen er ikke bare veldig fleksibel, men i samsvar med prinsippet om enkeltansvar, lar deg bruke bare det du faktisk trenger i øyeblikket. Hvorfor trenger jeg skript og tester hvis jeg bare vil lage en forespørsel?
Menneskelig lesbar prosjektformat
Det er et konseptuelt skille mellom TestMace og Postman når det kommer til lagring. I Postman lagres alle forespørslene et sted i lokal lagring. Hvis det er behov for å dele forespørslene mellom flere brukere, må man bruke innebygd synkronisering. Faktisk er dette en allment akseptert tilnærming, men ikke uten ulemper. Hvordan er sikkerheten til dataene? Fordi politikken til noen selskaper kan forby lagring av data hos tredjepart. Vi mener imidlertid at TestMace kan tilby noe bedre! Og navnet på denne forbedringen er «menneskelig lesbar prosjektformat».
La oss begynne med at TestMace i utgangspunktet har en enhet kalt “prosjekt”. Applikasjonen ble opprinnelig utviklet med tanke på lagring av prosjekter i versjonskontrollsystemer: prosjektstrukturen projiseres nesten direkte på filsystemet, lagringsformatet som brukes er yaml (uten unødvendige parenteser og komma), og den filbaserte representasjonen av hver node er detaljert beskrevet i dokumentasjonen med kommentarer. Men i de fleste tilfeller vil du ikke se på det — alle felt navngivningene er logiske.
Hva gir dette brukeren? Det gjør det mulig å endre teamets arbeidsflyt på en veldig fleksibel måte, ved å bruke kjente metoder. For eksempel kan utviklere lagre prosjektet i samme depot som backend. I grenene, i tillegg til endringer i selve kodebasen, kan utvikleren rette opp eksisterende forespørselsscenarier og tester. Etter bekreftelse av endringene i depotet (git, svn, mercurial — hva du liker best) lanserer CI (din favoritt, ingen påtvunget) vår kommandolinjeverktøy , og rapporten som genereres etter kjøringen (for eksempel i junit-format, som også støttes i testmace-cli) sendes til det aktuelle systemet. Og det ovennevnte spørsmålet om sikkerhet er ikke lenger et problem.
Som du kan se, pålegger ikke TestMace sitt eget økosystem og paradigme. I stedet integreres det enkelt i allerede etablerte prosesser.
Dynamiske variabler
TestMace følger no-code-konseptet: hvis et problem kan løses uten å bruke kode, prøver vi å gi den muligheten. Arbeid med variabler er akkurat den funksjonaliteten hvor det i de fleste tilfeller er mulig å unngå programmering.
Eksempel: vi fikk et svar fra serveren, og vi ønsker å lagre en del av svaret i en variabel. I Postman ville vi i testskriptet (som i seg selv er merkelig) skrevet noe i retning av:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", jsonData.data);Men etter vår mening ser det å skrive et skript for et så enkelt og ofte brukt scenario overflødig ut. Derfor har TestMace muligheten til å tilordne en del av svaret til en variabel ved å bruke det grafiske grensesnittet. Se hvor enkelt det er:

Og nå vil denne dynamiske variabelen oppdateres ved hver forespørsel. Men du kan kanskje innvende og si at Postman-tilnærmingen er mer fleksibel og tillater ikke bare å gjøre en tildeling, men også å utføre en form for forhåndsbehandling. Her er hvordan du kan modifisere det forrige eksemplet:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", CryptoJS.MD5(jsonData.data));Vel, for dette finnes en node i TestMace som dekker dette scenariet. For å gjenskape det forrige tilfellet, men nå i TestMaces utførelse, må du etter forespørselen opprette en script-node og bruke følgende kode som skript:
const data = tm.currentNode.prev.response.body.data;
tm.currentNode.parent.setDynamicVar('data', crypto.MD5(data));Som du ser, har sammensetningen av noder også vært til stor hjelp her. Og for et så enkelt tilfelle som beskrevet ovenfor, kan du til og med bare tilordne uttrykket ${crypto.MD5($response.data)} til variabelen som opprettes via det grafiske grensesnittet!
Oppretting av tester via GUI
Postman gjør det mulig å lage tester ved å skrive skript (i Postman er dette JavaScript). Denne tilnærmingen har mange fordeler – praktisk talt ubegrenset fleksibilitet, tilgjengeligheten av ferdige løsninger, osv.
Men virkeligheten er ofte slik (vi er ikke skyld i det, livet er slik) at testeren ikke har programmeringsferdigheter, men ønsker å bidra til teamet nå. For slike tilfeller, i tråd med no-code-konseptet, lar TestMace deg lage enkle tester gjennom det grafiske grensesnittet uten å skrive skript. Her er, for eksempel, hvordan prosessen med å lage en test som sammenligner verdier for likhet ser ut:

Men oppretting av tester i den grafiske redaktøren fritar ikke muligheten . Her bruker du de samme bibliotekene som i script-noden, og for å skrive tester.
Muligheten til å kjøre en allerede eksisterende scenario via lenken (Link-node)
Oppstår ofte situasjoner der en bestemt forespørsel eller til og med et helt scenario må kjøres flere ganger på forskjellige deler av prosjektet. Eksempler på slike forespørsel kan være tilpasset flertrinnsautorisering, sette opp miljøet til ønsket tilstand, osv. Generelt, hvis vi snakker i programmeringsspråk, vil man gjerne ha funksjoner som kan gjenbrukes i ulike deler av applikasjonen. I TestMace utfører denne funksjonen nod. Det er veldig enkelt å bruke:
1) opprett en forespørsel eller et skript
2) opprett en node av typen Link
3) i innstillingene angir du linken til skriptet som ble opprettet i første trinn
I en mer avansert variant kan du spesifisere hvilke dynamiske variabler fra skriptet som skal overføres til nivået over i forhold til linken. Høres dette komplisert ut? La oss si at vi har opprettet en Mappe med navnet create-post, der en dynamisk variabel blir tildelt denne noden postId. Nå kan du i Link-noden create-post-link ange eksplisitt at variabelen postId tilordnes til overordnet create-post-link. Denne mekanismen (igjen, i programmeringsspråk) kan brukes til å returnere et resultat fra en «funksjon». Generelt er det flott, DRY i full vekst og igjen har ingen linjer med kode blitt skadet.

Når det gjelder Postman, har forespørselen om gjenbruk av forespørslene , og det ser til og med ut til å være , om at det jobbes med dette problemet. For øyeblikket har Postman selvfølgelig muligheten til å bytte utførelsesflyt, noe som i teorien muligens lar deg implementere en slik oppførsel, men det er mer en skitten hack enn en virkelig fungerende tilnærming.
Andre forskjeller
- Større kontroll over synlighetsområdet for variabler. Det minste omfanget, der du kan definere en variabel i Postman, er collection. TestMace lar deg definere variable for enhver forespørsel eller mappe. I Postman lar Share collection deg eksportere bare samlinger, mens i TestMace fungerer deling for enhver node
- TestMace støtter , som som standard kan settes inn i underordnede forespørsel. I Postman er det på dette området , og det er faktisk lukket, men som løsning foreslås det å... . I TestMace konfigureres alt dette gjennom GUI, og det er en mulighet for valgfrie avstengninger av arvede overskrifter i spesifikke etterkommere.
- Angre/Gjør om. Fungerer ikke bare ved redigering av noder, men også ved flytting, sletting, omdøping og andre operasjoner som endrer prosjektstrukturen.
- Filer knyttet til forespørslene blir en del av prosjektet og lagres sammen med det, samtidig som de synkroniseres perfekt, i motsetning til Postman. (Ja, du trenger ikke lenger å velge filer manuelt hver gang ved hver oppstart og sende dem til kolleger i arkiver).
Funksjoner som allerede er på vei
Vi klarte ikke å motstå fristelsen til å åpne sløret over de kommende utgivelsene, spesielt når funksjonaliteten er så fristende og allerede gjennomgår en pre-release-finish. Så, la oss møte det.
Functions
Som kjent brukes såkalte dynamiske variabler for å generere verdier i Postman. og flertallet av funksjonene tjener til å generere falske verdier. For eksempel, for å generere en tilfeldig e-post må du skrive:
{{$randomEmail}}Men siden dette er variabler (om enn dynamiske), kan de ikke brukes som funksjoner: de er ikke parametriserbare, og derfor kan man ikke ta hashen av strengen.
I TestMace planlegger vi å legge til "ærlige" funksjoner. Rett inne i ${} vil det være mulig å ikke bare referere til en variabel, men også kalle en funksjon. Altså, hvis vi ønsker å generere den beryktede falske e-posten, skriver vi rett og slett
${faker.internet.email()}I tillegg til at dette er en funksjon, kan man merke seg at det er mulig å kalle metoden til objektet. Og i stedet for en stor flat liste over dynamiske variabler, har vi et sett av logisk grupperte objekter.
Og hva om vi ønsker å beregne hasjen av en streng? Lett!
${crypto.MD5($dynamicVar.data)}Man kan merke seg at man til og med kan sende variabler som parametere! På dette punktet kan den nysgjerrige leseren mistenke noe...
Bruk av JavaScript i uttrykk
... Og ikke uten grunn! Da kravene til funksjonene ble formulert, innså vi plutselig at vi måtte tillate gyldig JavaScript i uttrykkene. Derfor er du nå fri til å skrive uttrykk som:
${1 + '' + crypto.MD5('asdf')}Og alt dette uten skripting rett i inndatafeltene!
Når det gjelder Postman, kan man bare bruke variabler, og ved forsøk på å skrive et minimalt uttrykk, reagerer validatoren med å klage og nekter å beregne det.
![]()
Avansert autocompletion
For øyeblikket har TestMace standard autocompletion som ser slik ut:

Her angis det i tillegg til den autocompletable strengen hva den aktuelle strengen tilhører. Denne mekanismen virker kun i uttrykk omkranset av ${}.
Som kan merkast, har det kome visuelle markørar som indikerer typen av variabel (som streng, tal, matrise osv.). Det er også mogleg å endre autokompliteringsmodus (for eksempel kan ein velje autokomplettering med variablar eller overskrifter). Men sjølv dette er ikkje det viktigaste!
For det første, autokomplettering fungerer til og med i uttrykk (der det er mogleg). Slik ser det ut:

Og for det andre er autokomplettering no også tilgjengeleg i skript. Ta ein titt på korleis det fungerer!

Det er ingen mening å samanlikne denne funksjonen med Postman – der er autokomplettering avgrensa til berre statiske lister over variablar, overskrifter og verdiane deira (rett meg om eg har gløymt noko). Skript får ikkje autokomplettering 🙁
Konklusjon
I oktober fylte det eitt år sidan utviklinga av produktet vårt starta. I løpet av denne tida har vi klart å gjere mykje og har nådd opp til konkurrentane våre på nokre parameter. Men uansett, vårt mål er å lage eit verkeleg brukervennleg verktøy for arbeid med API. Vi har framleis mykje arbeid igjen, her er ein omtrentlig utviklingsplan for prosjektet vårt det kommende året: .
Tilbakemeldingane frå dykk gir oss betre oversyn over mengda av funksjonar, og støtta dykkar gir oss styrke og tryggleik til å vite at vi gjer noko nyttig. Det har seg slik at i dag er ein viktig dag for prosjektet vårt – dagen for publiseringa av TestMace på . Vennligst støtt prosjektet vårt, det betyr mykje for oss. Spesielt sidan det er eit fristande tilbod på PH-sida vår i dag, og det er avgrensa
Kilde: habr.com
