Javascript

Fonctionnement

NeoLoad permet d'exécuter du code Javascript au sein des Utilisateurs Virtuels. Il est ainsi possible d'insérer une action Javascript lors de la conception de l'utilisateur virtuel. Son code peut faire appel à des fonctions javascript communes déclarées dans les librairies javascript de NeoLoad.

Ce qu'il est possible de faire

l'API NeoLoad permet principalement de manipuler des variables Neoload et de positionner des cookies sur l'utilisateur virtuel en cours. Les fonctions de bases Javascript permettent d'effectuer des manipulations de chaînes, de date, des calculs,...

la section intitulée « Vue d'ensemble de l'API » décrit les possibilités de l'API NeoLoad.

Ce qu'il n'est pas possible de faire

L'exécution du script est en dehors du contexte de la requête HTML, il est donc impossible de manipuler l'arbre DOM de la réponse d'une requête. Ainsi, les fonctions incluses au sein des navigateurs afin d'extraire ou de manipuler le document HTML ne sont pas incluses.

Voici une liste non exhaustive des fonctions ou objets non supportés:

  • window

  • document (dont document.cookie, document.forms[0], document.getElementById(), ...)

  • navigator

  • alert()

  • confirm()

  • ...

Noter que les scripts utilisant de tels objets compilent correctement, et échoueront à l'exécution au moment où l'objet non supporté sera utilisé.

Les Actions Javascript

Une action Javascript peut être ajoutée dans la définition d'un utilisateur virtuel. Une action Javascript est définie par un nom et une description et contient le script à exécuter.

Créer une Action Javascript

Suivre la procédure suivante:

Procédure 8.7. Créer une Action Javascript

  1. Se rendre dans l'onglet Utilisateur Virtuel de la section Design

  2. Sélectionner l'action logique Javascript

  3. Glisser-déposer l'action à l'endroit souhaité dans l'arbre des Utilisateurs Virtuels.

NeoLoad crée l'action avec un squelette de script. L'adapter à vos besoins ou l'effacer entièrement pour commencer d'un script vierge.

Editer une Action Javascript

Lors d'une modification d'un script, il est nécessaire d'appliquer les modifications pour qu'elles soient prises en compte. Avant d'appliquer, il est possible d'annuler les modifications, le dernier script sauvegardé est alors rechargé. Il est possible d'éditer les scripts directement dans les fichiers du projet (répertoire 'scripts'). Dans ce cas on peut recharger dans NeoLoad le contenu du fichier modifié en cliquant sur le bouton 'Recharger'.

Les scripts peuvent être compilés avant exécution. Cette compilation vérifie la syntaxe du script (parenthèse manquante ...) mais ne vérifie pas sa validité (nom des méthodes ...).

Les erreurs

Lors du test, une action Javascript est marquée en erreur dans les cas suivants:

  • Le script de compile pas. (Erreur de syntaxe)

  • Le script n'est pas valide (une méthode n'existe pas)

  • Le script à appelé la méthode context.fail(message) de l'API.

Les actions Javascript sont affichées de manière systématique lors de la vérification d'un utilisateur virtuel, et affichées dans le table des erreurs si le script est marqué en erreur. Dans les deux cas un message d'erreur détaillé est affiché.

Les librairies Javascript

Les librairies javascript permettent de créer des fonctions qui pourront être utilisées dans tous les scripts des utilisateurs virtuels. Outre le partage du code entre plusieurs scripts, l'utilisation des librairies permet d'économiser de la mémoire sur les injecteurs de charge car le code des librairies est partagé par les utilisateurs alors que celui des scripts est chargé en mémoire pour chaque utilisateur. Il est donc conseillé d'utiliser dans la mesure du possible des fonctions codées dans la librairie.

Créer une Librairie Javascript

Une librairie Javascript est définie par son nom et le fichier de librairie. Utiliser un fichier existant, ou créer un nouveau fichier vide. Chaque librairie peut contenir une ou plusieurs fonctions Javascript.

Procédure 8.8. Créer une Librairie Javascript

  1. Utiliser le menu Editer / Librairies JS.

  2. Utiliser le bouton Nouvelle librairie

  3. Un assistant apparaît, choisir le nom de la librairie

  4. Choisir l'option appropriée: créer une nouvelle librairie ou utiliser un fichier existant.

  5. Valider le choix pour fermer l'assistant

  6. Sélectionner la librairie crée dans le liste des librairies.

Editer une Librairie Javascript

Utiliser le menu Editer / Librairies JS pour accéder aux librairies.

Si vous éditez le fichier à l'aide d'un éditeur de texte en dehors de NeoLoad, vous pouvez recharger le fichier dans l'interface grâce au bouton 'Recharger'.

Utiliser le bouton compiler pour compiler vos Librairies Javascript avant exécution. Cette compilation vérifie la syntaxe de la librairie (parenthèse manquante ...) mais pas la validité (nom des appels de méthodes ...).

Utiliser un fichier Javascript de l'application web

Si vous désirez utiliser des méthodes utilitaires des fichiers javascript de votre application web, vous pouvez les ajouter facilement à la librairie via le menu contextuel sur la requête:

  1. Sélectionner dans la bibliothèque la requête du fichier javascript à ajouter dans la librairie, /app/mylib.js par exemple.

  2. Utiliser la fonction ajouter à la librairie JS disponible au clic droit.

Cette action n'est disponible que sur les requêtes javascript. Elle ajoute le contenu de la réponse du serveur dans les librairies Javascript, il est alors possible d'utiliser vos fonctions utilitaires dans les scripts des utilisateurs virtuels.

[Avertissement]Avertissement

Comme précisé dans la section intitulée « Ce qu'il n'est pas possible de faire », de nombreux objets et fonctions du navigateur ne sont pas supportés (window, document,...). Seules les méthodes utilitaires peuvent être utilisées. Noter que les méthodes utilisant de tels objets non supportés peuvent être déclarées dans la librairie à partir du moment où aucun script n'y fait appel.

Vue d'ensemble de l'API

Cette section présente l'API NeoLoad. Se reporter à la documentation de l'API pour plus de détails.

Le contexte d'exécution

Afin de manipuler les variables, les erreurs et les cookies, NeoLoad fourni un contexte d'exécution à tous les scripts: la variable prédéfinie context permet d'effectuer des opérations sur l'utilisateur virtuel en cours d'exécution.

Voir la documentation de l'objet RuntimeContext de l'API.

Gestion des variables

NeoLoad fourni un gestionnaire de variables permettant de récupérer la valeur d'une variable, de créer une nouvelle variable ou de faire avancer la valeur d'une variable définie dans NeoLoad. Le gestionnaire de variables est accessible par le contexte: context.variableManager.

Exemple de script qui récupère la valeur d'une variable NeoLoad, la modifie et crée une nouvelle variable avec cette nouvelle valeur. Cette variable pourra alors être utilisée dans la suite des actions de l'utilisateur virtuel, et être injectée dans un formulaire par exemple.

var varMng = context.variableManager;
var searchID = varMng.getValue("searchID");
varMng.setValue("newSearchID",parseInt(searchID)+1);

Voir la documentation de l'objet VariableManager de l'API.

Logger

Afin de pouvoir tracer des informations lors de l'exécution d'un script vous pouvez utiliser le logger. Il permet d'écrire des messages à la fois dans le fichier de log de l'injecteur de charge ("loadGenerator.log.00x" dans le dossier des logs, voir la section intitulée « Les fichiers logs ») et dans l'interface de NeoLoad en cas d'erreur. Il existe 5 niveaux de log qui sont hiérarchisés ainsi:

  • FATAL_ERROR

  • ERROR

  • WARNINGCl

  • INFO

  • DEBUG

Vous pouvez réglez le niveau de log maximum à utiliser dans les préférences du projets:

En mode validation d'un utilisateur virtuel, le niveau DEBUG est automatiquement sélectionné.

Exemple de script écrivant un message d'erreur dans les logs.

logger.error("Invalid value: "+myvar);

Voir la documentation de l'objet Logger de l'API.

Gestion des erreurs

Lors de l'exécution d'un javascript, il est possible de simultanément marquer cette action en erreur et d'arrêter l'exécution du script. Cette erreur est alors visible dans les résultats de test. L'erreur contient le message d'erreur ainsi que les logs correspondant au niveau sélectionné.

Exemple de script marquant l'action en erreur.

context.currentVU.fail("Invalid value: "+myvar);

Voir la documentation de l'objet VirtualUser de l'API.

Ajout d'un cookie

L'API permet aussi d'ajouter un cookie pour un serveur donné lors de l'exécution d'un utilisateur virtuel.

Voir la documentation de l'objet VirtualUser de l'API.

Exemple de script
var varMng = context.variableManager;
// Récupère la variable searchID extrait d'une requête précédent ce JavaScript
var searchID = varMng.getValue("searchID");
// Logger la valeur de searchID en mode debug
logger.debug("searchID="+searchID);

// Gestion d'erreur si la variable searchID n'existe pas
if(!searchID) {
  // Arreter l'execution du script et positionner une erreur NeoLoad
  context.fail("variable SearchID not found");
}

// Créer un nouveau cookie pour le serveur 'myServer_80'
context.currentVU.setCookieForServer("myServer_80","cookieName="+searchID+"; Expires=Sat, 30-Sep-2006 21:03:07 GMT; path=/");

// Créer une nouvelle variable d'execution nommée 'newSearchID'
// Note: toutes les variable NeoLoad sont des chaines de caractères, 
// il peut être necessaire de les convertir à l'aide
// des méthodes parseInt(), parseFloat(),...
var newSearchID = parseInt(searchID)+1;
varMng.setValue("newSearchID",newSearchID);

Librairies Java

NeoLoad permet d'utiliser des classes et des méthodes Java dans les actions Javascript. Pour utiliser une librairie Java, copier simplement les fichiers JAR dans le répertoire <projet-neoload>/lib/jslib/. Les fichiers ajoutés seront pris en compte automatiquement.

Au sein du Javascript, les noms de classes doivent être pleinement qualifiés (même pour les classes Java comme java.util.List) et précédés par "Packages.".

Par exemple:

var myObj = new Packages.com.company.MyClass();
var result = myObj.compute(myArg);
var result2 = Packages.com.company.MyClass.someStaticMethod(result);