JMeter循环变量

时间:2012-02-20 23:24:40

标签: jmeter

我在Jmeter(2.5.1)中有测试用例 我需要定义一个变量,然后在while循环中更改它的值,基本上是:

isQuest = true;
while(${isQuest}){
     Http Sampler
         Reg Exp Extractor -> set the isQuest based on the result
}

因为JMeter在开始时将用户定义的变量加载到内存中,所以它不允许我为内存中的变量分配另一个值。

克服这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用jmeter属性而不是通过jmeter functions或beanshell代码访问的变量:

${__P(whileCondition,)}
${__setProperty(whileCondition,TRUE,)}
${__BeanShell(props.get("whileCondition")}
${__BeanShell(props.set("whileCondition")}

您可以尝试使用以下结构:

Thread Group
    HTTP Request
    //set-found-condition
    ${__setProperty(txtFound,FALSE,)}
    While Controller
    // invert value in condition - will be executed while txtFound == FALSE
    Condition = ${__BeanShell(!props.get("txtFound")}
        . . .
        [execute your test logic here]
        . . .
        YOUR HTTP Request
            Response Assertion
            // set your text assertion here
            // this will results in ${JMeterThread.last_sample_ok} = TRUE if text found
        IF Controller    --FOUND
        // if text found set separate variable or property - e.g. ${txtFound} - into TRUE
        Condition = ${JMeterThread.last_sample_ok}
            HTTP Request 
            //set-found-condition
            ${__setProperty(txtFound,TRUE,)}  // this will be inverted to FALSE in the next WHILE cycle's condition, WHILE cycle will be exited
        . . .

我认为您也可以轻松地使用附加到您的HTTP请求的BSF或BeanShell PostProcessor将txtFound属性设置为TRUE,而不是使用IF进行繁琐的构造。

答案 1 :(得分:0)

不,您可以在运行时为用户定义的变量赋值。如果您使用BeanShell PreProcessor,vars.put("variablename", "variablevalue");