变量比较测试失败(JSR223 PostProcessor) /数据类型错误



如何比较+ "在条件"else if(plus == 4){">

动作发生在"Logic Controller"→"While Controller">

最初,值" + "取自"用户定义变量"。Jmeter变量"${plus}"将被覆盖,直到"+"的值Is = 4

def number = 0;
def plus = vars.get("plus").toInteger();
if (vars.get("payment_verification").equals("NOTPAID")){

else if(plus == 4){
log.error("plus = 4");
} else {
number = 100;
plus++;
vars.put("number", number.toString());
vars.put("plus", plus.toString());
log.info(number);
log.info(plus);
}
} else if (vars.get("payment_verification").equals("COMPLETED")){

number = 50;
vars.put("number", number.toString());

} else if (vars.get("payment_verification").equals("NOT_FOUND"){
log.error("Параметр payment_verification не найден!");
prev.setSuccessful(false);

}

当前错误:

2021-10-19 17:46:32,261 INFO o.a.j.e.StandardJMeterEngine: Running the test!
2021-10-19 17:46:32,261 INFO o.a.j.s.SampleEvent: List of sample_variables: []
2021-10-19 17:46:32,274 INFO o.a.j.g.u.JMeterMenuBar: setRunning(true, *local*)
2021-10-19 17:46:32,341 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : Thread Group
2021-10-19 17:46:32,342 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group Thread Group.
2021-10-19 17:46:32,342 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error
2021-10-19 17:46:32,342 INFO o.a.j.t.ThreadGroup: Starting thread group... number=1 threads=1 ramp-up=1 delayedStart=false
2021-10-19 17:46:32,344 INFO o.a.j.t.ThreadGroup: Started thread group number 1
2021-10-19 17:46:32,344 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
2021-10-19 17:46:32,346 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-1
2021-10-19 17:47:04,841 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 PostProcessor
javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script2719.groovy: 6: Unexpected input: '{ntntelse' @ line 6, column 2.
else if(plus == 4){
^
1 error
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:183) ~[groovy-jsr223-3.0.7.jar:3.0.7]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) ~[ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) [ApacheJMeter_components.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:955) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:573) [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:834) [?:?]
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script2719.groovy: 6: Unexpected input: '{ntntelse' @ line 6, column 2.
else if(plus == 4){
^
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:295) ~[groovy-3.0.7.jar:3.0.7]
at org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:151) ~[groovy-3.0.7.jar:3.0.7]
at org.apache.groovy.parser.antlr4.AstBuilder.collectSyntaxError(AstBuilder.java:4582) ~[groovy-3.0.7.jar:3.0.7]
at org.apache.groovy.parser.antlr4.AstBuilder.access$000(AstBuilder.java:341) ~[groovy-3.0.7.jar:3.0.7]
at org.apache.groovy.parser.antlr4.AstBuilder$1.syntaxError(AstBuilder.java:4597) ~[groovy-3.0.7.jar:3.0.7]
at groovyjarjarantlr4.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:44) ~[groovy-3.0.7.jar:3.0.7]
at groovyjarjarantlr4.v4.runtime.Parser.notifyErrorListeners(Parser.java:543) ~[groovy-3.0.7.jar:3.0.7]
  1. if (plus == 4) {行中不需要else关键字
  2. } else if (vars.get("payment_verification").equals("NOT_FOUND"){行缺少右括号
  3. log.info(number);这样的行也会失败,因为您只能打印字符串,它们需要更改为像log.info(number as String)这样的东西

建议代码修复:

def number = 0;
def plus = vars.get("plus").toInteger();
if (vars.get("payment_verification").equals("NOTPAID")) {
if (plus == 4) {
log.error("plus = 4");
} else {
number = 100;
plus++;
vars.put("number", number.toString());
vars.put("plus", plus.toString());
log.info(number as String);
log.info(plus as String);
}
} else if (vars.get("payment_verification").equals("COMPLETED")) {
number = 50;
vars.put("number", number.toString());
} else if (vars.get("payment_verification").equals("NOT_FOUND")) {
log.error("Параметр payment_verification не найден!");
prev.setSuccessful(false);
}

你可以使用像Intellij IDEA这样的IDE来开发/测试你的Groovy脚本。

还有vars.getObject()vars.putObject()函数,这样可以避免将字符串转换为整数,反之亦然。关于这个和其他JMeter API简写的更多细节,请参阅Groovy中应该使用的8个JMeter Java类。