use jar file + Dynamic values into the loop counter - Jmeter
我想使用以下改进版本:
我如何使用jar文件进入循环计数器-Jmeter
// jar数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
1)以上数据我想"喂" Jmeter电话
我想在执行过程中传递'sourceAccount',而不是将所有值从jar文件中获取为静态值,而不是将其硬编码到jar文件中。
2)我告诉循环计数器用:$ {__ groovy(com.example.TestData.getDeclaredMethods()。size(),)}
3)进入JSR223预处理器的"脚本"区域是这样的:
1 2 3 4 5 6 7 8 9 10 | import com.example.PabBDetailsIncluded; def sourceAccount = vars.get("accountNumberLogger"); def testData = new com.example.PabBDetailsIncluded() def methods = testData.class.getDeclaredMethods(sourceAccount) def payload = org.apache.commons.lang.reflect.MethodUtils.invokeExactMethod(testData, methods[vars.get('__jm__Loop Controller__idx') as int].getName()) sampler.addNonEncodedArgument('',payload,'') sampler.setPostBodyRaw(true) |
我得到的错误是:
2019-11-13 09:55:00,099错误oajmJSR223PreProcessor:JSR223脚本,JSR223 PreProcessor1 javax.script.ScriptException中的问题:groovy.lang.MissingMethodException:无方法签名:静态com.example.PabBDetailsIncluded.getDeclaredMethods()适用对于参数类型:(java.lang.String)值:[5001000001573300]在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320)?[groovy-all-2.4.13.jar:2.4.13 ]在org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72)?[groovy-all-2.4.13.jar:2.4.13]在javax.script.CompiledScript.eval(未知来源)?[ ?:1.8.0_231],位于org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:221)?[ApacheJMeter_core.jar:4.0 r1823414],位于org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java :44)[ApacheJMeter_components.jar:4.0 r1823414],位于org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:849)[Apach eJMeter_core.jar:4.0 r1823414],位于org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:467)[ApacheJMeter_core.jar:4.0 r1823414],位于org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java :416)[org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:250)的[ApacheJMeter_core.jar:4.0 r1823414] [java.lang.Thread.run的[ApacheJMeter_core.jar:4.0 r1823414](未知来源) [?:1.8.0_231]原因:groovy.lang.MissingMethodException:没有方法签名:静态com.example.PabBDetailsIncluded.getDeclaredMethods()适用于参数类型:(java.lang.String)值:[5001000001573300] at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1501)?[groovy-all-2.4.13.jar:2.4.13] at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1487)?[groovy-all -2.4.13.jar:2.4.13]在org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:53)?[groovy-all-2.4.13.jar:2.4.13 ]在org.codehaus.groovy.runtime.callsite.AbstractCallSite上的[groovy-all-2.4.13.jar:2.4.13]在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) .call(AbstractCallSite.java:113)?[groovy-all-2.4.13.jar:2.4.13]在org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)?[groovy- all-2.4.13.jar:2.4.13] at Script26.run(Script26.groovy:13)?[?:?] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317)?[ groovy-all-2.4.13.jar:2.4.13] ...还有9个
如果我使用jar文件中的数据而没有动态值,则一切正常。
任何帮助,将不胜感激。
这与您使用静态函数的原因有所不同,因为静态函数的调用方式有所不同。
而且,现在您需要将参数传递给函数,而我看不到要在哪里传递该参数。
您的代码需要修改为如下所示:
1 2 3 4 |
演示:
参考文献:
- Method.invoke()
- Java:反射API
- Apache Groovy-为什么以及如何使用它