Hallo zusammen! Heute möchten wir der IT-Community unser Produkt vorstellen – eine IDE für die Arbeit mit APIs. Vielleicht wissen einige von Ihnen bereits von uns aus Allerdings gab es noch keinen umfassenden Überblick über das Tool, weshalb wir dieses ärgerliche Manko beheben möchten.

Motivation
Gerne beginnen wir damit, wie wir überhaupt dazu gekommen sind, unser eigenes Tool für die fortgeschrittene Arbeit mit APIs zu entwickeln. Lassen Sie uns mit einer Liste von Funktionen anfangen, die ein Produkt auszeichnen, das man als „IDE für die Arbeit mit APIs“ bezeichnen kann:
- Erstellung und Ausführung von Anfragen und Skripten (Anfragenfolgen)
- 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 gängigen Bibliotheken.
- usw.
Die Liste kann nach Belieben ergänzt werden. Es ist wichtig, nicht nur die IDE selbst zu erstellen, sondern auch eine bestimmte Infrastruktur, wie z.B. Cloud-Synchronisation, Kommandozeilen-Tools, einen Online-Überwachungsdienst usw. Schließlich diktieren uns die Trends der letzten Jahre nicht nur leistungsstarke Funktionen der Anwendungen, sondern auch eine benutzerfreundliche Oberfläche.
Für wen ist ein solches Tool gedacht? Offensichtlich für alle, die in irgendeiner Weise mit der Entwicklung und dem Testen von APIs zu tun haben – Entwickler und Tester =). Während es für Erstere oft ausreichend ist, einfache Anfragen und Szenarien auszuführen, ist es für Tester eines der wichtigsten Werkzeuge, das zusätzlich über einen leistungsstarken Mechanismus zur Erstellung von Tests verfügen sollte, der die Ausführung in CI ermöglicht.
Unter Berücksichtigung dieser Richtlinien haben wir begonnen, unser Produkt zu entwickeln. Lassen Sie uns sehen, was wir bisher erreicht haben.
Schnellstart
Lassen Sie uns mit dem ersten Eindruck der Anwendung beginnen. Sie können sie herunterladen . Sie unterstützt derzeit alle drei Hauptplattformen – Windows, Linux, MacOS. Herunterladen, installieren und starten. Beim ersten Start sehen Sie das folgende Fenster:

Klicken Sie auf das Pluszeichen oben im Inhaltsbereich, um die erste Anfrage zu erstellen. Der Tab für die Anfrage sieht folgendermaßen aus:

Lassen Sie uns darauf etwas detaillierter eingehen. Die Benutzeroberfläche der Anfrage ähnelt stark der Benutzeroberfläche beliebter REST-Clients, was den Umstieg von solchen Werkzeugen erleichtert. Lassen Sie uns die erste Anfrage an die URL durchführen:

Auf den ersten Blick scheint auch das Antwort-Panel keine Überraschungen zu bieten. Ich möchte jedoch auf einige Punkte hinweisen:
- Der Antwortkörper wird in einer Baumstruktur dargestellt, was erstens die Informationsvielfalt erhöht und zweitens einige interessante Funktionen ermöglicht, über die ich weiter unten sprechen werde.
- Es gibt einen Tab „Assertions“, in dem die Liste der Tests für diese Anfrage angezeigt wird.
Wie Sie sehen können, kann unser Werkzeug als praktischer REST-Client verwendet werden. Aber wir sind hier nicht, wenn seine Funktionen nur auf das Senden von Anfragen beschränkt wären. Im Folgenden werde ich die grundlegenden Konzepte und Funktionalitäten von TestMace darlegen.
Grundlegende Konzepte und Möglichkeiten
Knoten
Die Funktionalität von TestMace ist in verschiedene Knotentypen unterteilt. Im obigen Beispiel haben wir die Arbeitsweise des RequestStep-Knotens demonstriert. Derzeit sind jedoch auch die folgenden Knotentypen in der Anwendung verfügbar:
- RequestStep. Dies ist der Knoten, mit dem eine Anfrage erstellt werden kann. Als untergeordnetes Element kann er nur einen Assertion-Knoten haben.
- Assertion. Der Knoten wird zum Schreiben von Tests verwendet. Er kann nur ein untergeordneter Knoten des RequestStep-Knotens sein.
- Folder. Ermöglicht das Gruppieren von Folder- und RequestStep-Knoten innerhalb seiner Struktur.
- 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. Ermöglicht die Wiederverwendung von Anfragen und Szenarien.
- usw.
Die Knoten befinden sich in den Scratchpads (Panel links unten, das für die schnelle Erstellung von „Einmal“-Anfragen dient) und im Projekt (Panel links oben), dem wir etwas detaillierter Aufmerksamkeit schenken werden.
Projekt
Beim Start der Anwendung haben Sie möglicherweise die einsame Zeile „Projekt“ in der oberen linken Ecke bemerkt. Dies ist die Wurzel des Projektbaums. Bei der Erstellung eines Projekts wird ein temporäres Projekt angelegt, dessen Pfad von Ihrem Betriebssystem abhängt. Zu jedem Zeitpunkt können Sie das Projekt an einen für Sie passenden Ort verschieben.
Der Hauptzweck des Projekts besteht darin, Ihre Entwicklungen im Dateisystem zu speichern und später mit Versionskontrollsystemen zu synchronisieren, Skripte in CI durchzuführen, Änderungen zu überprüfen usw.
Variablen
Variablen sind eines der Schlüsselmechanismen der Anwendung. Diejenigen unter Ihnen, die mit Tools wie TestMace arbeiten, haben möglicherweise bereits eine Vorstellung davon, worum es geht. Variablen sind eine Möglichkeit, gemeinsame Daten zu speichern und die Kommunikation zwischen Knoten zu ermöglichen. Ein Beispiel hierfür sind Umgebungsvariablen in Postman oder Insomnia. Wir sind jedoch weiter gegangen und haben das Konzept weiterentwickelt. In TestMace können Variablen auf Knotenebene festgelegt werden – auf beliebige. Zudem gibt es einen Mechanismus zur Vererbung von Variablen von Vorfahren und zur Überschreibung von Variablen in Nachkommen. Darüber hinaus gibt es eine Reihe integrierter Variablen, deren Namen mit beginnen $. Hier sind einige davon:
$prevStep— Link zu den Variablen des vorherigen Knotens$nextStep— Link zu den Variablen des nächsten Knotens$parent— das Gleiche, jedoch für den Vorgänger$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 gewöhnliche Projektvariablen des Knotens, aber die Menge an Umgebungsvariablen variiert je nach gewählter Umgebung.
Zugriff auf die Variable erfolgt über ${variable_name}
Als Wert der Variablen kann eine andere Variable oder sogar ein ganzes Ausdruck verwendet werden. Zum Beispiel kann der Wert der Variable url einen Ausdruck wie
http://${host}:${port}/${endpoint} haben..
Besonders hervorzuheben ist die Möglichkeit, Variablen zur Laufzeit eines Skripts zuzuweisen. Oft besteht die Notwendigkeit, Authentifizierungsdaten (Token oder den gesamten Header) zu speichern, die vom Server nach einem erfolgreichen Login zurückgegeben werden. TestMace ermöglicht das Speichern solcher Daten in dynamischen Variablen eines der übergeordneten Objekte. Um Kollisionen mit bereits existierenden "statischen" Variablen zu vermeiden, wurden die dynamischen Variablen in ein separates Objekt ausgegliedert. $dynamicVar.
Szenarien
Mit den oben genannten Funktionen können Sie komplette Anfrage-Szenarien ausführen. Zum Beispiel: Entität erstellen → Entität anfragen → Entität löschen. In diesem Fall können Sie beispielsweise den Folder-Knoten zur Gruppierung mehrerer RequestStep-Knoten verwenden.
Automatische Vervollständigung und Hervorhebung des Ausdruckswerts
Für eine einfache Arbeit mit Variablen (und mehr) ist eine automatische Vervollständigung unerlässlich. Und natürlich die Hervorhebung des Ausdruckswerts, um es einfacher und angenehmer zu machen zu klären, was eine bestimmte Variable bedeutet. Hier ist es tatsächlich besser, einmal zu sehen, als hundert Mal zuzuhören:

Es ist wichtig zu beachten, dass die Autovervollständigung nicht nur für Variablen, sondern auch beispielsweise für Überschriften, Werte bestimmter Header (wie die Autovervollständigung für den Content-Type-Header), Protokolle und vieles mehr implementiert ist. Die Liste wird kontinuierlich erweitert, während die Anwendung wächst.
Rückgängig/Wiederholen
Das Rückgängig/Wiederholen von Änderungen ist eine sehr nützliche Funktion, die jedoch aus irgendeinem Grund nicht überall implementiert ist (und die Tools zur Arbeit mit APIs sind da keine Ausnahme). Aber wir gehören nicht dazu!) Das Rückgängig/Wiederholen ist in unserem 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. Kritische Operationen erfordern eine Bestätigung.
Test erstellen
Für die Erstellung von Tests ist der Assertion-Knoten verantwortlich. Eine der Hauptmerkmale ist die Möglichkeit, Tests ohne Programmierung unter Verwendung integrierter Editoren zu erstellen.
Der Assertion-Knoten besteht aus einer Reihe von Assertions. Jede Assertion hat ihren eigenen Typ, und derzeit 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“.
Enthält Wert – prüft, ob eine Teilzeichenfolge in einer Zeichenfolge vorhanden ist.
XPath – prüft, ob ein bestimmter Wert im XML durch den Selektor existiert.
JavaScript-Aussage – ein beliebiges Skript in JavaScript, das true im Erfolgsfall und false im Falle eines Misserfolgs zurückgibt.
Ich möchte anmerken, dass nur die letzte vom Benutzer Programmierkenntnisse erfordert; die anderen drei Assertionen werden über die grafische Benutzeroberfläche erstellt. So sieht beispielsweise der Dialog zum Erstellen einer Vergleichswert-Assertion aus:

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

Solche Assertions haben jedoch offensichtliche Einschränkungen, bei deren Auftreten Sie JavaScript-Assertions verwenden können. Auch hier bietet TestMace eine komfortable Umgebung mit Autovervollständigung, Syntaxhervorhebung und sogar einem statischen Analysator.
API-Beschreibung
TestMace ermöglicht nicht nur die Nutzung der API, sondern auch deren Dokumentation. Dabei hat die Beschreibung eine hierarchische Struktur und fügt sich harmonisch in das Gesamtprojekt ein. Aktuell besteht zudem die Möglichkeit, API-Beschreibungen aus den Formaten Swagger 2.0 / OpenAPI 3.0 zu importieren. Die Beschreibung liegt nicht nur als toter Ballast da, sondern integriert sich eng mit dem Rest des Projekts. So steht beispielsweise die Autovervollständigung für URLs, HTTP-Header, Query-Parameter und mehr zur Verfügung. In Zukunft planen wir, Tests zur Übereinstimmung der Antworten mit der API-Beschreibung hinzuzufügen.
Node-Sharing
Anwendungsfall: Sie möchten eine problematische Anfrage oder sogar ein ganzes 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 Teilbäume in eine URL zu serialisieren. Kopieren und einfügen, und schon haben Sie die Anfrage problemlos auf einen anderen Computer oder in ein anderes Projekt übertragen.
Benutzerfreundliches Format zur Speicherung des Projekts
Derzeit wird jeder Knoten in einer separaten Datei mit der Erweiterung yml gespeichert (wie im Fall der Assertion-Node) oder in einem Ordner mit dem Namen des Knotens und einer index.yml-Datei darin.
So sieht zum Beispiel die Datei mit der Anfrage aus, die wir im obigen Überblick erstellt 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 können, ist alles klar und deutlich. Bei Bedarf lässt sich dieses Format auch komfortabel manuell bearbeiten.
Die Ordnerhierarchie im Dateisystem spiegelt vollständig die Knotenhierarchie im Projekt wider. Zum Beispiel sieht ein Szenario folgendermaßen aus:

Es wird im Dateisystem auf die folgende Struktur abgebildet (hier wird nur die Ordnerhierarchie dargestellt, aber der Kern ist klar)

Was den Überprüfungsprozess des Projekts erleichtert.
Import aus Postman
Nach dem Lesen des Vorstehenden möchten einige Benutzer möglicherweise (darf ich sagen?) das neue Produkt ausprobieren oder (wer weiß?) es vollständig in ihrem Projekt nutzen. Allerdings könnte eine Vielzahl an bereits erstellten Arbeiten im gleichen Postman die Migration stoppen. Für solche Fälle unterstützt TestMace den Import von Sammlungen aus Postman. Derzeit ist der Import ohne Tests unterstützt, jedoch schließen wir zukünftige Unterstützung nicht aus.
Pläne
Wir hoffen, dass unser Produkt vielen von Ihnen, die bis zu diesem Punkt gelesen haben, gefallen hat. Doch das ist noch nicht alles! Die Entwicklung des Produkts läuft auf Hochtouren, und hier sind einige Funktionen, die wir bald hinzufügen möchten.
Cloud-Synchronisierung
Eine der meist nachgefragten Funktionen. Momentan bieten wir zur Synchronisierung Versionskontrollsysteme an, weshalb wir das Format benutzerfreundlicher für diese Art der Speicherung gestalten. Da jedoch nicht jeder mit diesem Workflow umgehen kann, planen wir die Einführung einer für viele gewohnten Synchronisationsmechanismus über unsere Server.
CLI
Wie bereits erwähnt, verzichten IDE-Produkte nicht auf verschiedene Integrationen mit bereits bestehenden Anwendungen oder Workflows. Ein CLI ist notwendig, um Tests, die in TestMace geschrieben wurden, in den Continuous-Integration-Prozess zu integrieren. Die Arbeit am CLI läuft auf Hochtouren, in den ersten Versionen wird das Projekt mit einfachen Konsolenberichten gestartet. Zukünftig planen wir, die Ausgabe des Berichts im JUnit-Format hinzuzufügen.
Plug-in-System
Trotz der Leistungsfähigkeit unseres Tools gibt es eine unendliche Anzahl von Anwendungsfällen, die gelöst werden müssen. Schließlich gibt es spezifische Aufgaben für jedes Projekt. Daher planen wir, in Zukunft ein SDK zur Entwicklung von Plugins hinzuzufügen, sodass jeder Entwickler die Funktionalität nach seinen Vorstellungen erweitern kann.
Erweiterung des Sortiments an Knotentypen
Dieses Set an Knoten deckt nicht alle erforderlichen Anwendungsfälle für den Benutzer ab. Die Knoten, die hinzugefügt werden sollen:
- Script-Knoten – wandelt Daten um und platziert sie unter Verwendung von JavaScript und dem entsprechenden API. Mit diesem Knotentyp können Sie beispielsweise 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 Sets an Assertions im Projekt
Natürlich ist dies nicht die endgültige Liste; sie wird ständig durch Ihr Feedback und andere Beiträge ergänzt.
FAQ
Wie unterscheiden Sie sich von Postman?
- Das Konzept von Knoten, das es ermöglicht, die Funktionalität des Projekts nahezu unbegrenzt zu skalieren.
- Ein menschenlesbares Format des Projekts, das in der Dateinstruktur gespeichert wird, was die Arbeit mit Versionskontrollsystemen erleichtert.
- Die Möglichkeit, Tests ohne Programmierung zu erstellen, sowie eine erweiterte Unterstützung für JavaScript im Testeditor (Auto-Vervollständigung, statische Analyse).
- Erweiterte Auto-Vervollständigung und Hervorhebung des aktuellen Wertes von Variablen.
Ist dies ein Open-Source-Produkt?
Nein, die Quellcodes sind derzeit nicht öffentlich, aber wir ziehen in Betracht, sie in Zukunft zu öffnen.
Wie finanzieren Sie sich?
Neben der kostenlosen Version planen wir, eine kostenpflichtige Version des Produkts herauszubringen. Diese wird in erster Linie Funktionen enthalten, die eine Serverkomponente benötigen, z. B. Synchronisation.
Fazit
Unser Projekt schreitet rasant auf eine stabile Veröffentlichung zu. Das Produkt kann jedoch bereits jetzt genutzt werden, und die positiven Rückmeldungen unserer ersten Nutzer bestätigen dies. Wir sammeln aktiv Feedback, denn ohne enge Zusammenarbeit mit der Community ist es nicht möglich, ein gutes Werkzeug zu schaffen. Sie finden uns hier:
Wir freuen uns auf Ihre Wünsche und Anregungen!
Quelle: habr.com
