Hurl, testez vos URL en quelques lignes

Développé en Rust par Orange, Hurl est un binaire disponible sur la plupart des plateformes vous permettant de tester vos URL en ligne de commande.

Jérémy 🤘
Jérémy 🤘

Très simple à installer, puis ce qu’il ne nécessite que de télécharger et décompresser un tar.gz. Et aussi simple à utiliser puis ce qu’il ne suffit que de faire des fichiers textes où vous allez détailler les étapes.

Comme vous avez pu le voir dans la démo juste au-dessus, vous pouvez tester vos API et faire des assertions sur le retour JSON.

Mais vous pouvez aussi tester du XML (il supporte les appels SOAP) mais bien sûr aussi de l’HTML si vous voulez tester votre front-end.

La documentation est très fournie et vous montera toutes les possibilités qu’offre cet outil.

Utilisation

Son utilisation est vraiment très simple puis ce qu'il suffit de créer un fichier texte *.hurl et de l'exécuter via la commande hurl --test *.hurl.

Il testera tous les fichiers hurl qu’il trouvera dans le répertoire.

Structure

Copier
GET/POST https://hardly-smart.fr

# Version and status (mandatory if response present)
HTTP 200

# HTTP response headers (
content-length: 206
accept-ranges: bytes
user-agent: Test

# Captures and asserts (optional sections, unordered) 
[Captures]
...
[Asserts]
...

# HTTP response body (optional)
{
  "type": "FOO",
  "value": 356789,
  "ordered": true,
  "index": 10
}

GET/POST https://hardly-smart.fr

# Version and status (mandatory if response present)
HTTP 200

# HTTP response headers (
content-length: 206
accept-ranges: bytes
user-agent: Test

# Captures and asserts (optional sections, unordered) 
[Captures]
...
[Asserts]
...

# HTTP response body (optional)
{
  "type": "FOO",
  "value": 356789,
  "ordered": true,
  "index": 10
}

Requêtes

Comme vous le feriez avec Postman ou Insomnia, vous pouvez tester les différents verbes (GET, POST, PUT…). Mais vous pouvez aussi lui envoyer différentes données, telles que des queryparams, un body en formData, mais aussi des fichiers à uploader…

Copier
POST {{base_url}}/api/articles
Accept: application/json
X-AUTH-TOKEN: api-key-user-1

MultipartFormData]
field_name: my field value
field_file: file,__PATH__; mimetype
...
POST {{base_url}}/api/articles
Accept: application/json
X-AUTH-TOKEN: api-key-user-1

MultipartFormData]
field_name: my field value
field_file: file,__PATH__; mimetype
...

Assertions

Vous pouvez tester le code retour ou un ensemble de code retours. Les assertions sont très simples à mettre en place et permettent un grand nombre de choses. Par exemple compter le nombre d'éléments dans un tableau, s’assurer que la valeur est bien un entier, une string… Pour les plus courageux vous pouvez aussi valider les données via une regex.

Copier
HTTP 200

[Asserts]
jsonpath "$.errors.title" count == 1
jsonpath "$.errors.title[0]" == "Le titre ne doit pas être vide."
jsonpath "$.id" isInteger
jsonpath "$.file" matches /[0-9a-z]+\.jpg/
jsonpath "$.author.name" isString
HTTP 200

[Asserts]
jsonpath "$.errors.title" count == 1
jsonpath "$.errors.title[0]" == "Le titre ne doit pas être vide."
jsonpath "$.id" isInteger
jsonpath "$.file" matches /[0-9a-z]+\.jpg/
jsonpath "$.author.name" isString

Et toutes ces validations sont disponibles peu importe le retour que vous avez (JSON, XML, HTML…)

Capturer des données

Il est aussi possible de “capturer” des informations d’une requête à l'autre. Pratique quand vous voulez récupérer le jeton CSRF de la page avant de soumettre le formulaire, mais aussi si vous voulez modifier/supprimer une ressource API que vous venez de créer.

Copier
POST {{base_url}}/api/articles
Accept: application/json

[FormData]
...

HTTP 201

[Captures]
article-id: jsonpath "$.id"

POST {{base_url}}/api/articles/{{article-id}}
Accept: application/json
POST {{base_url}}/api/articles
Accept: application/json

[FormData]
...

HTTP 201

[Captures]
article-id: jsonpath "$.id"

POST {{base_url}}/api/articles/{{article-id}}
Accept: application/json

CI/CD

Comme ce n’est qu’un outil en ligne de commande, il est tout à fait possible de l'utiliser dans votre CI/CD et ainsi automatiser vos tests et votre QA.

Tout est détaillé sur leur documentation.