3
votes

Problème dans le script JSR223, PostProcessor JSR223: javax.script.ScriptException

J'utilise Jmeter 5.0 où j'ai un morceau de code java écrit dans un PostProcessor JSR223. Le code est le suivant -

import java.util.Map;
import java.util.HashMap;


Map gamePlayHistoryMap = new HashMap();
gamePlayHistoryMap.put(${playerId}, ${GameplayHistoryId});
props.put("GamePlayHistoryMap", gamePlayHistoryMap);

Map payLevelDetailsMap = new HashMap();
payLevelDetailsMap.put(${playerId}, ${PayLevelDetails});
props.put("PayLevelDetailsMap", payLevelDetailsMap);

Cependant, lorsque j'exécute le plan de test, dans la console j'obtiens l'erreur suivante -

javax.script.ScriptException: Dans le fichier: évaluation en ligne de: import java.util.Map; import java.util.HashMap; Carte gamePlayHistoryMap = nouveau H. . . '' Rencontré "(107,)" à la ligne 6, colonne 23. dans l'évaluation en ligne de: import java.util.Map; import java.util.HashMap; Carte gamePlayHistoryMap = nouveau H. . . '' à la ligne numéro 6

Quelqu'un peut-il m'aider à indiquer où je pourrais avoir mal tourné?


1 commentaires

$ {playerId}, $ {GameplayHistoryId}, $ {PayLevelDetails} - Ces valeurs que j'extraction à l'aide de JSONExtractor


3 Réponses :


2
votes

N'utilisez pas $ {} dans les scripts JSR223, utilisez à la place vars.get ("") pour obtenir les variables

gamePlayHistoryMap.put(vars.get("playerId"), vars.get("GameplayHistoryId"));

Il semble que GameplayHistoryId soit vide, dans ce cas, ajoutez la valeur par défaut dans JSONExtractor ou échouez le test

Voir les meilleures pratiques de JMeter pour JSR223 création de scripts:

Dans ce cas, assurez-vous que le script n'utilise aucune variable utilisant $ {varName} car la mise en cache prendrait uniquement la première valeur de $ {varName} . Utilisez plutôt: vars.get("varName")


6 commentaires

N'utilisez pas $ {} dans le script JSR223, utilisez plutôt vars.get ("") pour obtenir des variables - pourquoi?


@AritroSen voir les meilleures pratiques de JMeter pour JSR223: jmeter.apache.org/usermanual/best -practices.html # jsr223


D'accord. 1 Plus Question - J'ai comme 3 JsonExtractor dans un seul thread. Comment utiliser la valeur extraite du premier au troisième?


@AritroSen Veuillez poser une nouvelle question avec des détails pertinents et un exemple


J'ai compris la partie scripting JSR223. Comment utiliser les accessoires pour extraire les valeurs de cette carte dans mon thread suivant - j'ai codé comme ceci - import java.util.Map; import java.util.HashMap; Carte gameTemplateIdMap = props.get ("GamePlayHistoryMap"); Carte payLevelDetailsMap = props.get ("PayLevelDetailsMap"); est-ce la bonne façon?


@AritroSen pour prendre en charge différents threads, vous devrez mettre à jour la propriété JMeter en tant que props.put , mais vous devriez poser une autre question spécifique pour une réponse spécifique



1
votes
  1. Depuis JMeter 3.1, vous devriez utiliser un langage groovy pour les scripts , en regardant dans les détails de votre exception, il semble que vous utilisez java qui n'est pas du vrai Java, c'est L'interpréteur Beanshell qui a des performances moins bonnes que Groovy et vous avez pour s'en tenir à la syntaxe Java 5.
  2. Ne pas incorporer les Fonctions et / ou variables JMeter dans les scripts car ils peuvent être résolus en quelque chose provoquant des échecs de script et en cas de Groovy, ils sont en conflit avec les modèles GString et la fonctionnalité de mise en cache de compilation. Utilisez le raccourci vars pour JMeterVariables une classe> pour lire les valeurs des variables existantes et en créer de nouvelles, c'est-à-dire remplacer cette ligne:

    gamePlayHistoryMap.put(vars.get('playerId'), vars.get('GameplayHistoryId'));
    

    avec celui-ci:

    gamePlayHistoryMap.put(${playerId}, ${GameplayHistoryId});
    

0 commentaires

0
votes

Il vous manque la définition de clé / valeur de la carte.

Map <String, String> gamePlayHistoryMap = new HashMap<>();
gamePlayHistoryMap.put(${playerId}, ${GameplayHistoryId});

Je ne suis pas sûr de la réponse de:

N'utilisez pas $ {} dans les scripts JSR223, utilisez à la place vars.get ("")

Je ne suis pas sûr que cela ait quoi que ce soit à voir avec cela.


0 commentaires