Aller au contenu

Les Snippets sont des morceaux de JavaScript réutilisables que vous définissez une fois et importez dans vos scripts de contrôle avec require(). Au lieu de coller la même fonction utilitaire, la même logique de signature de jeton ou le même code d'initialisation dans chaque contrôle, vous l'enregistrez en tant que snippet et l'importez par son nom : modifiez-le à un seul endroit et chaque contrôle qui l'utilise reprend la modification.

Un snippet est simplement un petit module JavaScript. Tout ce qu'il exporte avec module.exports devient disponible partout où vous l'importez :

require('./snippets/name');

Les snippets sont rattachés à votre équipe, afin que tout le monde dans l'équipe puisse importer les mêmes utilitaires depuis ses contrôles.

Les snippets fonctionnent dans les scripts de setup, de teardown, navigateur et multistep. Quand LoadFocus exécute un contrôle, il trouve chaque require('./snippets/<name>') dans vos scripts et envoie ces snippets avec l'exécution. Un snippet peut utiliser les mêmes modules npm qu'un script (par exemple axios, got et crypto).

Ouvrez la page Snippets pour créer, modifier et supprimer des snippets.

  1. Cliquez sur New Snippet.
  2. Saisissez un nom de snippet. C'est le nom que vous importerez dans vos scripts (par exemple auth ou format-date). Les noms ne peuvent contenir que des lettres, des chiffres, des traits d'union et des traits de soulignement.
  3. Écrivez votre JavaScript dans l'éditeur. Exportez ce que vous souhaitez réutiliser avec module.exports.
  4. Cliquez sur Save Snippet.

Chaque nom de snippet doit être unique au sein de votre équipe et peut compter jusqu'à 64 caractères. Le forfait Free inclut jusqu'à 5 snippets ; les forfaits payants, jusqu'à 100. Un snippet peut compter jusqu'à 100 000 caractères.

Utilisez les actions de ligne sur la page Snippets pour mettre à jour le code d'un snippet ou le supprimer. Si un snippet est actuellement utilisé par un ou plusieurs contrôles, LoadFocus vous avertit avant l'enregistrement ou la suppression, car la modification affecte chaque contrôle qui l'importe. Une mise à jour prend effet à la prochaine exécution de tout contrôle qui l'utilise.

Importez un snippet par son nom depuis le chemin ./snippets/ à l'intérieur d'un script de contrôle :

const auth = require('./snippets/auth');

La valeur obtenue correspond exactement à ce que le snippet exporte.

Un script de setup ou de teardown est déjà le corps d'une fonction : écrivez-y des instructions simples et n'ajoutez pas module.exports au script lui-même.

Créez un snippet nommé auth qui construit un en-tête Authorization :

// snippet: auth
module.exports = function bearer(token) {
return { Authorization: 'Bearer ' + token };
};

Utilisez-le ensuite depuis un script de contrôle :

const bearer = require('./snippets/auth');
const headers = bearer(token);
// `token` est une valeur que votre script possède déjà, par exemple un secret
// transmettez `headers` à votre requête

Vous pouvez placer n'importe quelle logique réutilisable dans un snippet : signature de requêtes, constructeurs de payload, utilitaires de dates et de chaînes, ou assertions partagées, et l'importer depuis autant de contrôles que nécessaire.

Un snippet peut aussi travailler avec ctx. Ce snippet, nommé login, récupère un jeton et le stocke dans ctx.vars.token pour que le contrôle puisse le lire :

// Snippet: login
const axios = require('axios');
module.exports = async function login(ctx, username, password) {
const res = await axios.post('https://api.example.com/auth', { username, password });
ctx.vars.token = res.data.token;
};

Passez les identifiants en arguments : une référence ctx.secrets écrite uniquement dans un snippet n'est pas résolue pour l'exécution. Dans un script de setup d'un contrôle navigateur :

const login = require('./snippets/login');
await login(ctx, 'ci-user', ctx.secrets.PASSWORD);
// ctx.vars.token est maintenant disponible pour le contrôle

Les scripts des contrôles d'API reçoivent request (setup) ou request et response (teardown) à la place de ctx : passez-les à la fonction de votre snippet.

  • Chemin littéral uniquement. Seule la forme require('./snippets/<name>') est résolue. Les chemins dynamiques tels que require('./snippets/' + name) ne sont pas pris en charge.
  • Pas de snippet dans un snippet. Un snippet qui en inclut un autre n'est pas résolu. Regroupez la logique partagée dans un seul snippet.
  • Un snippet manquant échoue immédiatement. Si un snippet requis n'existe pas, l'exécution du contrôle échoue avant d'être envoyée, avec une erreur qui nomme le snippet manquant.
  • Bac à sable partagé. Les snippets s'exécutent dans le même bac à sable que le script appelant. Un snippet ne voit ctx, request ou response que si votre script le lui passe.

Utilisez les Snippets pour du code réutilisable : fonctions utilitaires et logique partagées entre les scripts de contrôle.

Utilisez les Variables pour des valeurs réutilisables comme les URL de base et les identifiants de compte, référencées avec ${{VARIABLE_NAME}}.

Utilisez les Secrets pour des valeurs sensibles comme les jetons d'API et les mots de passe. Les secrets sont en écriture seule dans l'interface et se référencent avec ${{SECRET_NAME}}.

Astuce : conservez les valeurs sensibles dans les Secrets, sans les coder en dur dans un snippet. Transmettez-les plutôt aux fonctions de votre snippet à l'exécution.