TestMace — un potente IDE per lavorare con le API

Ciao a tutti! Oggi vogliamo presentare alla comunità IT il nostro prodotto: un IDE per lavorare con le API. TestMaceAlcuni di voi potrebbero già conoscerci da articoli precedenti. Tuttavia, non c'era stata una panoramica completa dello strumento, quindi stiamo correggendo questa mancanza.

TestMace — un potente IDE per lavorare con le API

Motivazione

Vorremmo iniziare con come siamo arrivati a creare il nostro strumento per un utilizzo avanzato delle API. Iniziamo con l'elenco delle funzionalità che il prodotto dovrebbe avere per poter essere definito un "IDE per lavorare con le API":

  • Creazione ed esecuzione di richieste e script (sequenze di richieste)
  • Scrittura di vari tipi di test
  • Generazione di test
  • Lavoro con la documentazione API, incluso l'importazione da formati come Swagger, OpenAPI, WADL, ecc.
  • Mocking delle richieste
  • Ottimo supporto per uno o più linguaggi di programmazione per la scrittura di script, inclusa l'integrazione con librerie popolari.
  • ecc.

La lista può essere ampliata a piacere. È importante creare non solo l'IDE stessa, ma anche un'infrastruttura specifica, come la sincronizzazione nel cloud, strumenti da linea di comando, servizi di monitoraggio online, ecc. Dopotutto, le tendenze degli ultimi anni ci impongono non solo funzionalità potenti, ma anche un'interfaccia gradevole.

A chi serve uno strumento del genere? È chiaro che è utile a tutti coloro che sono in qualche modo coinvolti nello sviluppo e nel testing delle API: sviluppatori e tester =). Mentre per i primi è spesso sufficiente inviare richieste singole e semplici scenari, per i tester rappresenta uno degli strumenti principali, che tra l'altro deve includere un potente meccanismo per la scrittura dei test con la possibilità di eseguirli in CI.

Dunque, seguendo queste linee guida, abbiamo iniziato a creare il nostro prodotto. Vediamo cosa siamo riusciti a realizzare fino a questo punto.

Avvio rapido

Iniziamo con il primo incontro con l'applicazione. Puoi scaricarla sul nostro sito.. Attualmente sono supportate tutte e tre le principali piattaforme: Windows, Linux, MacOS. Scarichiamo, installiamo, avviamo. Al primo avvio, puoi vedere la seguente finestra:

TestMace — un potente IDE per lavorare con le API

Clicca sul segno più nella parte superiore dell'area contenuto per creare la tua prima richiesta. Il tab della richiesta appare nella seguente maniera:

TestMace — un potente IDE per lavorare con le API

Fermiamoci su questo in modo più dettagliato. L'interfaccia della richiesta ricorda molto quella dei popolari client REST, facilitando la migrazione da strumenti simili. Eseguiamo la prima richiesta su url https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace — un potente IDE per lavorare con le API

A prima vista, anche il pannello di risposta non presenta sorprese particolari. Tuttavia, desidero attirare la vostra attenzione su alcuni aspetti:

  1. Il corpo della risposta è rappresentato come un albero, il che aggiunge informatività e consente di implementare alcune interessanti funzionalità di cui parlerò di seguito.
  2. C'è una scheda Assertions, che mostra l'elenco dei test per questa richiesta.

Come si può notare, il nostro strumento può essere utilizzato come un comodo client REST. Tuttavia, non ci saremmo qui se le sue capacità si limitassero solo all'invio di richieste. Di seguito, illustrerò i concetti chiave e le funzionalità di TestMace.

Concetti principali e funzionalità

Nodo

Le funzionalità di TestMace sono suddivise in diversi tipi di nodi. Nell'esempio sopra abbiamo dimostrato il funzionamento del nodo RequestStep. Tuttavia, attualmente l'applicazione offre anche i seguenti tipi di nodi:

  • RequestStep. Questo nodo consente di creare una richiesta. Come elemento figlio, può avere solo un nodo Assertion.
  • Assertion. Questo nodo viene utilizzato per scrivere test. Può essere un nodo figlio solo del nodo RequestStep.
  • Folder. Permette di raggruppare nodi Folder e RequestStep al suo interno.
  • Project. Questo è il nodo radice, creato automaticamente quando viene creato un progetto. In tutte le altre caratteristiche, replica le funzionalità del nodo Folder.
  • Link. Un collegamento a un nodo Folder o RequestStep. Permette di riutilizzare richieste e scenari.
  • ecc.

I nodi si trovano in scratches (pannello in basso a sinistra, utile per la creazione rapida di richieste «usa e getta») e in project (pannello in alto a sinistra), su cui ci soffermeremo più dettagliatamente.

Progetto

All'avvio dell'applicazione, potresti aver notato la solitaria riga Project nell'angolo in alto a sinistra. Questa è la radice dell'albero del progetto. Quando avvii un progetto, viene creato un progetto temporaneo, il cui percorso dipende dal tuo sistema operativo. In qualsiasi momento, puoi spostare il progetto in una posizione a te più comoda.

L'obiettivo principale del progetto è la possibilità di salvare i progressi nel file system e successivamente sincronizzarli tramite sistemi di controllo versioni, eseguire script in CI, revisionare le modifiche, ecc.

Variabili

Le variabili sono uno dei meccanismi chiave dell'applicazione. Coloro di voi che lavorano con strumenti come TestMace potrebbero aver già compreso di cosa si tratta. Quindi, le variabili sono un modo per memorizzare dati comuni e comunicare tra i nodi. Un equivalente, ad esempio, sono le variabili d'ambiente in Postman o Insomnia. Tuttavia, ci siamo spinti oltre e abbiamo sviluppato il tema. In TestMace, le variabili possono essere impostate a livello di nodo. Qualsiasi nodo. Esiste anche un meccanismo di eredità delle variabili dai genitori e di sovrascrittura delle variabili nei discendenti. Inoltre, ci sono diverse variabili integrate, i cui nomi iniziano con $. Ecco alcune di esse:

  • $prevStep — link to variables of the previous node
  • $nextStep — link to variables of the next node
  • $parent — the same, but for the ancestor
  • $response — response from the server
  • $env — current environment variables
  • $dynamicVar — dynamic variables created during script execution or request

$env — these are essentially regular node-level Project variables, however, the set of environment variables changes based on the selected environment.

Accessing a variable is done through ${variable_name}
The value of a variable can be another variable, or even a whole expression. For instance, a variable url could be an expression like
http://${host}:${port}/${endpoint}.

It is also worth noting the ability to assign variables during script execution. For example, there is often a need to save authentication data (token or entire header) that comes from the server after a successful login. TestMace allows saving such data in dynamic variables of one of the ancestors. To avoid collisions with already existing "static" variables, dynamic variables are placed in a separate object. $dynamicVar.

Scenari

Utilizzando tutte le funzionalità sopra elencate, puoi eseguire interi scenari di richieste. Ad esempio, creazione di un'entità -> richiesta di un'entità -> eliminazione di un'entità. In questo caso, puoi utilizzare il nodo Folder per raggruppare più nodi RequestStep.

Completamento automatico e evidenziazione del valore dell'espressione

Per un lavoro comodo con le variabili (e non solo), è necessario il completamento automatico. E, naturalmente, l'evidenziazione del valore dell'espressione, per semplificare e facilitare la comprensione del valore di una determinata variabile. Qui è proprio il caso in cui è meglio vedere una volta che sentirne parlare cento:

TestMace — un potente IDE per lavorare con le API

Vale la pena notare che il completamento automatico è implementato non solo per le variabili, ma anche, ad esempio, per gli header, i valori di determinati header (ad esempio, completamento automatico per l'header Content-Type), protocolli e molto altro. L'elenco viene continuamente aggiornato con la crescita dell'applicazione.

Annulla/ripeti

L'annullamento/ripetizione delle modifiche è una funzione molto utile, ma sorprendentemente non è implementata ovunque (e gli strumenti per lavorare con le API non fanno eccezione). Ma noi non siamo così!) L'undo/redo è implementato in tutto il progetto, il che consente di annullare non solo la modifica di un singolo nodo, ma anche la sua creazione, eliminazione, spostamento, ecc. Le operazioni più critiche richiedono conferma.

Creazione di test

La creazione dei test è responsabilità del nodo Assertion. Una delle principali caratteristiche è la possibilità di creare test senza programmazione, utilizzando editor integrati.

Il nodo Assertion è composto da un insieme di assertion. Ogni assertion ha il proprio tipo, attualmente esistono diversi tipi di assertion.

  1. Compare values - confronta semplicemente 2 valori. Ci sono diversi operatori di confronto: ‘uguale’, ‘diverso’, ‘maggiore’, ‘maggiore o uguale’, ‘minore’, ‘minore o uguale’.

  2. Contains value - verifica la presenza di una sottostringa all'interno di una stringa.

  3. XPath - verifica che un determinato valore si trovi secondo il selettore in XML.

  4. JavaScript assertion - uno script arbitrario in linguaggio JavaScript che restituisce true in caso di successo e false in caso di fallimento.

Noterò che solo l'ultimo richiede abilità di programmazione da parte dell'utente, mentre gli altri 3 assertion vengono creati tramite un'interfaccia grafica. Ecco, ad esempio, come appare la finestra di dialogo per la creazione di un'asserzione di confronto valori:

TestMace — un potente IDE per lavorare con le API

La ciliegina sulla torta è la creazione rapida delle asserzioni direttamente dalla risposta, basta dare un'occhiata a questo!

TestMace — un potente IDE per lavorare con le API

Tuttavia, tali asserzioni presentano ovvie limitazioni, e di fronte a queste è possibile utilizzare le asserzioni in JavaScript. Qui TestMace offre anche un ambiente confortevole con completamento automatico, evidenziazione della sintassi e anche un analizzatore statico.

Descrizione API

TestMace consente non solo di utilizzare l'API, ma anche di documentarla. Questa documentazione ha una struttura gerarchica e si integra perfettamente nel resto del progetto. Inoltre, attualmente è possibile importare la descrizione dell'API dai formati Swagger 2.0 / OpenAPI 3.0. La descrizione non rimane solo un peso morto, ma si integra strettamente con il resto del progetto, in particolare offre completamento automatico per URL, intestazioni HTTP, parametri di query e altro; in futuro prevediamo di aggiungere test per verificare la conformità della risposta alla descrizione dell'API.

Condivisione nodi

Caso: vuoi condividere una richiesta problematica o persino un intero scenario con un collega, oppure semplicemente allegarlo a un bug. TestMace copre anche questo caso: l'app consente di serializzare qualsiasi nodo e persino un sottoalbero in un URL. Copia e incolla e hai già trasferito facilmente la richiesta su un'altra macchina o progetto.

Formato leggibile per l'archiviazione del progetto

Attualmente, ogni nodo è salvato in un file separato con estensione yml (come nel caso del nodo Assertion), oppure in una cartella con il nome del nodo e un file index.yml al suo interno.
Ecco come appare, ad esempio, il file con la richiesta che abbiamo creato nella recensione sopra:

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

Come puoi vedere, tutto è estremamente chiaro. Se lo desideri, questo formato può essere facilmente modificato anche manualmente.

La gerarchia delle cartelle nel file system replica completamente la gerarchia dei nodi nel progetto. Per esempio, uno scenario di questo tipo:

TestMace — un potente IDE per lavorare con le API

Si mappa nel filesystem nella seguente struttura (è mostrata solo la gerarchia delle cartelle, ma il concetto è chiaro)

TestMace — un potente IDE per lavorare con le API

Questo facilita il processo di revisione del progetto.

Importa da Postman

Dopo aver letto quanto sopra, alcuni utenti vorranno provare (vero?) il nuovo prodotto o (chi lo sa!) usarlo a pieno nel proprio progetto. Tuttavia, la migrazione potrebbe essere ostacolata da un gran numero di risorse nello stesso Postman. Per tali casi, TestMace supporta l'importazione di collezioni da Postman. Attualmente, l'importazione è supportata senza test, ma in futuro non escludiamo di estendere questa funzionalità.

Piani

Spero che molti di voi che sono arrivati fin qui trovino interessante il nostro prodotto. Ma non finisce qui! Il lavoro sul prodotto sta procedendo a pieno ritmo ecco alcune funzionalità che prevediamo di aggiungere a breve.

Sincronizzazione cloud

Una delle funzionalità più richieste. Attualmente offriamo la possibilità di utilizzare sistemi di controllo versione per la sincronizzazione, rendendo il formato più adatto per questo tipo di archiviazione. Tuttavia, non tutti trovano adatta questa modalità di lavoro, quindi prevediamo di aggiungere un meccanismo di sincronizzazione attraverso i nostri server, familiare a molti.

CLI

Come già accennato, i prodotti di livello IDE non possono fare a meno di varie integrazioni con le applicazioni o i workflow esistenti. Il CLI è fondamentale per integrare i test scritti in TestMace nel processo di continuous integration. Stiamo lavorando attivamente sul CLI; nelle versioni iniziali sarà possibile avviare il progetto con un semplice report in console. In un secondo momento, prevediamo di aggiungere l'output del report nel formato JUnit.

Sistema a plugin

Nonostante tutta la potenza del nostro strumento, il numero di casi che richiedono una soluzione è illimitato. Ci sono, alla fine, compiti specifici per progetti particolari. Per questo motivo, prevediamo di aggiungere un SDK per lo sviluppo di plugin, permettendo a ciascun sviluppatore di aggiungere funzionalità a piacere.

Espansione dell'assortimento dei tipi di nodi

Questo set di nodi non copre tutti i casi necessari per l'utente. I nodi che si prevede di aggiungere:

  • Il nodo Script - trasforma e posiziona i dati utilizzando js e l'API corrispondente. Utilizzando questo tipo di nodo, è possibile fare cose simili agli script pre-request e post-request in Postman.
  • Nodo GraphQL - supporto per graphql
  • Nodo di asserzione personalizzato - consentirà di espandere il set di asserzioni esistenti nel progetto
    Naturalmente, questo non è un elenco definitivo, verrà costantemente aggiornato anche grazie al vostro feedback.

FAQ

Cosa vi distingue da Postman?

  1. La concezione di nodi che permette di scalare praticamente all'infinito la funzionalità del progetto
  2. Formato leggibile dall'uomo del progetto con salvataggio nel file system, che semplifica l'uso dei sistemi di controllo versione
  3. Possibilità di creare test senza programmazione e supporto js più avanzato nell'editor dei test (completamento automatico, analizzatore statico)
  4. Completamento automatico avanzato e evidenziazione del valore corrente delle variabili

È un prodotto open-source?

No, attualmente il codice sorgente è chiuso, ma in futuro consideriamo la possibilità di rilasciare il codice sorgente

Di cosa vivete?)

Oltre alla versione gratuita, prevediamo di lanciare una versione a pagamento del prodotto. Questa includerà in primis funzionalità che richiedono una infrastruttura server, come la sincronizzazione.

Conclusione

Il nostro progetto avanza a passi da gigante verso un rilascio stabile. Tuttavia, è già possibile utilizzare il prodotto, e le recensioni positive dei nostri primi utenti ne sono la conferma. Raccogliamo attivamente feedback, perché senza una stretta collaborazione con la community non è possibile costruire uno strumento efficace. Potete trovarci qui:

Sito ufficiale

Telegram

Slack

Facebook

Issue tracker

Non vediamo l'ora di ascoltare i vostri desideri e suggerimenti!

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster