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
