Fonctions natives de JMeter (Partie 1)
Sommaire
intermédiaire - This article is part of a series.
J’ai décidé de laisser le traduction littéraire dans ce cas car je pense que l’idée originale reste intacte. Au contraire, dans certaines parties, j’ai ajouté plus d’informations que je n’avais collectées depuis presque un an après l’édition de cet article. Voici la version originale du post en anglais
Il y a quelques temps, lorsque j’étais en train de m’approprier JMeter, je me suis dit que je devrais écrire mes propres fonctions pour toutes les tâches que je voudrais développer dans mes scripts. Je me suis retrouvé à développer des fonctions Beanshell pour chaque challenge que je rencontrais car les fonctions de JMeter n’étaient pas aussi populaires ou “bonnes” pour les tâches basiques. Mais avec chaque version, ces fonctions ont grandement augmenté en nombre et en capacité, devenant des solutions compréhensibles pour une variété large de besoins de test.
Ces jours-ci, je ne peux pas créer une script JMeter sans utiliser au moins quelques fonctions natives. Elles sont si populaires qu’elles sont également utilisées pour les questions de carrière ou techniques. Dans cette postérité, j’espère pouvoir décrire certains de ses plus grands usages et comment en tirer parti.
Qu’est-ce qu’une fonction de JMeter ? #
Une fonction de JMeter est une évaluation qui retourne un valeur ou un résultat. Ces fonctions couvrent une variété de besoins, tels que les informations du test, la logique, les variables et/ou les propriétés, pour n’en nommer qu’une.
Où peut-on utiliser les fonctions de JMeter? #
Les fonctions de JMeter peuvent être utilisées dans n’importe quel composant du plan de test, qui suit la ordre d’exécution. En autres mots, l’exécution de JMeter doit passer par ce composant pour exécuter la fonction.
Premier, nous devons regrouper les fonctions par type de fonction ou d’activité. Cela nous donnera une meilleure idée de où utiliser ces dernières. Je fournirai également quelques exemples qui révéleront comment les utiliser et compléteront votre apprentissage.
Voici les fonctions de JMeter que nous aborderons dans ce post:
1.- Fonctions d’information #
Les fonctions d’information sont particulièrement utiles pour identifier les données sur la chaîne de thread en cours ou dans une groupe de threads, l’adresse IP du générateur de chargeurs de poids ou son nom de serveur, ou obtenir le temps local dans plusieurs formats. Je dirais que ces fonctions sont la loi lorsqu’on débogage un script. Par exemple, la fonction log nous permet d’envoyer des données de niveau quelconque vers le fichier jmeter.log via une message.
Les données retournées par les fonctions la plus couramment utilisées sont directement issues de l’API service contexte JMeter, qui est comme une API contenant toutes les informations sur le test et les groupes de threads. Si vous voulez un certain élément d’une thread ou d’un groupe de threads, vous pouvez accéder à ses informations, chaque thread contient sa propre context où toutes ses données sont stockées.
Exemples de fonctions d’information :
fonction | exemple | résultat attendu |
---|---|---|
threadNum | ${__threadNum} | Un nombre pour l’ID de la puce actuelle |
threadGroupName | ${__threadGroupName} | Nom de la puce actuelle dans le groupe de puce |
samplerName | ${__samplerName} | Nom de la puce actuelle |
machineIP | ${__machineIP} | Adresse IP du générateur de charge ou de l’ordinateur |
machineName | ${__machineName} | Nom de l’ordinateur généré par le générateur de charge ou de l’ordinateur |
time | ${__time} | Affiche la date et heure locale du générateur de charge ou de l’ordinateur en format EPOCH |
time | ${__time(dd-MM-YYYY,)} | Affiche la date et heure locale de l’équipement ou du générateur de charge en dd-MM-YYYY format |
timeShift | ${__timeShift(dd-MM-YYYY,,P4D,,)} | Base sur la date et heure locale de l’équipement, 4 jours sont ajoutés, en dd-MM-YYYY format |
timeShift | ${__timeShift(dd-MM-YYYY,,P-6D,,)} | Base sur la date et heure locale de l’équipement, 6 jours sont soustrait, en dd-MM-YYYY format |
log | ${__log(Hello World)} | Affiche “Hello World” à niveau INFO par définition |
logn | ${__logn(${TESTSTART.MS},ERR)} | Affiche le début de la test, à l’erreur niveau |
Nous incluons également des images de l’exemple et vous pouvez télécharger le fichier ci-dessous:
Le script JMeter avec des exemples de fonctions d’information ( https://github.com/daeep/JMeter/blob/master/JMeter_Functions/Information-functions.jmx) nécessite Java 1.8+, JMeter 5+, et les extensions JMeter.
2.- Fonctions de Fichier d’Entrée #
Quand on gère des volumes importants de données, il est toujours recommandé d’utiliser des fichiers de données statiques. Ces valeurs peuvent être livrées à JMeter via des fichiers CSV ; chaque ligne sera lue et segmentée pour enregistrer les valeurs dans des variables. Je ne suis pas un fan du usage de fichiers CSV ou similaires pour les scripts ; je préfère générer mes propres données aléatoirement.
Toutefois, il y a des moments où nous avons la seule option ou où nous sommes limités à utiliser des inputs externes. Cependant, nous devrions pas utiliser ces solutions de manière excessive car si l’entrée est grande, cela pourrait consommer beaucoup de nos ressources, en particulier RAM. Au contraire, vous pouvez les accéder ligne par ligne avec les fonctions CSVRead ou tout le fichier avec la fonction StringFromFile.
Exemples de fonction du fichier d’entrée:
Fonction | Exemple | Résultat attendu |
---|---|---|
StringFromFile | ${__StringFromFile(file.txt,RowAsString,,)} | Lit le fichier file.txt et sauvegarde la première ligne dans la variable RowAsString, incrémentée par itération |
FileToString | ${__FileToString(filex.txt,FileAsString,,)} | Lit le fichier file.txt et sauvegarde son contenu entier dans la variable FileAsString |
CSVRead | ${__CSVRead(file.csv,0)} | Retourne la colonne 0 du premier ligne de la file file.csv, incrémentée par itération |
XPath | ${__XPath(file.xml,..//[@id=book]/div/a)} | Retourne le valeur de l’évaluation Xpath dans le fichier file.xml |
StringToFile | ${__StringToFile(file.out,“Hello World”)} | Écrit “Hello World” à la file file.out, variables peuvent aussi être écrits |
Calculations Mathématiques #
Les calculs mathématiques ou des valeurs aléatoires sont souvent nécessaires pour notre logique métier. Par exemple, imaginez le nombre de billets de avion ou de billets de concert que nous allons acheter. Cela pourrait facilement être résolu en générant une valeur aléatoire entre 1 et 10. Cependant, cette fonction a ses limites ; je ne recommanderais pas du tout d’utiliser cela pour générer un numéro de carte de crédit de 16 chiffres. Il existe d’autres fonctions qui le feront beaucoup plus facilement et efficacement, comme RandomString.
Si vous travaillez avec des dates, ou un jour de calculer une date dans le futur, mais à l’intérieur d’un intervalle de temps, la fonction RandomDate est la solution idéale. Personnellement, je l’utilise en conjonction avec la fonction timeShift pour calculer une date au-delà de 10 à 60 jours dans le futur, et cela se présente quelque chose comme ça.
${__RandomDate(MM/dd/YYYY,${__timeShift(MM/dd/YYYY,,P10D,,)},${__timeShift(MM/dd/YYYY,,P60D,,)},,)}
De plus, si vous devez suivre le nombre d’itérations ou des demandes pour un service ou produit spécifique, la fonction counter pourrait être utilisée dans la requête concernant cela pour garder une comptabilisation séquentielle de l’apparition ou des appels. Cette variable pouvait grandir par thread ou groupe de threads selon nos besoins.
Exemples de fonctions de calcul:
Fonction | Exemple | Résultat attendu |
---|---|---|
compteur | ${__counter(TRUE,C1)} | Execution counter par thread |
compteur | ${__counter(FALSE,C2)} | Execution counter par groupe de threads, optionnel par définition |
digest | ${__digest(MD5,Test1234,,,)} | Cryptage du texte “Test1234” à l’aide de MD5 |
digest | ${__digest(SHA-256,Test1234,mysalt,,)} | Cryptage du texte “Test1234” à l’aide de SHA-256 avec une salade |
somme entière | ${__intSum(10,20,IntSum)} | Affiche la somme de deux entiers, également enregistre le résultat dans la variable IntSum |
somme longue | ${__longSum(65535,65535,LongSum)} | Affiche la somme de deux entiers, également enregistre le résultat dans la variable LongSum |
date aléatoire | ${__RandomDate(,,2021-01-01,,)} | Génère une date aléatoire entre aujourd’hui et 2021-01-01 |
choix aléatoire | ${__RandomFromMultipleVars(Var1|Var2,)} | Choisit un variable aléatoire et affiche son résultat |
chaîne aléatoire | ${__RandomString(16,1234567890,)} | Génère une chaîne de 16 caractères, avec un valeur aléatoire choisie à chaque position |
chaîne aléatoire | ${__RandomString(16,abcdefghijkl,)} | Génère une chaîne de 16 caractères, avec un valeur aléatoire choisie à chaque position |
UUID | ${__UUID()} | Génère un UUID aléatoire de 16 octets ou 128 bits |
Nous incluons également des images de l’exemple et vous pouvez télécharger le fichier ci-dessous:
Le script JMeter avec des exemples de fonctions calculatoires ( https://github.com/daeep/JMeter/blob/master/JMeter_Functions/Calculation-functions.jmx) nécessite Java 1.8+, JMeter 5+, et les extensions JMeter.