TestMace — krachtige IDE voor het werken met API's

Hallo iedereen! Vandaag willen we ons product — een IDE voor het werken met API's — aan de IT-gemeenschap voorstellen. TestMace. Mogelijk zijn sommige van jullie al via vorige artikelenvan ons op de hoogte. Echter, er is nog geen uitgebreide review van het hulpmiddel geweest, dus we verhelpen dit vervelende gebrek.

TestMace — krachtige IDE voor het werken met API's

Motivatie

We willen beginnen met hoe we eigenlijk tot dit idee zijn gekomen en besloten hebben om onze tool voor geavanceerd werken met API's te ontwikkelen. Laten we beginnen met een lijst van functionaliteiten die het product moet hebben, waarvan wij denken dat dit het ideaaltype van een «IDE voor het werken met API» is:

  • Creëren en uitvoeren van verzoeken en scripts (reeks verzoeken)
  • Het schrijven van verschillende soorten tests
  • Genereren van tests
  • Werken met API-documentatie, inclusief import uit formaten zoals Swagger, OpenAPI, WADL, enz.
  • Mocken van verzoeken
  • Goede ondersteuning voor een of meerdere programmeertalen voor het schrijven van scripts, inclusief integratie met populaire bibliotheken.
  • enzovoorts.

De lijst kan verder worden aangevuld naar wens. Het is bovendien belangrijk om niet alleen de IDE zelf te creëren, maar ook een bepaalde infrastructuur, zoals cloud-synchronisatie, commandoregeltools, online monitoringsdiensten, enz. Uiteindelijk dicteren de trends van de afgelopen jaren ons niet alleen krachtige functionaliteit, maar ook een aantrekkelijke interface.

Voor wie is zo'n tool nodig? Het is duidelijk dat iedereen die op enige manier betrokken is bij de ontwikkeling en het testen van API's — ontwikkelaars en testers — hier gebruik van kan maken =). En terwijl voor de eerste groep vaak voldoende is om enkele verzoeken en eenvoudige scripts uit te voeren, is het voor testers een van de belangrijkste hulpmiddelen, dat bovendien een krachtige mechanismen voor het schrijven van tests moet bevatten, met mogelijkheden voor uitvoering in CI.

Dus, in navolging van deze richtlijnen, zijn we begonnen met het ontwikkelen van ons product. Laten we bekijken wat we tot nu toe hebben bereikt.

Snelle Start

Laten we beginnen met een eerste kennismaking met de applicatie. Je kunt het downloaden op onze website. Momenteel worden de drie belangrijkste platforms ondersteund — Windows, Linux, MacOS. Downloaden, installeren, opstarten. Bij de eerste opstart zie je het volgende venster:

TestMace — krachtige IDE voor het werken met API's

Klik op het plusje bovenin het contentgebied om je eerste verzoek te maken. Het tabblad met het verzoek ziet er als volgt uit:

TestMace — krachtige IDE voor het werken met API's

Laten we hier diepgaander op ingaan. De interface voor de aanvraag lijkt erg op de interface van populaire REST-clients, wat de migratie van soortgelijke tools vergemakkelijkt. Laten we de eerste aanvraag op de URL uitvoeren. https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace — krachtige IDE voor het werken met API's

Over het algemeen lijkt het erop dat het response-paneel ook geen onverwachte verrassingen oplevert. Maar ik wil uw aandacht vestigen op enkele punten:

  1. De body van het antwoord heeft een boomstructuur, wat enerzijds de informativiteit verhoogt en anderzijds enkele interessante functies mogelijk maakt die hieronder worden besproken.
  2. Er is een tabblad Assertions, waarop een lijst met tests voor deze aanvraag wordt weergegeven.

Zoals te zien is, kan onze tool worden gebruikt als een handige REST-client. Maar we zouden hier niet zijn als de mogelijkheden zich alleen tot het verzenden van aanvragen beperkten. Hieronder zal ik de belangrijkste concepten en functionaliteiten van TestMace uiteenzetten.

Belangrijkste concepten en mogelijkheden

Knoop

De functionaliteit van TestMace is verdeeld over verschillende typen knopen. In het bovenstaande voorbeeld hebben we de werking van de RequestStep-knoop gedemonstreerd. Maar op dit moment zijn er ook de volgende typen knopen beschikbaar in de applicatie:

  • RequestStep. Dit is de knoop waarmee je een aanvraag kunt aanmaken. Als kindelement kan het slechts één Assertion-knoop hebben.
  • Assertion. Deze knoop wordt gebruikt voor het schrijven van tests. Deze kan alleen een kindeind van de RequestStep-knoop zijn.
  • Folder. Hiermee kunnen Folder- en RequestStep-knopen binnenin worden gegroepeerd.
  • Project. Dit is de wortelknoop, die automatisch wordt aangemaakt bij het maken van een project. Verder herhaalt het de functionaliteit van de Folder-knoop.
  • Link. Een link naar een Folder- of RequestStep-knoop. Hiermee kunnen aanvragen en scenario's opnieuw worden gebruikt.
  • enzovoorts.

De knopen zijn geplaatst in scratches (de linker benedenpaneel, die dient voor het snel maken van 'wegwerp'-aanvragen) en in project (de linker bovenpaneel), waar we nader op ingaan.

Project

Bij het starten van de applicatie heeft u misschien de enkele regel Project in de linkerbovenhoek opgemerkt. Dit is de wortel van de projectboom. Bij het starten van een project wordt een tijdelijk project aangemaakt, waarvan het pad afhankelijk is van uw besturingssysteem. U kunt het project altijd naar een plek verhuizen die u handig vindt.

Het primaire doel van het project is de mogelijkheid om resultaten op te slaan in het bestandssysteem en verdere synchronisatie via versiebeheersystemen, het uitvoeren van scripts in CI, het beoordelen van wijzigingen, enz.

Variabelen

Variabelen zijn een van de belangrijkste mechanismen van de applicatie. Degenen onder jullie die werken met tools zoals TestMace, begrijpen misschien al waar het over gaat. Dus, variabelen zijn een manier om algemene gegevens op te slaan en communicatie tussen nodes mogelijk te maken. Een analoog voorbeeld zijn de omgevingsvariabelen in Postman of Insomnia. Maar we zijn verder gegaan en hebben het onderwerp verder ontwikkeld. In TestMace kunnen variabelen op node-niveau worden ingesteld. Elke. Er is ook een mechanisme voor het overerven van variabelen van ouders en het overschrijven van variabelen in afstammelingen. Daarnaast zijn er verschillende ingebouwde variabelen, de namen van ingebouwde variabelen beginnen met $. Hier zijn enkele daarvan:

  • $prevStep — verwijzing naar de variabelen van de vorige node
  • $nextStep — verwijzing naar de variabelen van de volgende node
  • $parent — hetzelfde, maar dan voor de ouder
  • $response — antwoord van de server
  • $env — huidige omgevingsvariabelen
  • $dynamicVar — dynamische variabelen, die tijdens de uitvoering van een script of verzoek worden gemaakt

$env — dit zijn in wezen gewone variabelen op projectniveau, echter, de set omgevingsvariabelen verandert afhankelijk van de geselecteerde omgeving.

Toegang tot een variabele geschiedt via ${variable_name}
Als waarde van de variabele kan een andere variabele zijn, of zelfs een hele expressie. Bijvoorbeeld, als URL kan de expressie zijn van het type
http://${host}:${port}/${endpoint}.

Er moet apart worden opgemerkt dat het mogelijk is om variabelen toe te wijzen tijdens de uitvoering van het script. Vaak is er de noodzaak om autorisatiegegevens (token of de hele header) op te slaan die van de server zijn ontvangen na een succesvolle login. TestMace stelt je in staat dergelijke gegevens op te slaan in dynamische variabelen van een van de ouders. Om conflicten met al bestaande "statische" variabelen te vermijden, zijn dynamische variabelen ondergebracht in een apart object $dynamicVar.

Scripts

Met behulp van al deze mogelijkheden kun je volledige scripts van verzoeken uitvoeren. Bijvoorbeeld, entiteit maken -> entiteit aanvragen -> entiteit verwijderen. In dit geval kun je bijvoorbeeld de Folder-node gebruiken om verschillende RequestStep-nodes te groeperen.

Automatische aanvulling en syntaxisaccentuering van de waarde van de expressie

Voor een gemakkelijke werking met variabelen (en meer) is autocompletion noodzakelijk. En natuurlijk de highlight van de waarde van de expressie, zodat het eenvoudiger en handiger is om te verduidelijken wat de waarde van een bepaalde variabele is. Dit is precies zo'n geval waarin het beter is om het één keer te zien dan honderd keer te horen:

TestMace — krachtige IDE voor het werken met API's

Het is vermeldenswaard dat autocompletion niet alleen voor variabelen is geïmplementeerd, maar ook bijvoorbeeld voor koppen, waarden van bepaalde koppen (zoals autocompletion voor de Content-Type kop), protocollen en nog veel meer. De lijst wordt voortdurend aangevuld naarmate de applicatie groeit.

Ongedaan maken/herstellen

Het ongedaan maken/herstellen van veranderingen is een zeer handige functie, maar om de een of andere reden wordt het niet overal geïmplementeerd (en instrumenten voor het werken met de API zijn geen uitzondering). Maar wij zijn niet zo!) Ongedaan maken/herstellen is bij ons gerealiseerd in het hele project, wat het mogelijk maakt om niet alleen de bewerking van een bepaalde node ongedaan te maken, maar ook de creatie, verwijdering, verplaatsing, enz. De meest kritieke handelingen vereisen bevestiging.

Testen aanmaken

De Assertion node is verantwoordelijk voor het aanmaken van testen. Een van de belangrijkste kenmerken is de mogelijkheid om testen zonder programmeren te creëren, met gebruik van ingebouwde editors.

De Assertion node bestaat uit een set van assertions. Elke assertion heeft een eigen type, momenteel zijn er verschillende types assertions beschikbaar.

  1. Waarden vergelijken - vergelijkt gewoon 2 waarden. Er zijn verschillende vergelijkingsoperators: "gelijk", "niet gelijk", "groter", "groter dan of gelijk", "kleiner", "kleiner dan of gelijk".

  2. Bevat waarde - controleert of een substring in een string voorkomt.

  3. XPath - controleert of er een bepaalde waarde ligt volgens de selector in XML.

  4. JavaScript assertion - een willekeurig script geschreven in JavaScript dat true retourneert bij succes en false bij falen.

Ik merk op dat alleen de laatste van de gebruiker vaardigheden in programmeren vereist, de overige 3 assertions worden met de grafische interface aangemaakt. Hier is bijvoorbeeld hoe het dialoogvenster voor het creëren van de compare values assertion eruit ziet:

TestMace — krachtige IDE voor het werken met API's

De kers op de taart is de snelle creatie van assertions uit de response, kijk er gewoon naar!

TestMace — krachtige IDE voor het werken met API's

Echter, dergelijke assertions hebben voor de hand liggende beperkingen, waarvoor je JavaScript assertions kunt gebruiken. En ook hier biedt TestMace een comfortabele omgeving met autocompletion, syntax highlighting en zelfs een statische analyzer.

API Beschrijving

TestMace stelt je niet alleen in staat om API te gebruiken, maar ook om het te documenteren. De beschrijving heeft een hiërarchische structuur en past mooi in het grotere geheel van het project. Tegenwoordig is het ook mogelijk om API-beschrijvingen te importeren uit Swagger 2.0 / OpenAPI 3.0-formaten. De beschrijving is niet zomaar een dode last; deze integreert stevig met de rest van het project. Zo is bijvoorbeeld de autocompletion van URL's, HTTP-headers, queryparameters en meer beschikbaar. In de toekomst zijn we van plan om tests toe te voegen die de antwoorden aan de API-beschrijving toetsen.

Node delen

Scenario: je wilt een probleem verzoek delen of zelfs een compleet scenario met een collega, of gewoon aan een bug koppelen. TestMace dekt ook deze situatie: de applicatie maakt het mogelijk om elke node en zelfs een subboom te serialiseren naar een URL. Kopieer en plak, en je hebt het verzoek gemakkelijk naar een andere machine of project overgezet.

Leesbaar opslagformaat van het project

Momenteel wordt elke knoop opgeslagen in een apart bestand met de extensie yml (zoals in het geval van de Assertion-node), of in een map met de naam van de node en daarin een bestand index.yml.
Zo ziet bijvoorbeeld het bestand met het verzoek eruit dat we eerder in de review hebben gemaakt:

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

Zoals je ziet, is alles kristalhelder. Dit formaat kan heel comfortabel handmatig worden bewerkt indien gewenst.

De hiërarchie van mappen in het bestandssysteem weerspiegelt volledig de hiërarchie van de knooppunten in het project. Bijvoorbeeld, een scenario van het type:

TestMace — krachtige IDE voor het werken met API's

Mapt naar de volgende structuur in het bestandssysteem (alleen de hiërarchie van de mappen is getoond, maar de essentie is duidelijk)

TestMace — krachtige IDE voor het werken met API's

Dit vergemakkelijkt het proces van reviewen van het project.

Importeren van Postman

Na het lezen van het bovenstaande willen sommige gebruikers misschien (toch?) het nieuwe product uitproberen of (wie weet!) het volledig toepassen in hun project. Echter, de migratie kan worden vertraagd door een grote hoeveelheid werk in hetzelfde Postman. Voor dergelijke gevallen ondersteunt TestMace de import van collecties uit Postman. Momenteel is alleen import zonder tests ondersteund, maar in de toekomst sluiten we ondersteuning voor tests niet uit.

Plannen

Ik hoop dat velen van jullie die dit punt hebben bereikt, ons product leuk vinden. Maar dat is nog niet alles! We zijn druk bezig met de ontwikkeling van het product en hier zijn enkele functies die we binnenkort willen toevoegen.

Cloud-synchronisatie

Een van de meest gevraagde functies. Momenteel bieden we versiebeheersystemen aan voor synchronisatie, waarvoor we het formaat gebruiksvriendelijker maken voor dit type opslag. Echter, niet iedereen vindt deze workflow handig, daarom is het gepland om een vertrouwde synchronisatiemechanisme via onze servers toe te voegen.

CLI

Zoals eerder genoemd, kunnen IDE-niveau producten niet zonder allerlei integraties met bestaande applicaties of workflows. CLI is precies nodig voor de integratie van tests die in TestMace zijn geschreven, in het continue integratieproces. We zijn druk bezig met de ontwikkeling van CLI, in de vroege versies zal het project worden gestart met een eenvoudige console-rapportage. In de toekomst is het gepland om het rapport in JUnit-formaat te toevoegen.

Plugin-systeem

Ondanks de kracht van onze tool is de set van cases die opgelost moeten worden eindeloos. Uiteindelijk zijn er taken die specifiek zijn voor een bepaald project. Daarom zijn we van plan om een SDK voor het ontwikkelen van plugins toe te voegen, zodat elke ontwikkelaar functionaliteit naar wens kan toevoegen.

Uitbreiding van het assortiment van knooppunttypes

Deze set knooppunten dekt niet alle cases die de gebruiker nodig heeft. Knooppunten die we willen toevoegen:

  • Script-knooppunt — transformeert en plaatst gegevens met behulp van js en de bijbehorende API. Met dit type knooppunt kunnen dingen worden gedaan zoals pre-request en post-request scripts in Postman.
  • GraphQL-knooppunt — ondersteuning voor GraphQL
  • Custom assertion-knooppunt — stelt je in staat om de set bestaande assertions in het project uit te breiden
    Natuurlijk is dit geen definitieve lijst, deze zal voortdurend worden aangevuld, onder andere met jullie feedback.

FAQ

Wat maakt je anders dan Postman?

  1. De conceptie van knooppunten, die de functionaliteit van het project bijna oneindig schaalt
  2. Mensvriendelijk formaat van het project dat wordt opgeslagen in het bestandssysteem, wat de samenwerking met versiebeheersystemen vergemakkelijkt
  3. De mogelijkheid om tests te maken zonder programmeren en geavanceerdere ondersteuning voor js in de testeditor (auto-aanvulling, statische analyser)
  4. Geavanceerde autocompletie en markering van de huidige waarden van variabelen

Is dit een open-source product?

Nee, op dit moment zijn de bronbestanden gesloten, maar in de toekomst overwegen we de mogelijkheid om de bronnen open te stellen.

Waarvan leven jullie?

Naast de gratis versie zijn we van plan om een betaalde versie van het product uit te brengen. Deze zal in eerste instantie functies bevatten die serverondersteuning vereisen, zoals synchronisatie.

Conclusie

Ons project maakt grote stappen richting een stabiele release. Maar het product is nu al bruikbaar en de positieve feedback van onze vroege gebruikers bevestigt dat. We verzamelen actief feedback, want zonder nauwe samenwerking met de community is het onmogelijk om een goed hulpmiddel te bouwen. Je kunt ons hier vinden:

Officiële website

Telegram

Slack

Facebook

Issues-tracker

We kijken er naar uit om jullie wensen en suggesties te horen!

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster