TestMace - en kraftig IDE for arbeid med APIer

Hei alle sammen! I dag ønsker vi å presentere produktet vårt for IT-publikummet - en IDE for arbeid med APIer TestMace. Kanskje noen av dere allerede vet om oss fra tidligere artikler. Det har imidlertid ikke vært noen omfattende gjennomgang av verktøyet, så vi tar tak i denne uheldige mangelen.

TestMace - en kraftig IDE for arbeid med APIer

Motivasjon

Jeg vil gjerne starte med hvordan vi faktisk kom til dette livet og bestemte oss for å lage vårt eget verktøy for avansert arbeid med API. La oss starte med en liste over funksjonalitet som et produkt skal ha, som vi etter vår mening kan si at det er en "IDE for å jobbe med APIer":

  • Opprette og utføre spørringer og skript (sekvenser av spørringer)
  • Skrive ulike typer tester
  • Testgenerering
  • Arbeide med API-beskrivelser, inkludert import fra formater som Swagger, OpenAPI, WADL, etc.
  • Hånende forespørsler
  • God støtte for ett eller flere språk for å skrive manus, inkludert integrasjon med populære biblioteker
  • etc.

Listen kan utvides for å passe din smak. Dessuten er det viktig å lage ikke bare selve IDE, men også en viss infrastruktur, for eksempel skysynkronisering, kommandolinjeverktøy, online overvåkingstjeneste, etc. Til slutt dikterer trendene de siste årene oss ikke bare den kraftige funksjonaliteten til applikasjonen, men også dets hyggelige grensesnitt.

Hvem trenger et slikt verktøy? Det er klart at alle de som i det minste på en eller annen måte er knyttet til utvikling og testing av APIer er utviklere og testere =). Dessuten, hvis det for førstnevnte ofte er nok å utføre enkeltspørringer og enkle skript, er dette for testere et av hovedverktøyene, som blant annet bør inkludere en kraftig mekanisme for å skrive tester med muligheten til å kjøre dem i CI.

Så, etter disse retningslinjene, begynte vi å lage produktet vårt. La oss se hva vi har oppnådd på dette stadiet.

Rask start

La oss starte med et første bekjentskap med applikasjonen. Du kan laste den ned på nettstedet vårt. For øyeblikket støttes alle de tre store plattformene - Windows, Linux, MacOS. Last ned, installer, start. Når du starter den for første gang, kan du se følgende vindu:

TestMace - en kraftig IDE for arbeid med APIer

Klikk på plusstegnet øverst i innholdsområdet for å opprette din første forespørsel. Spørringsfanen ser slik ut:

TestMace - en kraftig IDE for arbeid med APIer

La oss se på det mer detaljert. Forespørselsgrensesnittet er veldig likt grensesnittet til populære hvileklienter, noe som gjør migrering fra lignende verktøy enklere. La oss sende den første forespørselen til nettadressen https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace - en kraftig IDE for arbeid med APIer

Generelt sett, ved første øyekast, gir heller ikke svarpanelet noen overraskelser. Jeg vil imidlertid gjøre deg oppmerksom på noen punkter:

  1. Brødteksten i svaret er representert i form av et tre, som for det første legger til informasjonsinnhold og for det andre lar deg legge til noen interessante funksjoner som nedenfor
  2. Det er en Assertions-fane, som viser en liste over tester for en gitt forespørsel

Som du kan se, kan verktøyet vårt brukes som en praktisk hvileklient. Vi ville imidlertid ikke vært her hvis mulighetene bare var begrenset til å sende forespørsler. Deretter vil jeg skissere de grunnleggende konseptene og funksjonaliteten til TestMace.

Grunnleggende konsepter og funksjoner

node

TestMace-funksjonalitet er delt inn i ulike typer noder. I eksemplet ovenfor demonstrerte vi driften av RequestStep-noden. Imidlertid er følgende typer noder nå også tilgjengelige i applikasjonen:

  • RequestStep. Dette er noden du kan opprette en forespørsel gjennom. Den kan bare ha én Assertion-node som et underordnet element.
  • Påstand. Noden brukes til å skrive tester. Kan bare være en underordnet node til RequestStep-noden.
  • Mappe. Lar deg gruppere mappe- og RequestStep-noder i seg selv.
  • Prosjekt. Dette er rotnoden, opprettet automatisk når prosjektet opprettes. Ellers gjentar den funksjonaliteten til mappenoden.
  • Link. Koble til mappen eller RequestStep-noden. Lar deg gjenbruke spørringer og skript.
  • etc.

Nodene er plassert i riper (panelet nederst til venstre, brukes for raskt å lage "engangs"-spørringer) og i prosjekter (panelet øverst til venstre), som vi vil dvele mer detaljert på.

Prosjekt

Når du starter programmet, vil du kanskje legge merke til en enslig prosjektlinje øverst til venstre. Dette er roten til prosjekttreet. Når du starter et prosjekt, opprettes et midlertidig prosjekt, banen til dette avhenger av operativsystemet ditt. Du kan når som helst flytte prosjektet til et sted som passer deg.

Hovedformålet med prosjektet er muligheten til å lagre utviklinger i filsystemet og videre synkronisere dem gjennom versjonskontrollsystemer, kjøre script i CI, gjennomgå endringer, etc.

Variabler

Variabler er en av nøkkelmekanismene i en applikasjon. De av dere som jobber med verktøy som TestMace har kanskje allerede en ide om hva vi snakker om. Så variabler er en måte å lagre vanlige data og kommunisere mellom noder. En analog er for eksempel miljøvariabler i Postman eller Insomnia. Vi gikk imidlertid videre og utviklet temaet. I TestMace kan variabler settes på nodenivå. Noen. Det er også en mekanisme for å arve variabler fra forfedre og overlappende variabler i etterkommere. I tillegg er det en rekke innebygde variabler, navnene på de innebygde variablene begynner med $. Her er noen av dem:

  • $prevStep — lenke til variabler fra forrige node
  • $nextStep — lenke til variabler for neste node
  • $parent - det samme, men bare for stamfaren
  • $response - svar fra serveren
  • $env - gjeldende miljøvariabler
  • $dynamicVar - dynamiske variabler opprettet under kjøring av skript eller spørringer

$env - Dette er i hovedsak vanlige prosjektnodenivåvariabler, men settet med miljøvariabler endres avhengig av det valgte miljøet.

Variabelen er tilgjengelig via ${variable_name}
Verdien av en variabel kan være en annen variabel, eller til og med et helt uttrykk. For eksempel kan url-variabelen være et uttrykk som
http://${host}:${port}/${endpoint}.

Separat er det verdt å merke seg muligheten for å tilordne variabler under skriptutførelse. For eksempel er det ofte behov for å lagre autorisasjonsdata (et token eller hele overskriften) som kom fra serveren etter en vellykket pålogging. TestMace lar deg lagre slike data i dynamiske variabler til en av forfedrene. For å unngå kollisjoner med allerede eksisterende "statiske" variabler, plasseres dynamiske variabler i et eget objekt $dynamicVar.

Scenarier

Ved å bruke alle funksjonene ovenfor kan du kjøre hele spørringsskript. For eksempel opprette en enhet -> spørre etter en enhet -> slette en enhet. I dette tilfellet kan du for eksempel bruke mappenoden til å gruppere flere RequestStep-noder.

Autofullføring og utheving av uttrykk

For praktisk arbeid med variabler (og ikke bare) er autofullføring nødvendig. Og selvfølgelig fremheve verdien av et uttrykk for å gjøre det enklere og mer praktisk å avklare hva en bestemt variabel er lik. Dette er akkurat tilfelle når det er bedre å se én gang enn å høre hundre ganger:

TestMace - en kraftig IDE for arbeid med APIer

Det er verdt å merke seg at autofullføring er implementert ikke bare for variabler, men også for eksempel for overskrifter, verdier for visse overskrifter (for eksempel autofullføring for innholdstype-overskriften), protokoller og mye mer. Listen oppdateres kontinuerlig etter hvert som applikasjonen vokser.

Angre gjør om

Å angre/gjøre endringer er en veldig praktisk ting, men av en eller annen grunn er det ikke implementert overalt (og verktøy for å jobbe med APIer er intet unntak). Men vi er ikke en av dem!) Vi har implementert angre/redo gjennom hele prosjektet, som lar deg angre ikke bare redigering av en spesifikk node, men også opprettelse, sletting, bevegelse osv. De mest kritiske operasjonene krever bekreftelse.

Opprette tester

Assertion-noden er ansvarlig for å lage tester. En av hovedfunksjonene er muligheten til å lage tester uten programmering, ved hjelp av innebygde editorer.

En påstandsnode består av et sett med påstander. Hver påstand har sin egen type; for øyeblikket er det flere typer påstander

  1. Sammenlign verdier - sammenligner ganske enkelt 2 verdier. Det er flere sammenligningsoperatorer: lik, ikke lik, større enn, større enn eller lik, mindre enn, mindre enn eller lik.

  2. Inneholder verdi - kontrollerer forekomsten av en delstreng i en streng.

  3. XPath - sjekker at velgeren i XML inneholder en viss verdi.

  4. JavaScript-påstand er et vilkårlig javascript-skript som returnerer sant ved suksess og usant ved fiasko.

Jeg legger merke til at bare den siste krever programmeringskunnskaper fra brukeren, de andre 3 påstandene lages ved hjelp av et grafisk grensesnitt. Her er for eksempel hvordan dialogen for å lage en sammenligningsverdipåstand ser ut:

TestMace - en kraftig IDE for arbeid med APIer

Prikken over i-en er den raske frembringelsen av påstander fra svar, bare se på det!

TestMace - en kraftig IDE for arbeid med APIer

Imidlertid har slike påstander åpenbare begrensninger, som du kanskje vil bruke en javascript-påstand for å overvinne. Og her gir TestMace også et behagelig miljø med autofullføring, syntaksutheving og til og med en statisk analysator.

API-beskrivelse

TestMace lar deg ikke bare bruke API, men også dokumentere det. Dessuten har selve beskrivelsen også en hierarkisk struktur og passer organisk inn i resten av prosjektet. I tillegg er det for øyeblikket mulig å importere API-beskrivelser fra Swagger 2.0 / OpenAPI 3.0-formater. Selve beskrivelsen ligger ikke bare dødvekt, men er tett integrert med resten av prosjektet, spesielt er autofullføring av URLer, HTTP-hoder, spørringsparametere osv. tilgjengelig, og i fremtiden planlegger vi å legge til tester for samsvar med svaret med API-beskrivelsen.

Delingsnode

Tilfelle: du vil dele en problematisk forespørsel eller til og med et helt skript med en kollega eller bare legge det ved en feil. TestMace dekker også dette tilfellet: applikasjonen lar deg serialisere hvilken som helst node og til og med et undertre i en URL. Copy-paste og du kan enkelt overføre forespørselen til en annen maskin eller et annet prosjekt.

Menneskelest prosjektlagringsformat

For øyeblikket er hver node lagret i en egen fil med yml-utvidelsen (som tilfellet er med Assertion-noden), eller i en mappe med navnet på noden og index.yml-filen i.
Slik ser for eksempel forespørselsfilen vi laget i gjennomgangen ovenfor ut:

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 kan se, er alt veldig klart. Om ønskelig kan dette formatet enkelt redigeres manuelt.

Hierarkiet av mapper i filsystemet gjentar fullstendig hierarkiet av noder i prosjektet. For eksempel et skript som:

TestMace - en kraftig IDE for arbeid med APIer

Tilordner filsystemet til følgende struktur (bare mappehierarkiet vises, men essensen er tydelig)

TestMace - en kraftig IDE for arbeid med APIer

Dette gjør prosjektgjennomgangsprosessen enklere.

Import fra Postman

Etter å ha lest alt ovenfor, vil noen brukere ønske å prøve (ikke sant?) et nytt produkt eller (hva i helvete tuller ikke!) fullstendig bruke det i prosjektet sitt. Migrasjon kan imidlertid stoppes av et stort antall utviklinger i samme Postman. For 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

Jeg håper at mange av de som har lest frem til nå har likt produktet vårt. Det er imidlertid ikke alt! Arbeidet med produktet er i full gang, og her er noen funksjoner som vi planlegger å legge til snart.

Skysynkronisering

En av de mest etterspurte funksjonene. For øyeblikket foreslår vi å bruke versjonskontrollsystemer for synkronisering, som vi gjør formatet mer vennlig for denne typen lagring. Denne arbeidsflyten passer imidlertid ikke for alle, så vi planlegger å legge til en synkroniseringsmekanisme som er kjent for mange gjennom våre servere.

CLI

Som nevnt ovenfor kan ikke produkter på IDE-nivå klare seg uten alle slags integrasjoner med eksisterende applikasjoner eller arbeidsflyter. CLI er akkurat det som trengs for å integrere tester skrevet i TestMace i den kontinuerlige integrasjonsprosessen. Arbeidet med CLI er i full gang; tidlige versjoner vil lansere prosjektet med en enkel konsollrapport. I fremtiden planlegger vi å legge til rapportutdata i JUnit-format.

Plugin system

Til tross for all kraften i verktøyet vårt, er settet med saker som krever løsninger ubegrenset. Det er tross alt oppgaver som er spesifikke for et bestemt prosjekt. Det er grunnen til at vi i fremtiden planlegger å legge til en SDK for utvikling av plugins og hver utvikler vil kunne legge til funksjonalitet etter eget ønske.

Utvide utvalget av nodetyper

Dette settet med noder dekker ikke alle tilfeller som kreves av brukeren. Noder som planlegges lagt til:

  • Skriptnode - konverterer og plasserer data ved hjelp av js og tilsvarende API. Ved å bruke denne typen noder kan du gjøre ting som forhåndsforespørsel og post-forespørsel skript i Postman.
  • GraphQL-node - graphql-støtte
  • Custom assertion node - lar deg utvide settet med eksisterende påstander i prosjektet
    Dette er naturligvis ikke en endelig liste, den vil bli oppdatert fortløpende på grunn av blant annet tilbakemeldinger fra deg.

FAQ

Hvordan er du forskjellig fra Postman?

  1. Konseptet med noder, som lar deg nesten uendelig skalere funksjonaliteten til prosjektet
  2. Menneskelest prosjektformat med lagring i et filsystem, noe som forenkler arbeidet med versjonskontrollsystemer
  3. Evne til å lage tester uten programmering og mer avansert js-støtte i testeditoren (autofullføring, statisk analysator)
  4. Avansert autofullføring og utheving av gjeldende verdi av variabler

Er dette et åpen kildekode-produkt?

Nei, for øyeblikket er kildene stengt, men i fremtiden vurderer vi muligheten for å åpne kildene

Hva lever du av?)

Sammen med gratisversjonen planlegger vi å gi ut en betalt versjon av produktet. Det vil først og fremst omfatte ting som krever en serverside, for eksempel synkronisering.

Konklusjon

Prosjektet vårt beveger seg med stormskritt mot en stabil utgivelse. Imidlertid kan produktet allerede brukes, og de positive tilbakemeldingene fra våre tidlige brukere er et bevis på dette. Vi samler aktivt inn tilbakemeldinger, for uten tett samarbeid med samfunnet er det umulig å bygge et godt verktøy. Du finner oss her:

Offisiell nettside

Telegram

Slack

Facebook

Problemsporing

Vi ser frem til dine ønsker og forslag!

Kilde: www.habr.com

Legg til en kommentar