变量比较失败测试(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]
  1. if (plus == 4) {
  2. 中不需要此 else 关键字
  3. } else if (vars.get("payment_verification").equals("NOT_FOUND"){
  4. 中缺少右括号
  5. log.info(number);这样的行也会失败,因为你只能打印字符串,需要将它们更改为像log.info(number as String)
  6. 这样的东西

建议的代码修复:

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 速记的详细信息。