TestMace — en kraftfuld IDE til arbejde med API

Hej alle sammen! I dag vil vi gerne præsentere vores produkt for IT-fællesskabet – en IDE til arbejde med API'er TestMace. Nogle af jer kender måske allerede til os fra tidligere artikler. Men der har ikke været en omfattende gennemgang af værktøjet, så vi udbedrer denne ærgerlige mangel.

TestMace — en kraftfuld IDE til arbejde med API

Motivation

Vi vil gerne starte med, hvordan vi i første omgang kom til at udvikle vores eget værktøj til avanceret arbejde med API'er. Lad os begynde med en liste over funktionaliteter, som et produkt, der kan kaldes "IDE til arbejde med API'er", bør have:

  • Oprettelse og udførelse af forespørgsler og scripts (sekvenser af forespørgsler)
  • Skrivning af forskellige slags test
  • Generering af tests
  • Arbejdet med API-dokumentation, herunder import fra formater som Swagger, OpenAPI, WADL osv.
  • Mocking af forespørgsler
  • God støtte til et eller flere programmeringssprog til scripting, herunder integration med populære biblioteker
  • osv.

Listen kan selvfølgelig udvides. Det er vigtigt at skabe ikke kun selve IDE'en, men også en vis infrastruktur såsom sky-synkronisering, kommandolinjeværktøjer, online-overvågning osv. I de seneste år har trends dikteret, at applikationen ikke kun skal have en kraftfuld funktionalitet, men også et behageligt interface.

Hvem har brug for et sådant værktøj? Det er åbenlyst alle, der har noget at gøre med udvikling og test af API'er – udviklere og testere =). For de første er det ofte tilstrækkeligt med enkeltforespørgsler og enkle scripts, mens det for testere er et vigtigt redskab, der ud over andet skal inkludere en kraftfuld testskrivemekanisme med mulighed for kørsel i CI.

Således, under hensyntagen til disse retningslinjer, begyndte vi at udvikle vores produkt. Lad os se, hvad vi har opnået indtil nu.

Hurtig start

Lad os starte med det første møde med applikationen. Den kan downloades på vores hjemmeside. I øjeblikket understøttes alle 3 større platforme – Windows, Linux, MacOS. Download, installer og start. Ved første opstart kan du se følgende vindue:

TestMace — en kraftfuld IDE til arbejde med API

Klik på plusset øverst i indholdsområdet for at oprette din første forespørgsel. Fanen med forespørgsler ser således ud:

TestMace — en kraftfuld IDE til arbejde med API

Lad os se nærmere på det. Anmodningsgrænsefladen minder meget om grænsefladen fra populære REST-klienter, hvilket letter migreringen fra sådanne værktøjer. Lad os udføre den første anmodning på url https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace — en kraftfuld IDE til arbejde med API

På overfladen ser det ud til, at response-panelet heller ikke byder på nogen overraskelser. Jeg vil dog gerne påpege nogle punkter:

  1. Svarens krop præsenteres som et træ, hvilket først og fremmest tilføjer information og for det andet gør det muligt at tilføje nogle interessante funktioner, som jeg vil omtale nedenfor
  2. Der er en fane for Assertion, hvor listen over tests for denne anmodning vises

Som man kan se, kan vores værktøj bruges som en bekvem REST-klient. Men vi ville ikke være her, hvis dets funktioner kun blev begrænset til at sende anmodninger. Jeg vil nu præsentere de grundlæggende begreber og funktionalitet i TestMace.

Grundlæggende begreber og funktioner

Node

Funktionaliteten i TestMace er opdelt i forskellige typer noder. På eksemplet ovenfor har vi demonstreret arbejdet med RequestStep-noden. Men der findes i øjeblikket også følgende typer noder i applikationen:

  • RequestStep. Dette er en node, som gør det muligt at oprette en anmodning. Som underordnet element kan den kun have én Assertion-node.
  • Assertion. Noden bruges til at skrive tests. Den kan kun være en underordnet node for RequestStep-noden.
  • Folder. Giver mulighed for at gruppere Folder- og RequestStep-noder inde i sig selv.
  • Project. Dette er rodenoden, der automatisk oprettes, når der oprettes et projekt. Ellers gentager den funktionaliteten af Folder-noden.
  • Link. Et link til en Folder- eller RequestStep-node. Muliggør genbrug af anmodninger og scenarier.
  • osv.

Noderne findes i scratches (panelet nederst til venstre, som bruges til hurtigt at oprette «engangs»-anmodninger) og i project (panelet øverst til venstre), som vi vil se nærmere på.

Projekt

Når du starter applikationen, har du måske bemærket den ensomme linje Project øverst til venstre. Dette er roden af projekttræet. Når et projekt startes, oprettes et midlertidigt projekt, hvis sti afhænger af dit operativsystem. Du kan til enhver tid flytte projektet til et mere bekvemt sted.

Projektets primære formål er at gemme udviklinger i filsystemet og senere synkronisere via versionskontrolsystemer, køre scripts i CI, gennemgå ændringer osv.

Variabler

Variabler er en af de centrale mekanismer i applikationen. Dem der arbejder med værktøjer som TestMace, har måske allerede forstået, hvad det handler om. Så, variabler er en måde at gemme fælles data og kommunikere mellem noder. Et eksempel på dette er miljøvariabler i Postman eller Insomnia. Men vi er gået videre og udviklet emnet. I TestMace kan variabler indstilles på nodeniveau. Enhver. Der eksisterer også en mekanisme til at arve variabler fra forældre og overskrive variabler i efterkommere. Derudover findes der en række indbyggede variabler, hvis navne begynder med $. Her er nogle af dem:

  • $prevStep — henvisning til variablerne fra den foregående node
  • $nextStep — henvisning til variablerne fra den næste node
  • $parent — det samme, men for forælderen
  • $response — svar fra serveren
  • $env — nuværende miljøvariabler
  • $dynamicVar — dynamiske variabler, der oprettes under kørsel af et scenarie eller en anmodning

$env — det er i princippet almindelige variable på Project-niveau, men sætningen af miljøvariabler ændres afhængigt af det valgte miljø.

Adgang til en variabel sker gennem ${variable_name}
Som værdi for en variabel kan der være en anden variabel, eller endda et helt udtryk. For eksempel kan værdien for variablen url være et udtryk som
http://${host}:${port}/${endpoint}.

Det er værd at bemærke, at der er mulighed for at tildele variabler under kørsel af skriptet. For eksempel opstår behovet ofte for at gemme autentificeringsoplysninger (token eller hele header), som kom fra serveren efter en vellykket login. TestMace gør det muligt at gemme sådanne data i dynamiske variabler fra en af forældrene. For at undgå kollisioner med allerede eksisterende 'statisk' variabler, er de dynamiske variabler flyttet til et separat objekt. $dynamicVar.

Scenarier

Ved at udnytte alle ovenstående muligheder kan du udføre hele scenarier af anmodninger. For eksempel, oprettelse af en enhed -> anmodning om enhed -> sletning af enhed. I dette tilfælde kan du for eksempel bruge en Folder-node til at gruppere flere RequestStep-noder.

Autocomplete og fremhævning af udtryksværdien

For convenient work with variables (and not only) autocomplete is necessary. And of course, highlighting expression values to make it easier to clarify what a particular variable equals. This is exactly one of those cases where it's better to see it once than to hear about it a hundred times:

TestMace — en kraftfuld IDE til arbejde med API

It's worth noting that autocomplete is not only implemented for variables, but also, for example, for headers, the values of certain headers (such as autocomplete for the Content-Type header), protocols, and much more. The list is constantly updated as the application grows.

Undo/redo

Undo/redo changes is a very convenient feature, yet it seems to be implemented far from everywhere (and tools for working with APIs are not an exception). But we are not like that!) Undo/redo is implemented throughout the entire project, allowing you to undo not just the editing of a specific node, but also its creation, deletion, movement, etc. The most critical operations require confirmation.

Creating tests

The creation of tests is handled by the Assertion node. 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 a substring within a string.

  3. XPath — checks that a specific value lies within the selector in XML.

  4. JavaScript assertion — an arbitrary script 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 the graphical interface. Here is how the compare values assertion creation dialog looks, for example:

TestMace — en kraftfuld IDE til arbejde med API

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

TestMace — en kraftfuld IDE til arbejde med API

However, such assertions have obvious limitations, when faced with which you can use JavaScript assertions. And here TestMace also provides a comfortable environment with autocomplete, syntax highlighting, and even a static analyzer.

API Description

TestMace giver ikke kun mulighed for at bruge API'et, men også dokumentere det. Beskrivelsen har en hierarkisk struktur og passer godt ind i resten af projektet. Derudover er der i øjeblikket mulighed for at importere API-beskrivelsen fra Swagger 2.0 / OpenAPI 3.0 formater. Beskrivelsen er ikke bare en dødfødt fil, men integreres tæt med resten af projektet, især ved at tilbyde autoudfyldning af URL'er, HTTP-header, query-parametre og meget mere. I fremtiden planlægger vi at tilføje tests for at sikre, at svarene stemmer overens med API-beskrivelsen.

Node deling

Case: Du vil gerne dele en problematisk forespørgsel eller endda et helt scenarie med en kollega, eller blot vedhæfte det til en fejlrapport. TestMace dækker også denne sag: applikationen gør det muligt at serialisere enhver node og endda et undertræ i en URL. Copy-paste, og du har nemt overført forespørgslen til en anden maskine eller projekt.

Menneskelæsbar format til projektlagring

I øjeblikket gemmes hver node i en separat fil med yml-udvidelsen (som i tilfælde med Assertion-noden), eller i en mappe med navnet på noden og en fil med navnet index.yml i den.
Her vises et eksempel på, hvordan filen med forespørgslen, som vi lavede i ovenstående gennemgang, ser ud:

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 fuldstændig klart. Hvis man ønsker det, kan dette format redigeres ganske komfortabelt og manuelt.

Mappestrukturen i filsystemet gentager fuldstændig hierarkiet af noder i projektet. For eksempel mappeniveauet:

TestMace — en kraftfuld IDE til arbejde med API

Mappes i filsystemet til følgende struktur (kun mappens hierarki vises, men essensen er klar)

TestMace — en kraftfuld IDE til arbejde med API

Dette letter processevalueringen af projektet.

Import fra Postman

Når nogle brugere har læst alt det ovenstående, vil de gerne prøve (er det ikke rigtigt?) det nye produkt eller (hvem ved!) bruge det fuldt ud i deres projekt. Men migrationen kan nås sættere af mange arbejdes ved samme Postman. For sådanne tilfælde understøtter TestMace import af kollektioner fra Postman. I øjeblikket understøttes import uden tests, men vi udelukker ikke, at de også kan blive understøttet i fremtiden.

Planer

Jeg håber, at mange af dem, der har læst til dette punkt, har fundet vores produkt interessant. Men det er endnu ikke alt! Arbejdet med produktet er i fuld gang, og her er nogle funktioner, som vi planlægger at tilføje snart.

Cloud-synkronisering

En af de mest efterspurgte funktioner. I øjeblikket tilbyder vi versionsstyringssystemer til synkronisering, og vi arbejder på at gøre formatet mere brugervenligt til denne type opbevaring. Men ikke alle passer til denne arbejdsgang, så vi planlægger at tilføje en velkendt synkroniseringsmekanisme gennem vores servere.

flagen -k til integration med

Som nævnt tidligere, kræver IDE-niveau produkter mange forskellige integrationer med allerede eksisterende applikationer eller arbejdsgange. CLI er netop nødvendigt for at integrere tests skrevet i TestMace i processen med kontinuerlig integration. Arbejdet med CLI er i fuld gang, i de tidlige versioner vil der blive kørt projekter med en simpel konsolrapport. I fremtiden planlægger vi at tilføje rapportudgang i JUnit-format.

Plugin-system

På trods af kraften i vores værktøj er der et ubegribeligt antal cases, der kræver løsninger. Der er trods alt opgaver, der er specifikke for bestemte projekter. Derfor planlægger vi i fremtiden at tilføje et SDK til udvikling af plugins, så enhver udvikler kan tilføje funktionalitet efter eget valg.

Udvidelse af sortimentet af nodetyper

Denne samling af noder dækker ikke alle de tilfælde, der er nødvendige for brugeren. Noder, der planlægges tilføjet:

  • Script-node - transformerer og placerer data ved hjælp af js og den relevante API. Ved at bruge denne type node kan man lave ting som pre-request og post-request scripts i Postman.
  • GraphQL-node - support for graphql
  • Custom assertion-node - vil udvide sættet af eksisterende assertions i projektet
    Naturligvis er dette ikke en endelig liste, den vil konstant blive opdateret, også takket være din feedback.

FAQ

Hvordan adskiller I jer fra Postman?

  1. Konceptet med noder, der praktisk talt uendeligt kan skalere projektets funktionalitet
  2. Menneske-læseligt format af projektet med opbevaring i filsystemet, hvilket gør det lettere at arbejde med versionsstyringssystemer
  3. Mulighed for at oprette tests uden programmering og mere avanceret support for js i testeditoren (autoudfyldning, statisk analyse)
  4. Avanceret autoudfyldning og markerings af aktuelle variabelværdier

Er det et open-source produkt?

Nej, kildeteksten er i øjeblikket lukket, men vi overvejer at åbne koden i fremtiden.

Hvordan lever I?)

Sammen med den gratis version planlægger vi at udgive en betalt version af produktet. Den vil først og fremmest indeholde funktioner, der kræver serverdel, for eksempel synkronisering.

Konklusion

Vores projekt skrider frem med hastige skridt mod en stabil version. Men allerede nu kan produktet bruges, og de positive tilbagemeldinger fra vores tidlige brugere bekræfter det. Vi indsamler aktivt feedback, da det er umuligt at opbygge et godt værktøj uden tæt samarbejde med fællesskabet. Du kan finde os her:

Officiel hjemmeside

Telegram

Slack

Facebook

Issues-tracker

Vi ser frem til jeres ønsker og forslag!

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster