Jmeter vars.put ไม่บันทึกตัวแปร (ตัวประมวลผลล่วงหน้า jsr223 groovy)

ฉันต้องการจัดเก็บตัวแปรในรูปแบบ Goovy แล้วใช้ในภายหลัง

ฉันได้รับค่าเริ่มต้นจาก "ตัวแปรที่ผู้ใช้กำหนด" (ซึ่งกำหนดโดย maven)

แต่เมื่อฉันเปลี่ยนมันแล้วใส่มันจะไม่ถูกเก็บไว้อย่างถาวร

ดังนั้นเอฟเฟกต์จึงทำงานดังนี้:

... INFO ...: throughput was: 600
... INFO ...: throughput is now: 720
... INFO ...: throughput is now (get): 720
... INFO ...: throughput is now (get): 720
... INFO ...: throughput is now (get): 600
... INFO ...: throughput is now (get): 600

สคริปต์:

org.apache.jmeter.testelement.property.JMeterProperty;


int troughtputEnabled = Integer.parseInt(vars.get("enableTroughput"));
if(troughtputEnabled == 1){
    int req = Integer.parseInt(vars.get("idCounter"));
    int troughput = Integer.parseInt(vars.get("throughput"));
    if (req%100 == 0){
        log.info("throughput was: " +  troughput);
        troughput += 120;
        log.info("throughput is now: " +  troughput);
        vars.put("throughput",troughput+"");
        log.info("throughput is now (get): " +  vars.get("throughput"));
    }
    log.info("throughput is now (get): " +  vars.get("throughput"));

}

ใครสามารถเห็นสิ่งที่ฉันทำผิดที่นี่ (บันทึกมีไว้เพื่อการดีบักเท่านั้น)


person Robert Stevens    schedule 17.07.2017    source แหล่งที่มา


คำตอบ (2)


ดังนั้นฉันจึงทำให้มันใช้งานได้:

import org.apache.jmeter.testelement.property.JMeterProperty;
import org.apache.jmeter.util.JMeterUtils;

int troughtputEnabled = Integer.parseInt(vars.get("enableTroughput"));
if(troughtputEnabled == 1){
    int req = Integer.parseInt(vars.get("idCounter"));
    int troughput = Integer.parseInt(vars.get("throughput"));
    if (req%100 == 0){
        log.info("throughput was: " +  troughput);
        troughput += 120;
        log.info("throughput is now: " +  troughput);
        vars.put("throughput",troughput+"");
        log.info("throughput is now (get):---------------- " +  vars.get("throughput"));
        JMeterUtils.setProperty("troughput", troughput +"");

    }
    else
    {
        String tempTroughput = JMeterUtils.getProperty("troughput");
        if (tempTroughput != null && !tempTroughput.equals("")){
            vars.put("throughput",tempTroughput+"");
        }

    }
    log.info("throughput is now (get): " +  vars.get("throughput"));

}

ดูเหมือนว่าปัญหาจะเกิดขึ้นว่า vars.put ใช้งานได้กับเธรดปัจจุบันเท่านั้น

person Robert Stevens    schedule 17.07.2017

การวนซ้ำครั้งแรกที่คุณได้รับภายใน if (req%100 == 0) ดังนั้นตัวแปรโลคัลจะเพิ่มขึ้น 120 วินาที การวนซ้ำไม่เข้าไปข้างใน if (req%100 == 0) ดังนั้นให้พิมพ์ vars.get("throughput") ซึ่งยังคงอยู่ 600

หากคุณต้องการให้ตัวแปรอัปเดต เพียงแค่ใส่ตัวแปรนั้นไว้หลัง troughput += 120;:

vars.put("throughput",   String.valueOf( troughput));
person user7294900    schedule 17.07.2017
comment
เปลี่ยนเป็น vars.put(throughput, String.valueOf( troughput)); - person user7294900; 17.07.2017