javax.script.ScriptException: ReferenceError: "window" is not defined in security.js at line number 10

2022-12-31,,,

使用jmeter执行加密登录接口的测试遇到的问题。


问题记录:

今天使用jmeter执行加密登录接口的测试,因为测试环境的应用包是以前的老版本(可能有两年了),所以需要替换加密文件:security.js

//jmeter JSR223 预处理程序
load("security.js");
//pwd1 = vars.get("passwd");
function RSA(){
var exponent = "10001";
var modulus = vars.get("publicKeyModulus");
var passwd = "1";
RSAUtils.setMaxDigits(200);
var publicKey = new RSAUtils.getKeyPair(exponent,"",modulus);
return RSAUtils.encryptedString(publicKey,passwd);
}
var data = RSA();
vars.put("Password",data);

将测试环境登录应用中的security.js拷贝出来,放入jmeter的bin目录下,重启jmeter后执行登录接口测试

报错提示:javax.script.ScriptException: ReferenceError: "window" is not defined in security.js at line number 10。具体如下:

2022-09-21 17:14:39,270 ERROR o.a.j.m.JSR223PreProcessor: Problem in JSR223 script, JSR223 预处理程序
javax.script.ScriptException: ReferenceError: "window" is not defined in security.js at line number 10
at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:454) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:406) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:402) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155) ~[nashorn.jar:?]
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) ~[?:1.8.0_151]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:219) ~[ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:45) [ApacheJMeter_components.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:965) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:549) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) [ApacheJMeter_core.jar:5.4.1]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
Caused by: jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "window" is not defined
at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291) ~[nashorn.jar:?]
at jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1441) ~[nashorn.jar:?]
at jdk.nashorn.internal.scripts.Script$1427$security.:program(security.js:10) ~[?:?]
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.Context.evaluateSource(Context.java:1222) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.Context.load(Context.java:839) ~[nashorn.jar:?]
at jdk.nashorn.internal.objects.Global.load(Global.java:1545) ~[nashorn.jar:?]
at jdk.nashorn.internal.scripts.Script$1426$\^eval\_.:program(<eval>:1) ~[?:?]
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:449) ~[nashorn.jar:?]
... 11 more

解决办法:

打开security.js,将window修改为this

重启jmeter后,再次执行登录接口测试。测试通过

javax.script.ScriptException: ReferenceError: "window" is not defined in security.js at line number 10的相关教程结束。

《javax.script.ScriptException: ReferenceError: "window" is not defined in security.js at line number 10.doc》

下载本文的Word格式文档,以方便收藏与打印。