TestMace: un potente IDE per lavorare con le API

Ciao a tutti! Oggi vogliamo presentare al pubblico IT il nostro prodotto: un IDE per lavorare con le API Test Mace. Forse alcuni di voi già ci conoscono da articoli precedenti. Tuttavia, non è stata effettuata una revisione completa dello strumento, quindi affrontiamo questa sfortunata lacuna.

TestMace: un potente IDE per lavorare con le API

motivazione

Vorrei iniziare con il modo in cui, in effetti, siamo arrivati ​​a questa vita e abbiamo deciso di creare il nostro strumento per il lavoro avanzato con l'API. Cominciamo con un elenco di funzionalità che dovrebbe avere un prodotto, di cui, a nostro avviso, possiamo dire che si tratta di un “IDE per lavorare con le API”:

  • Creazione ed esecuzione di query e script (sequenze di query)
  • Scrivere vari tipi di test
  • Generazione di prove
  • Lavorare con le descrizioni API, inclusa l'importazione da formati come Swagger, OpenAPI, WADL, ecc.
  • Richieste beffarde
  • Buon supporto per uno o più linguaggi per la scrittura di script, inclusa l'integrazione con le librerie più diffuse
  • eccetera

L'elenco può essere ampliato in base ai propri gusti. Inoltre, è importante creare non solo l'IDE stesso, ma anche una determinata infrastruttura, come la sincronizzazione cloud, gli strumenti a riga di comando, il servizio di monitoraggio online, ecc. Alla fine, le tendenze degli ultimi anni ci impongono non solo la potente funzionalità dell'applicazione, ma anche la sua piacevole interfaccia.

Chi ha bisogno di uno strumento del genere? Ovviamente, tutti coloro che sono almeno in qualche modo collegati allo sviluppo e al test delle API sono sviluppatori e tester =). Inoltre, se per i primi è spesso sufficiente eseguire singole query e semplici script, allora per i tester questo è uno degli strumenti principali, che, tra le altre cose, dovrebbe includere un potente meccanismo per scrivere test con la possibilità di eseguirli in CI.

Quindi, seguendo queste linee guida, abbiamo iniziato a creare il nostro prodotto. Vediamo cosa abbiamo ottenuto in questa fase.

Inizio veloce

Cominciamo con una prima conoscenza dell'applicazione. Puoi scaricarlo sul nostro sito web. Al momento sono supportate tutte e 3 le principali piattaforme: Windows, Linux, MacOS. Scarica, installa, avvia. Quando lo avvii per la prima volta, potresti vedere la seguente finestra:

TestMace: un potente IDE per lavorare con le API

Fai clic sul segno più nella parte superiore dell'area contenuto per creare la tua prima richiesta. La scheda delle query è simile alla seguente:

TestMace: un potente IDE per lavorare con le API

Diamo un'occhiata più in dettaglio. L'interfaccia della richiesta è molto simile all'interfaccia dei client rest più diffusi, il che semplifica la migrazione da strumenti simili. Facciamo 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

In generale, a prima vista, anche il pannello di risposta non riserva sorprese. Vorrei però attirare la vostra attenzione su alcuni punti:

  1. Il corpo della risposta è rappresentato sotto forma di albero, che in primo luogo aggiunge contenuto informativo e in secondo luogo permette di aggiungere alcune funzionalità interessanti di cui di seguito
  2. È presente una scheda Asserzioni che visualizza un elenco di test per una determinata richiesta

Come puoi vedere, il nostro strumento può essere utilizzato come un comodo client di riposo. Tuttavia, non saremmo qui se le sue capacità si limitassero solo all’invio di richieste. Successivamente, descriverò i concetti e le funzionalità di base di TestMace.

Concetti e caratteristiche di base

nodo

La funzionalità di TestMace è divisa in diversi tipi di nodi. Nell'esempio sopra, abbiamo dimostrato il funzionamento del nodo RequestStep. Tuttavia, nell'applicazione sono ora disponibili anche i seguenti tipi di nodi:

  • Richiesta Passo. Questo è il nodo attraverso il quale è possibile creare una richiesta. Può avere solo un nodo Asserzione come elemento figlio.
  • Asserzione. Il nodo viene utilizzato per scrivere i test. Può essere solo un nodo figlio del nodo RequestStep.
  • Cartella. Consente di raggruppare i nodi Cartella e RichiestaStep al loro interno.
  • Progetto. Questo è il nodo radice, creato automaticamente al momento della creazione del progetto. Altrimenti ripete la funzionalità del nodo Cartella.
  • Collegamento. Collegamento alla cartella o al nodo RequestStep. Consente di riutilizzare query e script.
  • eccetera

I nodi si trovano negli scratch (il pannello in basso a sinistra, utilizzato per creare velocemente query “una tantum”) e nei progetti (il pannello in alto a sinistra), su cui ci soffermeremo più nel dettaglio.

Progetto

Quando avvii l'applicazione, potresti notare una riga di progetto solitaria nell'angolo in alto a sinistra. Questa è la radice dell'albero del progetto. Quando si avvia un progetto, viene creato un progetto temporaneo, il cui percorso dipende dal sistema operativo. In qualsiasi momento puoi spostare il progetto in un luogo conveniente per te.

Lo scopo principale del progetto è la possibilità di salvare gli sviluppi nel file system e sincronizzarli ulteriormente tramite sistemi di controllo della versione, eseguire script in CI, rivedere le modifiche, ecc.

variabili

Le variabili sono uno dei meccanismi chiave di un'applicazione. Chi di voi lavora con strumenti come TestMace potrebbe già avere un'idea di cosa stiamo parlando. Pertanto, le variabili sono un modo per archiviare dati comuni e comunicare tra i nodi. Un analogo, ad esempio, sono le variabili ambientali in Postino o Insonnia. Tuttavia siamo andati oltre e abbiamo sviluppato l’argomento. In TestMace, le variabili possono essere impostate a livello di nodo. Qualunque. Esiste anche un meccanismo per ereditare variabili dagli antenati e sovrapporre variabili nei discendenti. Inoltre ci sono un certo numero di variabili integrate, i cui nomi iniziano con $. Eccone alcuni:

  • $prevStep — collegamento alle variabili del nodo precedente
  • $nextStep — collegamento alle variabili del nodo successivo
  • $parent - la stessa cosa, ma solo per l'antenato
  • $response - risposta dal server
  • $env - variabili d'ambiente attuali
  • $dynamicVar - variabili dinamiche create durante l'esecuzione di script o query

$env - queste sono essenzialmente variabili ordinarie a livello di nodo del progetto, tuttavia, l'insieme delle variabili di ambiente cambia a seconda dell'ambiente selezionato.

Si accede alla variabile tramite ${variable_name}
Il valore di una variabile può essere un'altra variabile o anche un'intera espressione. Ad esempio, la variabile URL può essere un'espressione simile
http://${host}:${port}/${endpoint}.

Separatamente vale la pena notare la possibilità di assegnare variabili durante l'esecuzione dello script. Ad esempio, spesso è necessario salvare i dati di autorizzazione (un token o l'intera intestazione) provenienti dal server dopo un accesso riuscito. TestMace ti consente di salvare tali dati in variabili dinamiche di uno degli antenati. Per evitare collisioni con variabili “statiche” già esistenti, le variabili dinamiche vengono posizionate in un oggetto separato $dynamicVar.

scenari

Utilizzando tutte le funzionalità di cui sopra, puoi eseguire interi script di query. Ad esempio, creando un'entità -> interrogando un'entità -> eliminando un'entità. In questo caso, ad esempio, puoi utilizzare il nodo Cartella per raggruppare più nodi RequestStep.

Completamento automatico ed evidenziazione delle espressioni

Per lavorare comodamente con le variabili (e non solo) è necessario il completamento automatico. E, naturalmente, evidenziando il valore di un'espressione per rendere più semplice e conveniente chiarire a cosa equivale una determinata variabile. Questo è esattamente il caso in cui è meglio vedere una volta che ascoltare cento volte:

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 le intestazioni, i valori di determinate intestazioni (ad esempio, il completamento automatico per l'intestazione Content-Type), i protocolli e molto altro. L'elenco viene costantemente aggiornato man mano che l'applicazione cresce.

Annulla Ripristina

Annullare/ripristinare le modifiche è una cosa molto comoda, ma per qualche motivo non è implementata ovunque (e gli strumenti per lavorare con le API non fanno eccezione). Ma noi non siamo uno di quelli!) Abbiamo implementato l'annullamento/ripristino nell'intero progetto, che consente di annullare non solo la modifica di un nodo specifico, ma anche la sua creazione, eliminazione, spostamento, ecc. Le operazioni più critiche necessitano di conferma.

Creazione di test

Il nodo Asserzione è responsabile della creazione dei test. Una delle caratteristiche principali è la possibilità di creare test senza programmazione, utilizzando gli editor integrati.

Un nodo Asserzione è costituito da un insieme di asserzioni. Ogni asserzione ha il suo tipo; al momento esistono diversi tipi di asserzioni

  1. Confronta valori: confronta semplicemente 2 valori. Esistono diversi operatori di confronto: uguale, non uguale, maggiore di, maggiore o uguale a, minore di, minore o uguale a.

  2. Contiene valore: controlla la presenza di una sottostringa in una stringa.

  3. XPath: verifica che il selettore in XML contenga un determinato valore.

  4. L'asserzione JavaScript è uno script JavaScript arbitrario che restituisce vero in caso di successo e falso in caso di fallimento.

Noto che solo l'ultima richiede competenze di programmazione da parte dell'utente, le altre 3 asserzioni vengono create utilizzando un'interfaccia grafica. Ecco, ad esempio, come appare la finestra di dialogo per la creazione di un'asserzione di confronto di valori:

TestMace: un potente IDE per lavorare con le API

La ciliegina sulla torta è la creazione rapida di asserzioni a partire dalle risposte, basta guardarla!

TestMace: un potente IDE per lavorare con le API

Tuttavia, tali asserzioni presentano evidenti limitazioni, che potresti voler utilizzare un'asserzione javascript per superare. E qui TestMace fornisce anche un ambiente confortevole con completamento automatico, evidenziazione della sintassi e persino un analizzatore statico.

Descrizione dell'API

TestMace ti consente non solo di utilizzare l'API, ma anche di documentarla. Inoltre, anche la descrizione stessa ha una struttura gerarchica e si inserisce organicamente nel resto del progetto. Inoltre, attualmente è possibile importare descrizioni API dai formati Swagger 2.0 / OpenAPI 3.0. La descrizione in sé non è solo un peso morto, ma è strettamente integrata con il resto del progetto, in particolare è disponibile il completamento automatico di URL, intestazioni HTTP, parametri di query, ecc. E in futuro prevediamo di aggiungere test per la conformità della risposta con la descrizione API.

Nodo di condivisione

Caso: vorresti condividere con un collega una richiesta problematica o anche un intero script o semplicemente allegarlo ad un bug. TestMace copre anche questo caso: l'applicazione consente di serializzare qualsiasi nodo e persino un sottoalbero in un URL. Copia-incolla e potrai trasferire facilmente la richiesta su un'altra macchina o progetto.

Formato di archiviazione del progetto leggibile dall'uomo

Al momento, ogni nodo è archiviato in un file separato con estensione yml (come nel caso del nodo Assertion) o in una cartella con il nome del nodo e il file index.yml al suo interno.
Ad esempio, questo è l'aspetto del file di richiesta che abbiamo creato nella recensione precedente:

indice.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 è molto chiaro. Se lo si desidera, questo formato può essere facilmente modificato manualmente.

La gerarchia delle cartelle nel file system ripete completamente la gerarchia dei nodi nel progetto. Ad esempio, uno script come:

TestMace: un potente IDE per lavorare con le API

Mappa il file system sulla seguente struttura (viene mostrata solo la gerarchia delle cartelle, ma l'essenza è chiara)

TestMace: un potente IDE per lavorare con le API

Ciò semplifica il processo di revisione del progetto.

Importazione da postino

Dopo aver letto tutto quanto sopra, alcuni utenti vorranno provare (giusto?) un nuovo prodotto o (che diavolo non sto scherzando!) utilizzarlo completamente nel loro progetto. Tuttavia, la migrazione può essere fermata da un gran numero di sviluppi nello stesso Postino. In questi casi, TestMace supporta l'importazione di raccolte da Postman. Al momento sono supportate le importazioni senza test, ma non escludiamo di sostenerle in futuro.

Piani

Spero che a molti di coloro che hanno letto fino a questo punto sia piaciuto il nostro prodotto. Ma non è tutto! Il lavoro sul prodotto è in pieno svolgimento ed ecco alcune funzionalità che prevediamo di aggiungere presto.

Sincronizzazione cloud

Una delle funzionalità più richieste. Al momento proponiamo di utilizzare sistemi di controllo della versione per la sincronizzazione, per cui stiamo rendendo il formato più amichevole per questo tipo di archiviazione. Tuttavia, questo flusso di lavoro non è adatto a tutti, quindi prevediamo di aggiungere un meccanismo di sincronizzazione familiare a molti tramite i nostri server.

CLI

Come accennato in precedenza, i prodotti a livello IDE non possono fare a meno di tutti i tipi di integrazioni con applicazioni o flussi di lavoro esistenti. La CLI è esattamente ciò che serve per integrare i test scritti in TestMace nel processo di integrazione continua. Il lavoro sulla CLI è in pieno svolgimento; le prime versioni avvieranno il progetto con un semplice report da console. In futuro prevediamo di aggiungere l'output del report in formato JUnit.

Sistema di plug-in

Nonostante tutta la potenza del nostro strumento, la serie di casi che richiedono soluzioni è illimitata. Dopotutto, ci sono compiti specifici per un particolare progetto. Ecco perché in futuro prevediamo di aggiungere un SDK per lo sviluppo di plugin e ogni sviluppatore potrà aggiungere funzionalità a proprio piacimento.

Espansione della gamma di tipi di nodo

Questo insieme di nodi non copre tutti i casi richiesti dall'utente. Nodi che si prevede di aggiungere:

  • Nodo script: converte e inserisce i dati utilizzando js e l'API corrispondente. Utilizzando questo tipo di nodo, puoi eseguire operazioni come script pre-richiesta e post-richiesta in Postman.
  • Nodo GraphQL: supporto graphql
  • Nodo asserzioni personalizzate: ti consentirà di espandere l'insieme di asserzioni esistenti nel progetto
    Naturalmente questa non è una lista definitiva; verrà costantemente aggiornata anche in base al vostro feedback.

FAQ

In cosa sei diverso da Postino?

  1. Il concetto di nodi, che consente di scalare quasi all'infinito la funzionalità del progetto
  2. Formato di progetto leggibile dall'uomo con salvataggio in un file system, che semplifica il lavoro utilizzando i sistemi di controllo della versione
  3. Possibilità di creare test senza programmazione e supporto js più avanzato nell'editor di test (completamento automatico, analizzatore statico)
  4. Completamento automatico avanzato ed evidenziazione del valore corrente delle variabili

È un prodotto open source?

No, al momento le fonti sono chiuse, ma in futuro stiamo valutando la possibilità di aprire le fonti

Di cosa vivi?)

Insieme alla versione gratuita, prevediamo di rilasciare una versione a pagamento del prodotto. Comprenderà principalmente cose che richiedono un lato server, ad esempio la sincronizzazione.

conclusione

Il nostro progetto si sta muovendo a passi da gigante verso una versione stabile. Tuttavia il prodotto è già utilizzabile e il feedback positivo dei nostri primi utilizzatori ne è la prova. Raccogliamo attivamente feedback, perché senza una stretta collaborazione con la community è impossibile costruire un buon strumento. Ci puoi trovare qui:

Sito ufficiale

Telegram

Slack

Facebook

Tracker dei problemi

Aspettiamo i vostri desideri e suggerimenti!

Fonte: habr.com

Aggiungi un commento