我在Jmeter(2.5.1)中有测试用例 我需要定义一个变量,然后在while循环中更改它的值,基本上是:
isQuest = true;
while(${isQuest}){
Http Sampler
Reg Exp Extractor -> set the isQuest based on the result
}
因为JMeter在开始时将用户定义的变量加载到内存中,所以它不允许我为内存中的变量分配另一个值。
克服这个问题的最佳方法是什么?
答案 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");