Bruno vs Postman

Bruno vs Postman

Per chi sviluppa server ReST l’uso di un tool per testare le proprie API è fondamentale. Fino a poco tempo fa lo standard di fatto per questo tipo di applicazioni era Postman. Ultimamente però lo scenario è cambiato e si trovano diverse alternative, una delle più interessanti è Bruno.

Chi conosce Postman non farà fatica ad usare Bruno, infatti, l’interfaccia utente è molto simile e anche alcuni concetti come le Collection, Environment, Script e Test sono praticamente gli stessi. Però ci sono alcune differenze sostanziali. La più interessante è che, mentre Postman richiede la creazione di un account per condividere le collections, Bruno sfrutta Git (o qualunque altro version control). Questa caratteristica è molto interessante perché permette di “versionare” le collections e i vari test insieme alle API.

Bru Markup Language

In effetti quando viene salvata una collection vengono fisicamente salvati vari file in formato Bru in una cartelle del file system. La prima volta che ho visto il file Bru mi sono chiesto perché usare l’ennesimo formato custom simil JSON invece di JSON, YAML, TOML o qualcosa di già esistente.

Andando a leggere la documentazione e vari forum ho capito che c’era un ottimo motivo per questa scelta. E questo risiede sempre nella volontà di integrarsi con il version control. Infatti bisogna tener presente che nei file Bru ci sono alcune informazioni molto semplici — come metodo HTTP, headers, queryparams — che si prestano molto bene ad essere strutturate in un JSON; ma ci sono anche blocchi di codice JavaScript (per gli script e i test) e documentazione in Markdown o altro che inseriti in un JSON lo renderebbero pressoché illeggibile ostacolando notevolmente operazioni come diff o merge.

meta {
name: Get Users
type: http
seq: 1
}

get {
url: https://reqres.in/api/users
body: none
}

assert {
res.status: 200
}

tests {
test(status code is 200, function() {
expect(res.status).equal(200);
});
}

Bru command line

Una caratteristica interessante di Bruno è la possibilità di automatizzare l’esecuzione delle varie collection dalla linea di comando. Per esempio questo comando lancerà tutte le richieste della collection:

bru run

Ovviamente è anche possibile lanciare una singola collection:

bru run request.bru

specificare un particolare environment:

bru run folder –env Local

e molto altro. Questo è un esempio dell’output del comando precedente:


Nella documentazione ufficiale sono specificati tutti i parametri.

Scripting

Bruno offre la possibilità di scrivere anche del codice JavaScript per automatizzare diverse operazioni per esempio:

Recuperare automaticamente il token di autenticazione
Generare dati fittizi
Validare la risposta
Integrare la richiesta con dati provenienti da altre API

Per esempio il codice seguente inserito in uno script “post response” permette di recuperare il token dalla risposta e inserirlo in una variabile in modo da poterlo usare in tutte le chiamate successive:

bru.setEnvVar(jwt_token, res.getBody().access_token);

Invece il codice seguente, inserito in uno script “Pre request” permette di popolare il corpo di una richiesta con dei dati fittizi:

const {faker} = require(@faker-js/faker);
const name = faker.name.fullName();
const email = faker.internet.email();

req.setBody({
name,
email
});

Notare che in quest’ultimo caso è stata usata una libreria esterna. Bruno infatti permette di usare una selezione di librerie JavaScript (ajx, axios, node-fetch, lodash, moment, ecc.) semplicemente importandole (require) oppure con un processo un po’ più complicato di usare qualunque libreria.

Link

Home page: https://www.usebruno.com/

Documentazione: https://docs.usebruno.com/introduction/getting-started

Discord: https://discord.com/invite/KgcZUncpjq

Please follow and like us:
Pin Share