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
Top comments (1)
Sono un felice utilizzatore di Bruno gold!!! :)