Jmeter JSR223脚本、JSR223后处理器中存在问题:javax.script.ScriptException

Jmeter JSR223脚本、JSR223后处理器中存在问题:javax.script.ScriptException,jmeter,scripting-language,jsr223,Jmeter,Scripting Language,Jsr223,我使用的是Jmeter 5.0,我在JSR223后处理器中编写了一段java代码。代码如下- import java.util.Map; import java.util.HashMap; Map gamePlayHistoryMap = new HashMap(); gamePlayHistoryMap.put(${playerId}, ${GameplayHistoryId}); props.put("GamePlayHistoryMap", gamePlayHistoryMap);

我使用的是Jmeter 5.0,我在JSR223后处理器中编写了一段java代码。代码如下-

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);
然而,当我执行测试计划时,在控制台中我得到以下错误-

javax.script.ScriptException:在文件中:内联求值:
import java.util.Map;导入java.util.HashMap;Map gamePlayHistoryMap=新H…“”在第6行第23列遇到“(107,)”。
在内联计算中:
import java.util.Map;导入java.util.HashMap;Map gamePlayHistoryMap=新H…“”在第6行


有人能帮我指出哪里出了问题吗?

不要在JSR223脚本中使用
${}
,而是使用
vars.get(“”)来获取变量

gamePlayHistoryMap.put(vars.get("playerId"), vars.get("GameplayHistoryId"));
似乎
GameplayHistoryId
是空的,在这种情况下,在
JSONExtractor
中添加默认值或失败测试

请参阅JMeter的脚本编写最佳实践:

在这种情况下,请确保脚本不使用任何使用
${varName}
的变量,因为缓存将只获取
${varName}
的第一个值。而是使用:
vars.get(“varName”)

  • ,查看您的异常详细信息,您使用的似乎是
    java
    ,它不是真正的java,它已经存在,您必须坚持使用Java5语法
  • 不要内联到脚本中,因为它们可能会被解析为导致脚本失败的内容,在Groovy中,它们与GString模板和编译缓存功能冲突。使用类的
    vars
    速记来读取现有变量值并创建新变量值,即替换此行:

    gamePlayHistoryMap.put(${playerId}, ${GameplayHistoryId});
    
    关于这一点:

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

  • 缺少映射键/值定义

    Map <String, String> gamePlayHistoryMap = new HashMap<>();
    gamePlayHistoryMap.put(${playerId}, ${GameplayHistoryId});
    
    Map gamePlayHistoryMap=newhashmap();
    
    gamePlayHistoryMap.put(${playerId},${GameplayHistoryId});
    不确定以下问题的答案:


    不要在JSR223脚本中使用${},而是使用vars.get(“”)


    我不确定这和它有什么关系。

    ${playerId},${GameplayHistoryId},${PayLevelDetails}-我使用JSONExtractorDon提取的这些值在JSR223脚本中不使用${},而是使用vars.get(“”)来获取变量-为什么?@AritroSen请参阅JMeter针对JSR223的最佳实践:好的。还有一个问题-我在一个线程中有3个JsonExtractor。如何使用从第一个到第三个中提取的值?@AritroSen请提出一个新问题,并提供相关细节和示例我理解JSR223脚本部分。如何在后续的线程中使用这些道具来提取这个映射的值——我已经这样编码了——import java.util.map;导入java.util.HashMap;Map gameTemplateIdMap=props.get(“GamePlayHistoryMap”);映射payLevelDetailsMap=props.get(“payLevelDetailsMap”);这是正确的方法吗?