变量比较失败测试(JSR223 后处理器)/数据类型错误
Fail test on variables comparison (JSR223 PostProcessor) / Error in data types
如何比较条件“else if(plus == 4){”中“plus”的值
动作发生在“Logic Controller”→“While Controller”中
最初,值“plus”取自“User Defined Variables”。 Jmeter变量“${plus}”会被覆盖,直到“plus”的值=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: '{\n\t\n\telse' @ 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: '{\n\t\n\telse' @ 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[=11=]0(AstBuilder.java:341) ~[groovy-3.0.7.jar:3.0.7]
at org.apache.groovy.parser.antlr4.AstBuilder.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]
if (plus == 4) {
行 中不需要此 else
关键字
} else if (vars.get("payment_verification").equals("NOT_FOUND"){
行 中缺少右括号
- 像
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);
}
您可以为 developing/testing 您的 Groovy 脚本使用像 Intellij IDEA 这样的 IDE。
也有 vars.getObject()
and vars.putObject()
functions, this way you can avoid conversion of strings to integers and vice versa. See Top 8 JMeter Java Classes You Should Be Using with Groovy 文章了解更多关于这个和其他 JMeter API 速记的详细信息。
如何比较条件“else if(plus == 4){”中“plus”的值
动作发生在“Logic Controller”→“While Controller”中
最初,值“plus”取自“User Defined Variables”。 Jmeter变量“${plus}”会被覆盖,直到“plus”的值=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: '{\n\t\n\telse' @ 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: '{\n\t\n\telse' @ 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[=11=]0(AstBuilder.java:341) ~[groovy-3.0.7.jar:3.0.7]
at org.apache.groovy.parser.antlr4.AstBuilder.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]
if (plus == 4) {
行 中不需要此 } else if (vars.get("payment_verification").equals("NOT_FOUND"){
行 中缺少右括号
- 像
log.info(number);
这样的行也会失败,因为你只能打印字符串,需要将它们更改为像log.info(number as String)
这样的东西
else
关键字
建议的代码修复:
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);
}
您可以为 developing/testing 您的 Groovy 脚本使用像 Intellij IDEA 这样的 IDE。
也有 vars.getObject()
and vars.putObject()
functions, this way you can avoid conversion of strings to integers and vice versa. See Top 8 JMeter Java Classes You Should Be Using with Groovy 文章了解更多关于这个和其他 JMeter API 速记的详细信息。