TestMace — en kraftig IDE for API-arbeid

Hei alle sammen! I dag ønsker vi å presentere vårt produkt for IT-samfunnet - en IDE for API-arbeid TestMace. Kanskje noen av dere allerede kjenner oss fra tidligere artikler. Men det har ikke vært noen omfattende gjennomgang av verktøyet, så vi retter opp i denne svikten.

TestMace — en kraftig IDE for API-arbeid

Motivasjon

Vi vil gjerne starte med hvordan vi kom til denne situasjonen og bestemte oss for å lage vårt eget verktøy for avansert API-arbeid. La oss begynne med listen over funksjonene som et produkt, som vi mener fortjener navnet "IDE for API-arbeid", bør ha:

  • Oppretting og utføring av forespørsel og script (sekvenser av forespørsel)
  • Skriving av ulike typer tester
  • Generering av tester
  • Jobbe med API-beskrivelse, inkludert import fra formater som Swagger, OpenAPI, WADL osv.
  • Mocking av forespørsel
  • God støtte for ett eller flere programmeringsspråk for skripting, inkludert integrasjon med populære biblioteker
  • osv.

Listen kan utvides etter smak. Det er også viktig å lage ikke bare selve IDE-en, men også en bestemt infrastruktur, som skylagring, kommandolinjeverktøy, online overvåkningstjeneste osv. Til syvende og sist dikterer trendene de siste årene ikke bare kraftige funksjoner i applikasjonen, men også et behagelig grensesnitt.

Hvem trenger et slikt verktøy? Åpenbart alle som er involvert i utvikling og testing av API-er - utviklere og testere =). For de førstnevnte er det ofte tilstrekkelig med enkeltforespørsel og enkle skripter, mens for testere er dette et av de viktigste verktøyene som i tillegg må inkludere sterke mekanismer for å skrive tester med mulighet for kjøring i CI.

Så, i tråd med disse retningslinjene, begynte vi å utvikle vårt produkt. La oss ta en titt på hva vi har oppnådd så langt.

Rask start

La oss begynne med å bli kjent med applikasjonen. Du kan laste den ned på vår nettside. For øyeblikket støttes alle 3 hovedplattformer - Windows, Linux, MacOS. Last ned, installer og kjør. Ved første oppstart kan du se følgende vindu:

TestMace — en kraftig IDE for API-arbeid

Klikk på pluss-tegnet øverst i innholdsområdet for å opprette den første forespørselen. Fanen med forespørselen ser slik ut:

TestMace — en kraftig IDE for API-arbeid

La oss se nærmere på det. Forespørselgrensesnittet ligner sterkt på grensesnittene til populære REST-klienter, noe som gjør migreringen fra slike verktøy enklere. La oss utføre den første forespørselen til URL-en https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace — en kraftig IDE for API-arbeid

Ved første øyekast ser det ut til at responspanelet ikke gir noen overraskelser. Men jeg vil påpeke noen punkter:

  1. Kroppen av responsen har en trestruktur, noe som dels gir mer informasjon, og dels tillater å legge til noen interessante funksjoner, som jeg vil forklare nedenfor.
  2. Det finnes en faneblad for Assertions, hvor testlisten for denne forespørselen vises.

Som du kan se, kan verktøyet vårt brukes som en praktisk REST-klient. Men vi ville ikke være her hvis mulighetene var begrenset til bare å sende forespørsler. Jeg vil nå forklare de grunnleggende begrepene og funksjonalitetene til TestMace.

Grunnleggende begreper og muligheter

Nod

Funksjonaliteten til TestMace er delt etter ulike nodetyper. I eksemplet ovenfor viste vi hvordan RequestStep-noden fungerer. Men for øyeblikket er følgende nodetyper også tilgjengelige i applikasjonen:

  • RequestStep. Dette er noden som brukes til å lage en forespørsel. Den kan bare ha ett Assertion-noden som barnet.
  • Assertion. Noden brukes til å skrive tester. Den kan bare være en barnenode for RequestStep-noden.
  • Folder. Lar deg gruppere Folder- og RequestStep-noder inni seg.
  • Project. Dette er rot-noden, som automatisk opprettes ved oppretting av prosjektet. Ellers gjentar det funksjonalitetene til Folder-noden.
  • Link. En lenke til en Folder- eller RequestStep-node. Lar deg gjenbruke forespørslene og scenariene.
  • osv.

Nodene er plassert i scratches (panelet nederst til venstre, som brukes for raskt å lage 'engangs'-forespørslene) og i project (panelet øverst til venstre), som vi vil se nærmere på.

Prosjekt

Når du starter applikasjonen, kan du ha lagt merke til den ensomme linjen Project i øverste venstre hjørne. Dette er rotpunktet for prosjektet. Når prosjektet startes, opprettes et midlertidig prosjekt, og banen til dette avhenger av operativsystemet ditt. Du kan når som helst flytte prosjektet til et sted som er mer praktisk for deg.

Hovedformålet med prosjektet er å kunne lagre arbeidet i filsystemet og deretter synkronisere gjennom versjonskontrollsystemer, kjøre scenarier i CI, gjennomgå endringer, osv.

Variabler

Variabler er en av de viktige mekanismene i applikasjonen. De av dere som jobber med verktøy som TestMace, har kanskje allerede forstått hva dette handler om. Så, variabler er en måte å lagre felles data og kommunisere mellom noder. Et analogt eksempel er miljøvariabler i Postman eller Insomnia. Men vi har gått videre og utviklet temaet. I TestMace kan variabler settes på nodenivå. Enhver. Det finnes også en mekanisme for å arve variabler fra foreldrene og overstyre variabler i avkom. I tillegg finnes det en rekke innebygde variabler, navnene på innebygde variabler begynner med $. Her er noen av dem:

  • $prevStep — referanse til variabler fra forrige node
  • $nextStep — referanse til variabler fra neste node
  • $parent — det samme, men for forelderen
  • $response — svar fra serveren
  • $env — nåværende miljøvariabler
  • $dynamicVar — dynamiske variabler som opprettes under kjøring av scenariet eller forespørselen

$env — dette er egentlig vanlige variabler på prosjekt nivå, men settet av miljøvariabler endres avhengig av det valgte miljøet.

Tilgang til variabelen skjer gjennom ${variable_name}
Som verdi av variabelen kan være en annen variabel, eller til og med en hel uttrykk. For eksempel kan en variabel url ha et uttrykk av typen
http://${host}:${port}/${endpoint}.

Det er verdt å merke seg muligheten for å tilordne variabler under kjøring av skriptet. For eksempel, er det ofte nødvendig å lagre autentiseringsdata (token eller hele headeren), som kom fra serveren etter vellykket innlogging. TestMace lar deg lagre slike data i dynamiske variabler av en av foreldrene. For å unngå kollisjoner med allerede eksisterende «statisk» variabler, er dynamiske variabler plassert i et eget objekt $dynamicVar.

Scenarier

Ved å bruke alle de nevnte mulighetene kan du utføre hele scenarier av forespørslene. For eksempel, opprette en enhet -> forespørre enheten -> slette enheten. I dette tilfellet kan du for eksempel bruke Folder noden for å gruppere flere RequestStep noder.

Autofullføring og fremheving av uttrykkets verdi

For convenient work with variables (and not only), autocompletion is necessary. And of course, highlighting the value of an expression makes it easier and more convenient to clarify what a particular variable represents. This is one of those cases where it's better to see something once than to hear about it a hundred times.

TestMace — en kraftig IDE for API-arbeid

It should be noted that autocompletion is not only implemented for variables, but also, for example, for headers, values of certain headers (like autocompletion for the Content-Type header), protocols, and much more. The list is constantly expanding as the application grows.

Undo/redo

Undo/redo functions are very handy; however, for some reason, they are not implemented everywhere (and tools for working with APIs are no exception). But we're not like that!) Undo/redo is implemented across the entire project, allowing you to undo not only the editing of a specific node but also its creation, deletion, moving, etc. The most critical operations require confirmation.

Creating tests

The Assertion node is responsible for creating tests. One of the main features is the ability to create tests without programming, using built-in editors.

The Assertion node consists of a set of assertions. Each assertion has its own type; currently, there are several types of assertions.

  1. Compare values — simply compares 2 values. There are several comparison operators: 'equals', 'not equals', 'greater', 'greater or equal', 'less', 'less or equal'.

  2. Contains value — checks for the presence of a substring within a string.

  3. XPath — checks that a specific value exists by the selector in XML.

  4. JavaScript assertion — an arbitrary script written in JavaScript that returns true upon success and false upon failure.

I should note that only the last one requires programming skills from the user; the other 3 assertions are created using a graphical interface. Here's how the dialog for creating a compare values assertion looks:

TestMace — en kraftig IDE for API-arbeid

The cherry on top is the quick creation of assertions from the response; just take a look at this!

TestMace — en kraftig IDE for API-arbeid

However, such assertions have obvious limitations, and when you encounter them, you can use JavaScript assertions. Here, TestMace also provides a comfortable environment with autocompletion, syntax highlighting, and even a static analyzer.

API Documentation

TestMace gir deg ikke bare muligheten til å bruke API-et, men også til å dokumentere det. Beskrivelsen har også en hierarkisk struktur som integreres godt med resten av prosjektet. I tillegg er det nå mulig å importere API-beskrivelser fra Swagger 2.0 / OpenAPI 3.0 formater. Beskrivelsen ligger ikke bare stille, men integreres nært med resten av prosjektet, spesielt med auto-fullføring av URL-er, HTTP-hoder, spørringsparametere og mer. I fremtiden planlegger vi å legge til tester for å sjekke om svaret samsvarer med API-beskrivelsen.

Deling av noder

Scenario: Du ønsker å dele et problematisk spørring eller til og med et helt scenario med en kollega, eller bare legge det ved en feilrapport. TestMace dekker også dette scenariet: applikasjonen lar deg serialisere hvilken som helst node og til og med et undertre i en URL. Kopier-og-lim inn, og du har enkelt overført spørringen til en annen maskin eller prosjekt.

Menneskelig lesbart format for prosjektlagring

For øyeblikket lagres hver node i en egen fil med filtypen yml (som i tilfellet med Assertion-noden), eller i en mappe med nodens navn og en index.yml-fil i den.
Slik ser filen med forespørselen ut, slik vi gjorde i anmeldelsen ovenfor:

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

Som du ser, er alt veldig klart. Om ønskelig er det helt komfortabelt å redigere dette formatet manuelt.

Hierarkiet av mapper i filsystemet gjentar fullt ut hierarkiet av noder i prosjektet. For eksempel, et scenario som:

TestMace — en kraftig IDE for API-arbeid

Mapper seg til følgende struktur i filsystemet (bare hierarkiet av mapper er vist, men poenget er klart)

TestMace — en kraftig IDE for API-arbeid

Dette letter prosessen med gjennomgang av prosjektet.

Import fra Postman

Etter å ha lest alt ovenfor, vil noen brukere gjerne prøve (er det ikke så?) det nye produktet, eller (hvem vet?) ta det i bruk i sitt prosjekt. Men migrasjonen kan bli hindret av et stort antall ressurser i Postman. I slike tilfeller støtter TestMace import av samlinger fra Postman. For øyeblikket støttes import uten tester, men vi utelukker ikke å støtte dem i fremtiden.

Planer

Eg håpar at mange av dei som har lese hit, likte produktet vårt. Men det er ikkje alt! Arbeidet med produktet går for fullt, og her er nokre funksjonar vi planlegg å legge til snart.

Sky-synkronisering

Ei av dei mest etterspurte funksjonane. For tida tilbyr vi versjonskontrollsystem som synkroniseringsalternativ, og vi gjer formatet meir vennlig for lagring av denne typen. Men ikkje alle passar til denne arbeidsgangen, derfor planlegg vi å legge til ein meir kjent synkroniseringsmekanisme via serverane våre.

I cli-runtime og kubectl

Som nemnt tidlegare, kjem ikkje IDE-nivå produkter utan ulike integrasjonar med eksisterande applikasjonar eller arbeidsganger. CLI er nødvendig for å integrere testarar skrivne i TestMace inn i prosessen med kontinuerleg integrasjon. Arbeidet med CLI er i full gang, og i tidlige versjonar vil prosjektet bli kjørt med ein enkel konsollrapport. Det er planlagt å legge til rapportutgifting i JUnit-format seinare.

Plugin-system

Til tross for krafta i verktøyet vårt, er settet av saker som krev løysing uendelig. Til slutt er det oppgåver som er spesifikke for bestemte prosjekt. Derfor planlegg vi å legge til eit SDK for utvikling av plugins, slik at kvar utviklar kan legge til funksjonalitet etter eigne ønskjer.

Utvidelse av utvalet av nodetypar

Dette settet av noder dekkjer ikkje alle sakene som brukaren treng. Nodene som er planlagt lagt til:

  • Script-node — konverterer og plasserer data ved å bruke js og tilsvarande API. Ved å bruke denne nodetypen kan ein lage ting som pre-request og post-request skript i Postman.
  • GraphQL-node — støtte for graphql
  • Custom assertion-node — vil gjere det mogleg å utvide settet av eksisterande assertionar i prosjektet
    Det er sjølvsagt ikkje den endelege lista, den vil bli kontinuerleg oppdatert, blant anna basert på tilbakemeldinga frå dykk.

FAQ

Kva skil dykk frå Postman?

  1. Konsepter for noder som gjer det mogleg å forsterke funksjonaliteten til prosjektet på nesten uendeleg vis
  2. Menneske-leseleg format for prosjektet med lagring i filsystemet, noko som forenklar bruken av versjonskontrollsystem
  3. Moglegheit for å lage testar utan programmering og meir avansert støtte for js i testereditøren (autofullføring, statisk analyse)
  4. Avansert automatisk utfylling og fremheving av gjeldende variabelverdier

Er dette et open-source produkt?

Nei, per nå er kildekoden lukket, men vi vurderer muligheten for å åpne den i fremtiden.

Hvordan tjener dere penger?)

Sammen med den gratis versjonen planlegger vi å lansere en betalt versjon av produktet. Denne vil primært inneholde funksjoner som krever server-side støtte, for eksempel synkronisering.

Konklusjon

Prosjektet vårt beveger seg raskt mot en stabil utgivelse. Men allerede nå kan produktet brukes, og positive tilbakemeldinger fra våre tidlige brukere bekrefter dette. Vi samler aktivt tilbakemeldinger, for uten nært samarbeid med samfunnet er det umulig å lage et godt verktøy. Du kan finne oss her:

Offisiell nettside

Telegram

Slack

Facebook

Issues-tracker

Vi ser frem til deres ønsker og forslag!

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster