80 lines
2.3 KiB
Markdown
80 lines
2.3 KiB
Markdown
---
|
|
categories: tests http
|
|
title: Howto Hurl
|
|
...
|
|
|
|
* Site/dépôt officiel : <https://hurl.dev/>
|
|
|
|
**Hurl** est un outil en ligne de commande qui exécute des requêtes HTTP définies dans un format simple et lisible.
|
|
Il peut enchaîner les requêtes, capturer les valeurs d'en-têtes et du corps de la réponse.
|
|
Il peut récupérer des données, tester des sessions HTTP ainsi que des API JSON ou XML.
|
|
Il utilise la `libcurl` comme moteur de requêtes HTTP.
|
|
|
|
Hurl est développé en Rust, par [l'équipe « Open Source » de l'opérateur Orange](https://github.com/Orange-OpenSource/hurl/).
|
|
|
|
## Installation
|
|
|
|
Il n'y a pas de paquet dans les dépôts officiels de Debian.
|
|
|
|
On peut télécharger manuellement un paquet ou bien récupérer un binaire pré-compilé.
|
|
|
|
### Paquet Debian
|
|
|
|
~~~
|
|
# curl -LO https://github.com/Orange-OpenSource/hurl/releases/download/1.8.0/hurl_1.8.0_amd64.deb
|
|
# dpkg -i hurl_1.8.0_amd64.deb
|
|
|
|
$ hurl --version
|
|
hurl 1.8.0 libcurl/7.74.0 OpenSSL/1.1.1n zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libssh2/1.9.0 nghttp2/1.43.0
|
|
Features (libcurl): alt-svc AsynchDNS brotli HTTP2 IDN IPv6 Largefile libz NTLM NTLM_WB SPNEGO SSL TLS-SRP UnixSockets
|
|
Features (built-in): brotli
|
|
~~~
|
|
|
|
## Utilisation
|
|
|
|
On crée un fichier par site dans `tests/monsite.hurl` :
|
|
|
|
~~~
|
|
# Redirects
|
|
|
|
GET http://example.com
|
|
HTTP/* 301
|
|
Location: https://example.com/
|
|
|
|
GET http://www.example.com
|
|
HTTP/* 301
|
|
Location: https://example.com/
|
|
|
|
# Cache headers
|
|
|
|
## 1st request, warm-up
|
|
|
|
GET https://example.com
|
|
HTTP/2 200
|
|
x-cacheable: TRUE
|
|
strict-transport-security: max-age=63072000
|
|
|
|
## 2nd request, cache should hit
|
|
|
|
GET https://example.com
|
|
HTTP/2 200
|
|
|
|
[Asserts]
|
|
header "x-cache" == "HIT"
|
|
header "age" exists
|
|
header "age" != "0"
|
|
~~~
|
|
|
|
NB : des simplifications de syntaxe sont [en cours de préparation](https://github.com/Orange-OpenSource/hurl/issues?q=is%3Aissue+author%3Ajlecour+).
|
|
|
|
On joue la commande `$ hurl --test tests/monsite.hurl` pour un seul site ou `$ hurl --test tests/*.hurl` pour tous les sites à la suite.
|
|
|
|
Codes de retour possibles :
|
|
|
|
* `0` : toutes les assertions sont satisfaites ;
|
|
* `1` : erreur d'option sur la ligne de commande ;
|
|
* `2` : erreur de lecture/analyse d'un fichier d'entrée ;
|
|
* `3` : erreur d'exécution (timeout de connexion…) ;
|
|
* `4` : erreur sur une ou plusieurs assertions non satisfaites.
|
|
|
|
Avec l'option `--verbose` on peut avoir une sortie détaillée. |