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 surrequest(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
requestetresponse. 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 :
gotetaxios— 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.urletpath— 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 à envoyerrequest.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 traceif (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).