json - 如何使用jmeter中的json提取器从加密解密的响应中提取值
问题描述
我已经尝试过使用下面的代码,但它显示的原因是:
javax.script.ScriptException: java.lang.NullPointerException: Cannot invoke method getValue() on null object
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324) ~[groovy-all-2.4.16.jar:2.4.16]
at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.16.jar:2.4.16]
at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_202]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:223) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:44) [ApacheJMeter_components.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:925) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:564) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.1.1 r1855137]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_202]
Caused by: java.lang.NullPointerException: Cannot invoke method setValue() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91) ~[groovy-all-2.4.16.jar:2.4.16]
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:47) ~[groovy-all-2.4.16.jar:2.4.16]
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) ~[groovy-all-2.4.16.jar:2.4.16]
at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:34) ~[groovy-all-2.4.16.jar:2.4.16]
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) ~[groovy-all-2.4.16.jar:2.4.16]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) ~[groovy-all-2.4.16.jar:2.4.16]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128) ~[groovy-all-2.4.16.jar:2.4.16]
at org.purestudy.encryption.Script77.run(Script77.groovy:32) ~[?:?]
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:321) ~[groovy-all-2.4.16.jar:2.4.16]
java.lang.NullPointerException: Cannot invoke method setValue() on null object
这是我已经实现的代码,但它只接受在 bodydata 中使用 jsr223 预处理器传递和加密的参数,但不能用于我们无法应用预处理器的参数&这是写的 jsr223 后处理器
**String encryptedText= "${ENCRYPTEDResponseofprevREQ}";
log.info(encryptedText);
String decryptedText = new OpenSSLEncryptDecrypt().decrypt(encryptedText);
log.info(decryptedText);
ctx.getCurrentSampler().getArguments().getArgument(0).getValue(decryptedText);
vars.put("variable",decryptedText);
def my_var1 = vars.get("variable");
log.info(my_var1);
ctx.getCurrentSampler().getArguments().getArgument(0).setValue(my_var1);**
解决方案
这一行:
ctx.getCurrentSampler().getArguments().getArgument(0).getValue(decryptedText);
导致错误,因为ctx.getCurrentSampler().getArguments().getArgument(0)
返回null并且您试图getValue()
在 null 对象上调用函数。
演示:
在不知道您要达到的目标的情况下很难说如何解决问题,但是有两件事是显而易见的:
- 您的 HTTP 请求采样器没有参数 - 这就是您收到此错误的原因
- 没有这样的函数
getValue(String)
,该函数getValue()
不带参数
有关JMeter 中 Groovy 脚本的更多信息,请参阅Apache Groovy - 为什么以及如何使用它一文
推荐阅读
- c# - 在库 Graph API 中搜索文件
- java - 单击时如何将数字增加1
- python-3.x - 计算子树 - 优化
- django - 如何在 django 中保存自定义 ModelForm 字段
- python - 如何进行“X 轴”或更多可视化?
- javascript - react中如何用钩子替换基于类的组件
- python - 错误:点:无法打开 ast.dot:没有这样的文件或目录 ...同时使用 python 使用 graphviz 创建 pdf 文件
- reactjs - 如何在饼图中添加工具提示?
- javascript - 迭代步数大于 1 时匹配 js 中的迭代值
- android - Android/sqlite - 带有用户输入的 ContentResolver 查询