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 TestMace. Forse alcuni di voi ci conoscono già da articoli precedenti. Tuttavia, non c'è stata una panoramica esaustiva dello strumento, quindi stiamo eliminando questa fastidiosa mancanza.

TestMace — un potente IDE per lavorare con le API

Motivazione

Vorremmo iniziare con come, in effetti, siamo arrivati a questa decisione e abbiamo deciso di creare il nostro strumento per un lavoro avanzato con le API. Cominciamo con un elenco delle funzionalità che deve avere il prodotto che, a nostro avviso, può essere definito "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 delle API, inclusa l'importazione da formati come Swagger, OpenAPI, WADL, ecc.
  • Mocking delle richieste
  • Buona supporto per uno o più linguaggi di programmazione per la scrittura di script, inclusa l'integrazione con librerie popolari
  • ecc.

L'elenco può essere ampliato a piacere. È importante creare non solo l'IDE stesso, ma anche un'infrastruttura adeguata, come la sincronizzazione cloud, strumenti da riga di comando, servizio di monitoraggio online, ecc. Alla fine, le tendenze degli ultimi anni ci indicano non solo un potente funzionalità dell'applicazione, ma anche una sua interfaccia gradevole.

A chi serve uno strumento simile? È ovvio, a tutti quelli che sono in qualche modo coinvolti nello sviluppo e nel testing delle API: sviluppatori e tester =). Tuttavia, se per i primi spesso basta l'esecuzione di singole richieste e semplici scenari, per i tester questo è uno degli strumenti principali, che oltre a tutto il resto deve includere un potente meccanismo di scrittura di test con possibilità di esecuzione nel CI.

Quindi, seguendo queste linee guida, abbiamo iniziato a creare il nostro prodotto. Diamo un'occhiata a cosa abbiamo ottenuto fino a questo punto.

Avvio veloce

Iniziamo con un primo incontro con l'applicazione. Puoi scaricarla sul nostro sito. Attualmente supporta tutte e tre le principali piattaforme: Windows, Linux, MacOS. Scarica, installa e avvia. Alla prima apertura puoi vedere la seguente finestra:

TestMace — un potente IDE per lavorare con le API

Clicca sul segno più in cima all'area dei contenuti per creare la tua prima richiesta. La scheda della richiesta appare come segue:

TestMace — un potente IDE per lavorare con le API

Fermiamoci su questo punto in modo più dettagliato. L'interfaccia della richiesta ricorda molto l'interfaccia dei popolari client REST, il che facilita la migrazione da strumenti simili. Eseguiamo la prima richiesta all'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 sembra presentare sorprese particolari. Tuttavia, vi prego di prestare attenzione ad alcuni aspetti:

  1. Il corpo della risposta è strutturato ad albero, il che, da un lato, aumenta l'informatività e, dall'altro, consente di aggiungere alcune funzionalità interessanti che descriverò di seguito
  2. C'è una scheda Assertions, che mostra un elenco di test per questa richiesta

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

Concetti base 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, ora nell'applicazione sono disponibili anche i seguenti tipi di nodi:

  • RequestStep. Questo nodo consente di creare una richiesta. Può avere solo un nodo Assertion come elemento figlio.
  • Assertion. Questo nodo viene utilizzato per scrivere test. Può essere un nodo figlio solo per un nodo RequestStep.
  • Folder. Consente di raggruppare nodi Folder e RequestStep al suo interno.
  • Project. È il nodo radice, creato automaticamente al momento della creazione del progetto. Per il resto, ripete le funzionalità del nodo Folder.
  • Link. Un collegamento a un nodo Folder o RequestStep. Permette di riutilizzare richieste e scenari.
  • ecc.

I nodi sono disposti negli scratches (pannello in basso a sinistra, utilizzato per la creazione rapida di richieste "usa e getta") e nel project (pannello in alto a sinistra), su cui ci soffermeremo maggiormente.

Progetto

All'avvio dell'applicazione, potreste aver notato una singola riga Project nell'angolo in alto a sinistra. Questo è il nodo radice dell'albero del progetto. All'avvio del progetto viene creato un progetto temporaneo, il cui percorso dipende dal sistema operativo utilizzato. In qualsiasi momento è possibile spostare il progetto nella posizione che preferite.

Lo scopo principale del progetto è quello di salvare i lavori nel file system e di sincronizzarli successivamente tramite sistemi di controllo versione, eseguendo scenari in CI, revisionando modifiche, ecc.

Variabili

Le variabili sono uno dei meccanismi chiave dell'applicazione. Coloro di voi che lavorano con strumenti simili a TestMace avranno già capito di cosa si tratta. Quindi, le variabili sono un modo per conservare dati comuni e comunicare tra i nodi. Un esempio è dato dalle variabili d'ambiente in Postman o Insomnia. Tuttavia, abbiamo fatto un passo avanti e sviluppato il tema. In TestMace, le variabili possono essere impostate a livello di nodo. Qualsiasi. Esiste anche un meccanismo di ereditarietà delle variabili dai genitori e di sovrascrittura delle variabili nei discendenti. Inoltre, ci sono diverse variabili incorporate, i cui nomi iniziano con $. Ecco alcune di esse:

  • $prevStep — riferimento alle variabili del nodo precedente
  • $nextStep — riferimento alle variabili del nodo successivo
  • $parent — lo stesso, ma per il genitore
  • $response — risposta dal server
  • $env — variabili d'ambiente correnti
  • $dynamicVar — variabili dinamiche, create durante l'esecuzione dello script o della richiesta

$env — queste sono fondamentalmente variabili normali a livello del nodo Project, tuttavia, il set di variabili d'ambiente cambia a seconda dell'ambiente selezionato.

L'accesso a una variabile avviene tramite ${variable_name}
Come valore di una variabile può essere un'altra variabile, o addirittura un'intera espressione. Ad esempio, come variabile url può esserci un'espressione del tipo
http://${host}:${port}/${endpoint}.

Vale la pena notare la possibilità di assegnare variabili durante l'esecuzione dello script. Ad esempio, spesso sorge la necessità di salvare i dati di autorizzazione (token o l'intera intestazione) ricevuti dal server dopo un accesso riuscito. TestMace consente di salvare dati simili in variabili dinamiche di uno dei genitori. Per evitare collisioni con le già esistenti variabili "statiche", le variabili dinamiche sono state collocate in un oggetto separato. $dynamicVar.

Scenari

Utilizzando tutte le possibilità sopra menzionate, è possibile eseguire interi scenari di richieste. Ad esempio, creazione di un'entità -> richiesta dell'entità -> eliminazione dell'entità. In questo caso, per esempio, puoi usare un nodo Folder per raggruppare diversi nodi RequestStep.

Completamento automatico e evidenziazione del valore dell'espressione

Per un lavoro comodo con le variabili (e non solo) è necessaria la completamento automatico. E naturalmente l'evidenziazione del valore dell'espressione, per facilitare e rendere più semplice chiarire a quanto ammonta una determinata variabile. Qui si tratta proprio di quel caso in cui è meglio vedere una volta che sentire cento volte:

TestMace — un potente IDE per lavorare con le API

Va notato che il completamento automatico è implementato non solo per le variabili, ma anche, ad esempio, per le intestazioni, i valori di determinate intestazioni (ad esempio, completamento automatico per l'intestazione Content-Type), protocolli e molto altro. L'elenco viene costantemente aggiornato con la crescita dell'applicazione.

Annulla/ripeti

Annullare/ripetere le modifiche è una cosa molto comoda, tuttavia, per qualche motivo, non è implementata ovunque (e gli strumenti per lavorare con le API non fanno eccezione). Ma noi non siamo così!) Annulla/ripeti è implementato nel contesto dell'intero progetto, il che consente di annullare non solo la modifica di un nodo specifico, ma anche la sua creazione, eliminazione, spostamento, ecc. Le operazioni più critiche richiedono conferma.

Creazione di test

La creazione di test è gestita dal 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 (affermazioni). Ogni assertion ha il proprio tipo, attualmente esistono diversi tipi di assertion.

  1. Confronta valori — confronta semplicemente 2 valori. Ci sono diversi operatori di confronto "uguale", "diverso", "maggiore", "maggiore o uguale", "minore", "minore o uguale".

  2. Contiene valore — verifica la presenza di una sottostringa nella stringa.

  3. XPath — verifica che vi sia un certo valore secondo il selettore in XML.

  4. Assertion JavaScript — uno script arbitrario in linguaggio JavaScript che restituisce true in caso di successo e false in caso di errore.

Nota che solo l'ultima richiede all'utente competenze di programmazione, le altre 3 assertion sono create tramite un'interfaccia grafica. Ecco, ad esempio, come appare la finestra di dialogo per la creazione di un'assertion di confronto valori:

TestMace — un potente IDE per lavorare con le API

La ciliegina sulla torta è la rapida creazione di assertion dalla risposta, basta dare un'occhiata a questo!

TestMace — un potente IDE per lavorare con le API

Tuttavia, tali assertion presentano ovvie limitazioni, di fronte alle quali puoi utilizzare l'assertion JavaScript. E qui TestMace fornisce anche un ambiente confortevole con completamento automatico, evidenziazione della sintassi e persino un analizzatore statico.

Descrizione API

TestMace consente non solo di utilizzare l'API, ma anche di documentarla. La descrizione stessa ha una struttura gerarchica ed è organicamente integrata nel resto del progetto. Inoltre, attualmente esiste la possibilità di importare la descrizione dell'API dai formati Swagger 2.0 / OpenAPI 3.0. La descrizione non giace semplicemente come un peso morto, ma si integra strettamente con il resto del progetto; in particolare, è disponibile il completamento automatico degli URL, delle intestazioni HTTP, dei parametri di query e altro, e in futuro prevediamo di aggiungere test per la corrispondenza della risposta con la descrizione dell'API.

Condivisione delle nodi

Caso d'uso: vorresti condividere una richiesta problematica o persino un intero scenario con un collega o semplicemente allegarla 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 di archiviazione leggibile dall'uomo del progetto

Attualmente, ogni nodo è archiviato 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 fatto 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 è piuttosto facile da modificare anche manualmente.

La gerarchia delle cartelle nel sistema di file riproduce completamente la gerarchia dei nodi nel progetto. Ad esempio, uno scenario di questo tipo:

TestMace — un potente IDE per lavorare con le API

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

TestMace — un potente IDE per lavorare con le API

Il che facilita il processo di revisione del progetto.

Importazione da Postman

Dopo aver letto tutto quanto sopra, alcuni utenti vorranno provare (giusto?) il nuovo prodotto o (chi lo sa!) utilizzarlo pienamente nel proprio progetto. Tuttavia, la migrazione potrebbe essere ostacolata da un gran numero di risorse già accumulate nello stesso Postman. Per questi casi, TestMace supporta l'importazione di collezioni da Postman. Attualmente è supportata l'importazione senza test, ma in futuro non escludiamo di includere anche il loro supporto.

Piani

Spero che a molti di coloro che hanno letto fino a questo punto, il nostro prodotto sia piaciuto. Tuttavia, non è tutto! Il lavoro sul prodotto sta proseguendo a pieno ritmo ecco alcune funzionalità che prevediamo di aggiungere a breve.

Sincronizzazione cloud

Una delle funzionalità più richieste. Attualmente offriamo come opzione di sincronizzazione di utilizzare sistemi di controllo versione, per cui stiamo rendendo il formato più amichevole per questo tipo di archiviazione. Tuttavia, non a tutti si adatta questo flusso di lavoro, quindi è prevista l'aggiunta di 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 diverse integrazioni con applicazioni o flussi di lavoro esistenti. La CLI è esattamente ciò che è necessario per integrare i test scritti in TestMace nel processo di integrazione continua. Il lavoro sulla CLI è in corso, nelle versioni iniziali ci sarà l'avvio del progetto con un semplice report console. In seguito, è prevista l'aggiunta dell'output del report in formato JUnit.

Sistema a plugin

Nonostante tutta la potenza del nostro strumento, il set di casi che richiedono soluzione è illimitato. Alla fine ci sono compiti specifici per il progetto in questione. È per questo che in futuro prevediamo di aggiungere un SDK per lo sviluppo di plugin, e ogni sviluppatore potrà aggiungere funzionalità a piacimento.

Espansione dell'assortimento di tipi di nodi

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

  • Nodo Script — trasforma e colloca i dati utilizzando js e l'API corrispondente. Utilizzando questo tipo di nodo, si possono realizzare cose come script di pre-request e post-request in Postman.
  • Nodo GraphQL — supporto per graphql
  • Nodo di affermazione personalizzata — permetterà di ampliare il set di affermazioni esistenti nel progetto
    Naturalmente, questo non è un elenco definitivo, sarà costantemente aggiornato grazie anche al vostro feedback.

FAQ

Cosa vi distingue da Postman?

  1. Concetto di nodi che consente di scalare praticamente all'infinito la funzionalità del progetto
  2. Formato leggibile dall'uomo del progetto con salvataggio nel file system, che semplifica il lavoro utilizzando sistemi di controllo versione
  3. Possibilità di creare test senza programmazione e supporto avanzato per js nell'editor dei test (autocomplete, analizzatore statico)
  4. Completamento automatico avanzato e evidenziazione del valore attuale delle variabili

È un prodotto open-source?

No, attualmente il codice sorgente è chiuso, ma in futuro prendiamo in considerazione la possibilità di aprire il codice sorgente

Di cosa vivete?)

Insieme alla versione gratuita, prevediamo di rilasciare una versione a pagamento del prodotto. Questa conterrà prima di tutto funzionalità che richiedono una parte server, ad esempio la sincronizzazione.

Conclusione

Il nostro progetto sta facendo passi da gigante verso un rilascio stabile. Tuttavia, il prodotto è già utilizzabile, e le recensioni positive dei nostri primi utenti lo confermano. Stiamo raccogliendo attivamente feedback, poiché senza una stretta collaborazione con la community non è possibile costruire uno strumento di qualità. Puoi trovarci qui:

Sito ufficiale

Telegram

Slack

Facebook

Issue tracker

Non vediamo l'ora di ricevere le vostre richieste e suggerimenti!

Fonte: habr.com

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