Jmeter -JSR 223后处理器对以下ForEach迭代进行操作

uplii1fm  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(160)

问题JSR223转移了它的处理。在第一次ForEach迭代中,我期望JSR223生成一个给定值,但是我在接下来的迭代的调试后处理器中看到了该期望值。为什么会发生这种情况?
场景我有一组公司(线程组)。每个公司有一组商店(ForEach #1)。每个商店有一组“位置组”(ForEach #2)。每个位置组有自己的类型。

Scenario outline
位置组类型是一个数值,从1到12。假设ForEach控制器迭代这些位置组时生成以下类型序列:6、9、5、11、7、12、10和JSR223的代码如下:

if (vars.get("locationGroupType") == "6"){
    log.info("Store:" + vars.get("anUnit"))
    log.info("location group ID:" + vars.get("aLocationGroupId"))
    vars.put("aux", "SIX")
    log.info("location group type:" + vars.get("locationGroupType"))
 }
 if (vars.get("locationGroupType") == "9"){
    log.info("Store:" + vars.get("anUnit"))
    log.info("location group ID:" + vars.get("aLocationGroupId"))
    vars.put("aux", "NINE")
    log.info("location group type:" + vars.get("locationGroupType"))
 }

我希望aux在第一次迭代时为6,然后在第二次迭代时为9。

输出这是JSR223到控制台的输出:Console output您可以看到存储区292的位置组ID为3803,其类型值为6。但此信息不正确。

位置组id 3803的请求输出,其类型值为9:location group 3803 response调试后处理器转储,我可以看到'aux'设置为SIX:debug postprocessor
奇怪的是,对3803的前一个请求是类型值为6的请求,而这正是我期望aux为SIX的地方:Response for 3635 where the type value 6 is found并且3635的调试后处理器显示“aux”为空:enter image description here

bxgwgixi

bxgwgixi1#

如果计划使用所有这些值:6, 9, 5, 11, 7, 12, 10它是better,用于switch语句,而不是多个if。
这是不是一个复制粘贴问题,你的代码不应该看起来像:

switch (vars.get(('locationGroupType'))) {
    case '6':
        log.info("Store:" + vars.get("anUnit"))
        log.info("location group ID:" + vars.get("aLocationGroupId"))
        vars.put("aux", "SIX")
        log.info("location group type:" + vars.get("locationGroupType"))
        break
    case '9':
        log.info("Store:" + vars.get("anUnit"))
        log.info("location group ID:" + vars.get("aLocationGroupId"))
        vars.put("aux", "NINE")
        log.info("location group type:" + vars.get("locationGroupType"))
        break
    default:
        log.info('default branch')
        break
}

否则我可以想到以下几个原因:

  • JMeter后处理器的放置很重要,例如,如果您在JSR223后处理器之前*****有调试后处理器,则直到下一次迭代之前,您将看不到在JSR223后处理器中生成的变量
  • JSR223预处理器在其作用域中的每个采样器之后执行,因此请确保正确放置它,并且只在它应该触发的地方触发它。

关于JMeter中Groovy脚本的更多信息:Apache Groovy: What Is Groovy Used For?

相关问题