Scripts de préparation et de nettoyage

Scripts de préparation et de nettoyage

Certains endpoints d'API ne peuvent pas être surveillés avec une requête statique. Ils ont besoin d'un jeton frais à chaque appel, d'un en-tête signé ou d'une charge unique, et ils peuvent laisser des données qu'il faut nettoyer. Les moniteurs d'API de LoadFocus vous permettent d'exécuter un script de préparation (setup) juste avant la requête et un script de nettoyage (teardown) juste après la réponse, pour que le check se prépare et range tout à chaque exécution.

Les scripts setup et teardown s'appliquent aux checks d'API. Les checks navigateur sont déjà un script complet (le parcours utilisateur lui-même), et les checks multistep passent des données entre les étapes via des variables — ils couvrent les mêmes besoins autrement.

Comment ça marche

  • Le script de setup s'exécute en premier et reçoit l'objet request. Tout ce que vous modifiez sur request (en-têtes, URL, corps) est utilisé pour l'appel réel. C'est ici que vous récupérez un jeton, signez la requête ou construisez une charge unique.
  • LoadFocus envoie ensuite la requête.
  • Le script de teardown s'exécute en dernier et reçoit à la fois request et response. C'est ici que vous supprimez une ressource créée par le check, ou que vous nettoyez les données sensibles des logs.

Les deux scripts s'exécutent dans un bac à sable isolé à chaque exécution du check, dans chaque région, avec leur sortie console capturée pour que vous voyiez ce qui s'est passé.

Ce que vous pouvez utiliser

Dans un script setup ou teardown, vous pouvez faire require de :

  • got et axios — effectuer des appels HTTP (par exemple échanger des identifiants contre un jeton OAuth).
  • crypto — signer des requêtes (HMAC, hachages) pour les API qui exigent une signature.
  • @faker-js/faker — générer des données de test uniques et réalistes.
  • url et path — utilitaires pour construire des URL et des chemins.

console.log est disponible et sa sortie s'affiche sous les logs du script.

Exemple : récupérer un jeton OAuth dans le setup

const got = require('got');
const tokenResponse = await got.post('https://auth.example.com/oauth/token', {
json: {
grant_type: 'client_credentials',
client_id: '{{secrets.CLIENT_ID}}',
client_secret: '{{secrets.CLIENT_SECRET}}',
},
}).json();
// Appliquer le jeton à la requête que LoadFocus s'apprête à envoyer
request.headers = request.headers || [];
request.headers.push({ name: 'Authorization', value: 'Bearer ' + tokenResponse.access_token });

Exemple : signer une requête

const crypto = require('crypto');
const timestamp = Date.now().toString();
const signature = crypto
.createHmac('sha256', '{{secrets.SIGNING_KEY}}')
.update(timestamp + request.url)
.digest('hex');
request.headers = request.headers || [];
request.headers.push({ name: 'X-Timestamp', value: timestamp });
request.headers.push({ name: 'X-Signature', value: signature });

Exemple : nettoyer dans le teardown

const got = require('got');
// Si la requête a créé une ressource, la supprimer pour que le moniteur ne laisse aucune trace
if (response.statusCode === 201 && response.body) {
const created = JSON.parse(response.body);
await got.delete('https://api.example.com/items/' + created.id, {
headers: { Authorization: request.headers.find(h => h.name === 'Authorization').value },
});
}

Secrets et variables

Référencez vos secrets et variables enregistrés avec {{secrets.NOM}} et {{variables.NOM}} dans un script. LoadFocus les remplace à l'exécution, de sorte que les identifiants et les clés de signature ne figurent jamais en clair dans le corps du script.

Tester vos scripts

Dans l'éditeur de check, le bouton Exécuter à côté de chaque script l'exécute en direct contre l'endpoint réel et affiche les logs capturés et le résultat (succès ou message d'erreur). Utilisez-le pour confirmer que votre échange de jeton ou votre signature fonctionne avant d'enregistrer le moniteur.

Limites

  • Le corps de chaque script est limité à 100 Ko.
  • Le script de setup s'exécute à chaque exécution du check : gardez les échanges de jeton efficaces, car un setup lent s'ajoute au temps mesuré du check.
  • Si le script de setup échoue, la requête n'est pas envoyée et le check est marqué en échec, ce qui est généralement souhaitable (pas d'authentification valide = pas de check valide).