Hallo zusammen! Heute möchten wir der IT-Community unser Produkt vorstellen â eine IDE fĂŒr die Arbeit mit APIs . Möglicherweise haben einige von Ihnen bereits von uns gehört durch . Es gab jedoch keine umfassende Ăbersicht ĂŒber das Tool, daher beheben wir diesen Ă€rgerlichen Mangel.

Motivation
Ich möchte damit beginnen, wie wir eigentlich zu diesem Punkt gekommen sind und beschlossen haben, unser eigenes Werkzeug fĂŒr die erweiterte Arbeit mit APIs zu entwickeln. Lassen Sie uns mit einer Liste der funktionalen Möglichkeiten beginnen, die das Produkt, von dem wir glauben, dass man sagen kann, es sei eine "IDE fĂŒr die Arbeit mit APIs", haben sollte:
- Erstellen und AusfĂŒhren von Anfragen und Skripten (Anfragesequenzen)
- Schreiben verschiedener Testarten
- Generierung von Tests
- Arbeiten mit API-Beschreibungen, einschlieĂlich Import aus Formaten wie Swagger, OpenAPI, WADL usw.
- Mocking von Anfragen
- Gute UnterstĂŒtzung fĂŒr eine oder mehrere Programmiersprachen zum Schreiben von Skripten, einschlieĂlich Integration mit beliebten Bibliotheken
- usw.
Die Liste kann nach Belieben erweitert werden. Es ist wichtig, nicht nur die IDE selbst zu schaffen, sondern auch eine bestimmte Infrastruktur, wie Cloud-Synchronisation, Kommandozeilenwerkzeuge, einen Online-Ăberwachungsdienst usw. SchlieĂlich diktieren uns die Trends der letzten Jahre, dass nicht nur die leistungsstarken Funktionen der Anwendung wichtig sind, sondern auch ihr angenehmes Interface.
FĂŒr wen ist ein solches Werkzeug nĂŒtzlich? Offensichtlich fĂŒr all diejenigen, die irgendwie mit der Entwicklung und dem Testen von APIs zu tun haben â Entwickler und Tester =). WĂ€hrend fĂŒr die Entwickler oft einfache Anfragen und einfache Szenarien ausreichen, ist es fĂŒr die Tester eines der wichtigsten Werkzeuge, das nebenbei auch einen leistungsstarken Mechanismus zum Schreiben von Tests mit der Möglichkeit ihrer AusfĂŒhrung in CI enthalten sollte.
Also, gemÀà diesen Vorgaben haben wir begonnen, unser Produkt zu entwickeln. Lassen Sie uns sehen, was wir in diesem Stadium erreicht haben.
Schnellstart
Beginnen wir mit dem ersten Kontakt mit der Anwendung. Sie können sie herunterladen . Derzeit werden alle drei Hauptplattformen â Windows, Linux, MacOS â unterstĂŒtzt. Herunterladen, installieren, starten. Beim ersten Start können Sie folgendes Fenster sehen:

Klicken Sie auf das Pluszeichen oben im Inhaltsbereich, um die erste Anfrage zu erstellen. Der Tab fĂŒr die Anfrage sieht wie folgt aus:

Lassen Sie uns nĂ€her darauf eingehen. Die Anfrage-OberflĂ€che Ă€hnelt stark der OberflĂ€che bekannter REST-Clients, was den Umstieg von Ă€hnlichen Tools erleichtert. Lassen Sie uns die erste Anfrage an die URL ausfĂŒhren.

Auf den ersten Blick bringt das Response-Panel auch keine unerwarteten Ăberraschungen. Ich möchte jedoch auf einige Punkte hinweisen:
- Der Antwortinhalt hat die Darstellung eines Baumes, was erstens informativ ist und zweitens einige interessante Funktionen ermöglicht, ĂŒber die ich spĂ€ter sprechen werde.
- Es gibt einen Tab 'Assertions', in dem die Liste der Tests fĂŒr diese Anfrage angezeigt wird.
Wie Sie sehen können, lÀsst sich unser Tool als praktischer REST-Client verwenden. Wir wÀren jedoch nicht hier, wenn seine Möglichkeiten nur auf das Senden von Anfragen beschrÀnkt wÀren. Im Folgenden beschreibe ich die grundlegenden Konzepte und FunktionalitÀten von TestMace.
Grundlegende Konzepte und Möglichkeiten
Knoten
Die FunktionalitĂ€t von TestMace ist nach verschiedenen Knotentypen unterteilt. Im obigen Beispiel haben wir die Funktion des RequestStep-Knotens demonstriert. Derzeit sind jedoch auch folgende Knotentypen in der Anwendung verfĂŒgbar:
- RequestStep. Dies ist ein Knoten, mit dem eine Anfrage erstellt werden kann. Als untergeordnetes Element kann er nur einen Assertion-Knoten haben.
- Assertion. Dieser Knoten wird verwendet, um Tests zu schreiben. Er kann nur ein untergeordneter Knoten fĂŒr den RequestStep-Knoten sein.
- Folder. Dieser Knoten ermöglicht das Gruppieren von Folder- und RequestStep-Knoten innerhalb seiner selbst.
- Project. Dies ist der Wurzelknoten, der automatisch bei der Erstellung eines Projekts erstellt wird. Ansonsten wiederholt er die FunktionalitÀten des Folder-Knotens.
- Link. Ein Verweis auf einen Folder- oder RequestStep-Knoten. Er ermöglicht die Wiederverwendbarkeit von Anfragen und Szenarien.
- usw.
Die Knoten befinden sich in Scratches (Panel links unten, dient der schnellen Erstellung von 'Einmal'-Anfragen) und im Project (Panel links oben), auf das wir nÀher eingehen werden.
Projekt
Beim Starten der Anwendung haben Sie möglicherweise die einzige Zeile 'Project' oben links bemerkt. Dies ist die Wurzel des Projektbaums. Bei der Erstellung eines Projekts wird ein temporĂ€res Projekt erstellt, wobei der Pfad von Ihrem Betriebssystem abhĂ€ngt. Zu jedem Zeitpunkt können Sie das Projekt an einen fĂŒr Sie praktischen Ort verschieben.
Der Hauptzweck des Projekts ist die Möglichkeit, die Entwicklungen im Dateisystem zu speichern und eine spĂ€tere Synchronisierung ĂŒber Versionskontrollsysteme, das AusfĂŒhren von Szenarien in CI, das ĂberprĂŒfen von Ănderungen usw. zu ermöglichen.
Variablen
Variablen sind einer der SchlĂŒsselmechanismen der Anwendung. Diejenigen unter Ihnen, die mit Werkzeugen wie TestMace arbeiten, haben möglicherweise bereits verstanden, worum es geht. Also, Variablen sind eine Möglichkeit, gemeinsame Daten zu speichern und die Kommunikation zwischen Knoten zu ermöglichen. Ein Beispiel dafĂŒr sind Umgebungsvariablen in Postman oder Insomnia. Doch wir sind weiter gegangen und haben das Thema weiterentwickelt. In TestMace können Variablen auf Knotenebene gesetzt werden. Jede. Es gibt auch einen Mechanismus zum Erben von Variablen von Vorfahren und zum Ăberschreiben von Variablen in Nachkommen. DarĂŒber hinaus gibt es eine Reihe von integrierten Variablen, deren Namen mit $. Hier sind einige von ihnen:
$prevStepâ verweist auf die Variablen des vorherigen Knotens$nextStepâ verweist auf die Variablen des nĂ€chsten Knotens$parentâ dasselbe, aber fĂŒr den Vorfahren$responseâ Antwort vom Server$envâ aktuelle Umgebungsvariablen$dynamicVarâ dynamische Variablen, die wĂ€hrend der AusfĂŒhrung des Skripts oder der Anfrage erstellt werden,
$env â dies sind im Grunde normale Variablen auf Projektebene, jedoch Ă€ndert sich die Menge der Umgebungsvariablen je nach gewĂ€hlter Umgebung.
Der Zugriff auf eine Variable erfolgt ĂŒber ${variable_name}
Als Wert einer Variablen kann eine andere Variable oder sogar ein ganzes Ausdruck verwendet werden. Zum Beispiel könnte fĂŒr die Variable url ein Ausdruck vom Typ
http://${host}:${port}/${endpoint}.
Besonders hervorzuheben ist die Möglichkeit, Variablen wĂ€hrend der AusfĂŒhrung eines Skripts zuzuweisen. Zum Beispiel besteht oft die Notwendigkeit, Anmeldedaten (Token oder den gesamten Header) zu speichern, die nach einem erfolgreichen Login vom Server kommen. TestMace ermöglicht es, solche Daten in dynamischen Variablen eines der Vorfahren zu speichern. Um Kollisionen mit bereits bestehenden "statischen" Variablen zu vermeiden, wurden dynamische Variablen in ein separates Objekt ausgegliedert. $dynamicVar.
Szenarien
Mit all den oben genannten Möglichkeiten können Sie ganze Anfrageszenarien durchfĂŒhren. Zum Beispiel, EntitĂ€t erstellen -> EntitĂ€t anfragen -> EntitĂ€t löschen. In diesem Fall können Sie zum Beispiel den Folder-Knoten verwenden, um mehrere RequestStep-Knoten zu gruppieren.
AutovervollstÀndigung und Hervorhebung des Ausdruckswerts
FĂŒr eine bequeme Arbeit mit Variablen (und nicht nur) ist Auto-VervollstĂ€ndigung notwendig. Und natĂŒrlich die Hervorhebung des Ausdruckswertes, um es einfacher und bequemer zu machen, zu klĂ€ren, was eine bestimmte Variable bedeutet. Dies ist genau der Fall, wo es besser ist, einmal zu sehen, als hundertmal zu hören:

Es ist zu beachten, dass die Auto-VervollstĂ€ndigung nicht nur fĂŒr Variablen implementiert ist, sondern auch zum Beispiel fĂŒr Ăberschriften, Werte bestimmter Ăberschriften (zum Beispiel die Auto-VervollstĂ€ndigung fĂŒr den Content-Type-Header), Protokolle und vieles mehr. Die Liste wird stĂ€ndig erweitert, wĂ€hrend die Anwendung wĂ€chst.
RĂŒckgĂ€ngig/Wiederherstellen
Das RĂŒckgĂ€ngig/Wiederherstellen von Ănderungen ist eine sehr praktische Sache, wird jedoch aus irgendeinem Grund nicht ĂŒberall implementiert (und Tools zur Arbeit mit APIs sind keine Ausnahme). Aber wir sind nicht so!) RĂŒckgĂ€ngig/Wiederherstellen ist bei uns im gesamten Projekt implementiert, was es ermöglicht, nicht nur die Bearbeitung eines bestimmten Knotens, sondern auch dessen Erstellung, Löschung, Verschiebung usw. rĂŒckgĂ€ngig zu machen. Die kritischsten Operationen erfordern eine BestĂ€tigung.
Test Erstellung
FĂŒr die Erstellung von Tests ist der Assertion-Knoten verantwortlich. Eine der Hauptmerkmale ist die Möglichkeit, Tests ohne Programmierung zu erstellen, unter Verwendung integrierter Editor.
Der Assertion-Knoten besteht aus einer Sammlung von Assertions. Jede Assertion hat ihren eigenen Typ, zurzeit gibt es mehrere Typen von Assertions.
Werte vergleichen â vergleicht einfach zwei Werte. Es gibt mehrere Vergleichsoperatoren: "gleich", "ungleich", "gröĂer", "gröĂer oder gleich", "kleiner", "kleiner oder gleich".
Wert enthalten â ĂŒberprĂŒft das Vorkommen eines Teilstrings in einem String.
XPath â ĂŒberprĂŒft, dass in XML ein bestimmter Wert fĂŒr den Selektor vorliegt.
JavaScript-Assertion â ein beliebiges Skript in JavaScript, das im Erfolgsfall true und im Misserfolgsfall false zurĂŒckgibt.
Ich möchte anmerken, dass nur die letzte vom Benutzer Programmierkenntnisse erfordert, die anderen 3 Assertions werden mit einer grafischen BenutzeroberflÀche erstellt. So sieht beispielsweise der Dialog zum Erstellen einer Compare Values-Assertion aus:

Das SahnehÀubchen ist die schnelle Erstellung von Assertions aus der Antwort, schauen Sie sich das einfach mal an!

Allerdings haben solche Assertions offensichtliche EinschrÀnkungen. Wenn Sie damit konfrontiert werden, können Sie JavaScript-Assertions verwenden. Auch hier bietet TestMace eine komfortable Umgebung mit Auto-VervollstÀndigung, Syntax-Hervorhebung und sogar einem statischen Analyzer.
API-Beschreibung
TestMace ermöglicht nicht nur die Nutzung der API, sondern auch deren Dokumentation. Die Beschreibung selbst hat dabei eine hierarchische Struktur und fĂŒgt sich organisch in das restliche Projekt ein. DarĂŒber hinaus besteht momentan die Möglichkeit, die API-Beschreibung aus den Formaten Swagger 2.0 / OpenAPI 3.0 zu importieren. Die Beschreibung selbst liegt nicht einfach als tote Last herum, sondern integriert sich eng mit dem restlichen Teil des Projekts; insbesondere wird die AutovervollstĂ€ndigung von URLs, HTTP-Headern, Query-Parametern und vielem mehr angeboten. In Zukunft planen wir auch, Tests zur Ăbereinstimmung der Antworten mit der API-Beschreibung hinzuzufĂŒgen.
Node-Sharing
Anwendungsfall: Sie möchten eine fehlerhafte Anfrage oder sogar ein gesamtes Szenario mit einem Kollegen teilen oder einfach an einen Bug anhĂ€ngen. TestMace deckt auch diesen Fall ab: Die Anwendung ermöglicht es, jede Node und sogar einen Teilbaum in eine URL zu serialisieren. Kopieren und EinfĂŒgen, und Sie haben die Anfrage mĂŒhelos auf ein anderes GerĂ€t oder Projekt ĂŒbertragen.
Menschenlesbares Format zur Speicherung des Projekts
Momentan wird jeder Knoten in einer separaten Datei mit der Endung .yml gespeichert (wie im Fall des Assertion-Knotens) oder in einem Ordner mit dem Namen des Knotens und einer index.yml-Datei darin.
So sieht beispielsweise die Datei mit der Anfrage aus, die wir im obigen Ăberblick gemacht haben:
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 1Wie Sie sehen, ist alles klar und deutlich. Wenn gewĂŒnscht, lĂ€sst sich dieses Format auch bequem manuell bearbeiten.
Die Hierarchie der Ordner im Dateisystem spiegelt vollstÀndig die Hierarchie der Knoten im Projekt wider. Zum Beispiel wird ein Szenario wie:

im Dateisystem in die folgende Struktur abgebildet (es wird nur die Hierarchie der Ordner gezeigt, aber das Prinzip ist klar)

was den PrĂŒfungsprozess des Projekts erleichtert.
Import aus Postman
Nachdem Sie alles oben Genannte gelesen haben, werden einige Benutzer wahrscheinlich (nicht wahr?) das neue Produkt ausprobieren oder (wer weiĂ!) in vollem Umfang in ihrem Projekt einsetzen wollen. Allerdings könnte eine groĂe Menge an bestehender Arbeit im selben Postman die Migration erschweren. FĂŒr solche FĂ€lle unterstĂŒtzt TestMace den Import von Sammlungen aus Postman. Momentan wird der Import ohne Tests unterstĂŒtzt, jedoch schlieĂen wir nicht aus, dass wir diese in Zukunft ebenfalls unterstĂŒtzen werden.
PlÀne
Ich hoffe, vielen von denen, die bis hierher gelesen haben, gefĂ€llt unser Produkt. Doch das ist noch nicht alles! Die Arbeit an dem Produkt lĂ€uft auf Hochtouren, und hier sind einige Funktionen, die wir in naher Zukunft hinzufĂŒgen möchten.
Cloud-Synchronisation
Eine der am hĂ€ufigsten nachgefragten Funktionen. Derzeit bieten wir an, zur Synchronisation Versionskontrollsysteme zu verwenden, weshalb wir das Format benutzerfreundlicher fĂŒr diese Art der Speicherung gestalten. Da jedoch nicht jeder mit diesem Workflow zurechtkommt, planen wir, einen vielen bekannten Synchronisationsmechanismus ĂŒber unsere Server hinzuzufĂŒgen.
CLI
Wie bereits oben erwĂ€hnt, kommen Produkte auf IDE-Ebene nicht ohne verschiedene Integrationen bestehender Anwendungen oder Workflows aus. CLI ist geradezu notwendig, um Tests, die in TestMace geschrieben wurden, in den Continuous-Integration-Prozess zu integrieren. Die Arbeit an der CLI lĂ€uft auf Hochtouren, in den frĂŒhen Versionen wird es einen Projektstart mit einem einfachen Konsolen-Report geben. ZukĂŒnftig planen wir, die Ausgabe des Berichts im JUnit-Format hinzuzufĂŒgen.
Plug-in-System
Trotz der gesamten LeistungsfĂ€higkeit unseres Werkzeugs ist die Menge an Anforderungen an Lösungen grenzenlos. SchlieĂlich gibt es Aufgaben, die spezifisch fĂŒr bestimmte Projekte sind. Deshalb planen wir, ein SDK zur Entwicklung von Plug-ins hinzuzufĂŒgen, sodass jeder Entwickler Funktionen nach seinem Geschmack hinzufĂŒgen kann.
Erweiterung der Auswahl an Knotentypen
Dieses Set an Knoten deckt nicht alle benötigten FĂ€lle des Benutzers ab. Knoten, die hinzugefĂŒgt werden sollen:
- Script-Knoten â transformiert und platziert Daten mithilfe von JavaScript und dem entsprechenden API. Mit diesem Knotentyp können Sie Dinge wie Pre-Request- und Post-Request-Skripte in Postman erstellen.
- GraphQL-Knoten â UnterstĂŒtzung fĂŒr GraphQL
- Custom-Assertion-Knoten â ermöglicht die Erweiterung des bestehenden Satzes von Assertions im Projekt.
NatĂŒrlich ist dies keine abschlieĂende Liste, sie wird stĂ€ndig mit Ihrem Feedback und anderen ErgĂ€nzungen erweitert.
FAQ
Was unterscheidet Sie von Postman?
- Das Konzept der Knoten, das es ermöglicht, die FunktionalitÀt des Projekts nahezu unbegrenzt zu skalieren.
- Menschlich lesbares Format des Projekts mit der Speicherung im Dateisystem, was die Arbeit mit Versionskontrollsystemen vereinfacht.
- Die Möglichkeit, Tests ohne Programmierung zu erstellen, und eine verbesserte UnterstĂŒtzung fĂŒr JavaScript im Testeditor (AutovervollstĂ€ndigung, statische Analyse).
- Erweiterte AutovervollstÀndigung und Hervorhebung des aktuellen Wertes von Variablen
Ist das Produkt Open Source?
Nein, im Moment sind die Quellcodes geschlossen, aber in Zukunft ziehen wir in Betracht, sie zu öffnen.
Wovon leben Sie?)
Neben der kostenlosen Version planen wir die Veröffentlichung einer kostenpflichtigen Version des Produkts. Diese wird in erster Linie Funktionen enthalten, die einen Serveranteil erfordern, wie z.B. die Synchronisierung.
Fazit
Unser Projekt schreitet mit riesigen Schritten auf einen stabilen Release zu. Das Produkt kann jedoch bereits jetzt verwendet werden, und die positiven RĂŒckmeldungen unserer frĂŒhen Nutzer bestĂ€tigen das. Wir sammeln aktiv Feedback, denn ohne enge Zusammenarbeit mit der Community ist es unmöglich, ein gutes Werkzeug zu schaffen. Sie finden uns hier:
Wir freuen uns auf Ihre WĂŒnsche und VorschlĂ€ge!
Quelle: habr.com
