JMeter中如何断言ActiveMQ队列计数在迭代中较前一次递增?
如何在JMeter中断言当前迭代的ActiveMQ队列计数大于前一次迭代值?
这个需求其实很好实现,核心就是要把上一次迭代获取到的队列计数持久化存储(毕竟JMeter的普通变量在迭代过程中会被直接覆盖),然后在当前迭代里取出这个值和最新的计数做对比就行。下面是具体的实现步骤:
步骤1:存储上一次迭代的队列计数
在你提取到outQueueCount之后,需要把当前值保存为JMeter的全局属性(全局属性不会被迭代覆盖,甚至跨线程组都能访问)。
在Loop Controller内部,添加一个JSR223 PostProcessor,放在你的outQueueCount提取元件(比如正则表达式提取器)之后,然后在脚本框中输入以下Groovy代码:
// 从JMeter变量中获取当前提取的队列计数,转成整数类型 def currentCount = vars.get("outQueueCount") as int // 将当前计数存入全局属性,命名为previousQueueCount,供下一次迭代使用 props.put("previousQueueCount", currentCount.toString())
步骤2:添加断言逻辑对比两次计数
接下来添加JSR223 Assertion,同样放在Loop Controller内部,位置要在提取元件之后、上面的PostProcessor之前,脚本如下:
// 获取当前迭代的队列计数 def currentCount = vars.get("outQueueCount") as int // 从全局属性中取出上一次迭代的计数 def previousCount = props.get("previousQueueCount") // 第一次迭代时,还没有上一次的计数,直接跳过断言 if (previousCount != null) { def prevCount = previousCount as int // 检查当前计数是否大于前一次,不满足则标记断言失败 if (currentCount <= prevCount) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("断言失败:当前队列计数${currentCount} ≤ 前一次计数${prevCount}") } }
关键注意事项
- 执行顺序很重要:务必确保元件的执行顺序是:GET请求 → 提取
outQueueCount→ JSR223 Assertion → JSR223 PostProcessor - 类型转换校验:如果你的
outQueueCount提取结果可能为空或非数字,可以在代码里加额外的校验逻辑,避免抛出类型转换异常 - 迭代次数适配:因为第一次迭代没有前一次的值,所以断言只会在第2、3、4次迭代中执行,完全符合你Loop Controller运行4次的需求
内容的提问来源于stack exchange,提问作者trial999
相关产品推荐
相关产品推荐

