【问题标题】:How to extract a value from encrypted-decrypted reponse using json extractor in jmeter如何使用jmeter中的json提取器从加密解密的响应中提取值
【发布时间】:2021-07-29 05:57:01
【问题描述】:

我已经尝试过使用下面的代码,但它显示的原因是:

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);**

【问题讨论】:

    标签: json jmeter base64 decode jmeter-5.0


    【解决方案1】:

    这一行:

    ctx.getCurrentSampler().getArguments().getArgument(0).getValue(decryptedText);
    

    导致错误是因为 ctx.getCurrentSampler().getArguments().getArgument(0) 返回 null 并且您尝试在空对象上调用 getValue() 函数。

    演示:

    如果不知道您要达到什么目标,很难说如何解决问题,但有两件事是显而易见的:

    1. 您的 HTTP 请求采样器没有参数 - 这就是您收到此错误的原因
    2. 没有这样的函数getValue(String),函数getValue() takes no parameters

    有关 JMeter 中 Groovy 脚本的更多信息,请参阅 Apache Groovy - Why and How You Should Use It 文章

    【讨论】:

      【解决方案2】:

      是的,在 http 请求中没有参数我需要代码从该采样器中提取值,该采样器被加密以存储在下一个采样器中 Dmitri T

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2020-11-28
        相关资源
        最近更新 更多