JSR223脚本,JSR223 PostProcessor中的问题:javax.script.ScriptException

时间:2019-03-04 06:47:54

标签: jmeter scripting-language jsr223

我正在使用Jmeter 5.0,其中我在JSR223 PostProcessor中编写了一段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; import java.util.HashMap; Map gamePlayHistoryMap = new H . . . '' Encountered "( 107 , )" at line 6, column 23. in inline evaluation of: import java.util.Map;导入java.util.HashMap;映射gamePlayHistoryMap = new H。 。 。 ”在第6行

有人可以帮助我指出我可能在哪里出问题了吗?

3 个答案:

答案 0 :(得分:1)

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

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

似乎GameplayHistoryId是空的,在这种情况下,请在JSONExtractor中添加默认值或失败测试

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

  

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

答案 1 :(得分:1)

  1. Since JMeter 3.1 you should be using groovy language for scripting,查看您的异常详细信息,似乎您正在使用的java不是真正的Java,它是Beanshell interpreter,具有worse performance comparing to Groovy,您必须坚持Java 5语法。
  2. 不要将JMeter Functions and/or Variables内联到脚本中,因为它们可能会解析为导致脚本失败的内容,并且在Groovy的情况下,它们与GString模板和编译缓存功能发生冲突。使用JMeterVariables类的vars速记来读取现有变量值并创建新的变量值,即替换此行:

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

    与此:

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

答案 2 :(得分:0)

您缺少Map键/值的定义。

0b1010010100b11000101101000100101000110

不确定答案:

  

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

不确定是否与此有关。