使用groovy集合(JSR223后处理器)设置JMter变量

使用groovy集合(JSR223后处理器)设置JMter变量,groovy,jmeter,Groovy,Jmeter,我试图在JMter中设置一个变量,该变量的值位于JSR223处理器(Groovy)中的列表中。为此,我使用了方法vars.putObject,但当我尝试在ForEach控制器中使用此变量时,循环不会执行 我的后处理器具有以下流程: 获取由正则表达式提取器生成的字符串列表 创建一个包含测试有效值的列表(筛选一些值) 将结果添加到JMter变量vars.putObject 导入org.apache.jmeter.services.FileServer int requestAssetsCount

我试图在JMter中设置一个变量,该变量的值位于JSR223处理器(Groovy)中的列表中。为此,我使用了方法
vars.putObject
,但当我尝试在ForEach控制器中使用此变量时,循环不会执行

我的后处理器具有以下流程:

  • 获取由
    正则表达式提取器生成的字符串列表
  • 创建一个包含测试有效值的列表(筛选一些值)
  • 将结果添加到JMter变量
    vars.putObject
导入org.apache.jmeter.services.FileServer

int requestAssetsCount = vars.get("CatalogAssetIds_matchNr").toInteger()
int maxAssetsNumbers = vars.get("NumberAssets").toInteger()
List<String> validAssets = new ArrayList<String>()

def assetsBlackListCsv = FileServer.getFileServer().getBaseDir() + "\\\assets-blacklist.csv"
File assetsBlackListFile = new File(assetsBlackListCsv)
List<String> assetsBlackList = new ArrayList<String>()

log.info("Loading assets black list. File: ${assetsBlackListCsv}")
if (assetsBlackListFile.exists()) {
    assetsBlackListFile.eachLine { line ->
        assetsBlackList.add(line)
    }
}
else {
    log.info("Black list file doesn't exist. File: ${assetsBlackListCsv}")
}

log.info("Verifying valid assets")
for (def i = 1; i < requestAssetsCount; i++) {
    def assetId = vars.get("CatalogAssetIds_${i}_g1")
    if (!assetsBlackList.contains(assetId)) {
        validAssets.add(assetId)
    }
    else {  
        log.info("Found a blacklisted asset. Skipping it. Asset ID: ${assetId}")    
    }
    if (validAssets.size() >= maxAssetsNumbers) {
        break
    }
}

Concat字符串为
“+(i+1)+”

不要在JSR223脚本中使用
${}
语法,因为它将在脚本执行之前初始化值,而不是像预期的那样将字符串转换为
“+(i+1)+”


不要在JSR223脚本中使用
${}
语法,因为它将在脚本执行之前初始化值,而不是像预期的那样

您可以演示如何执行此操作:
当我尝试在循环控制器中使用此变量时,循环不会执行。
对于每个控制器(字段
输入变量前缀
)我把
ValidAssetIds
。我在
vars.putObject
中使用的名称,您能演示一下如何操作:
当我尝试在循环控制器中使用此变量时,循环不会执行。
对于每个控制器(字段
输入变量前缀
),我将
ValidAssetIds
放入。我在
vars.putObject
log.info("Storing valid assets list")
vars.putObject("ValidCatalogAssetIds_matchNr",validAssets.size())
for(def i = 0; i < validAssets.size(); i++) {
    vars.putObject("ValidAssetIds_${i+1}_g",1)
    vars.putObject("ValidAssetIds_${i+1}_g0","\"id\":\"${validAssets[i]}\"")
    vars.putObject("ValidAssetIds_${i+1}_g1",validAssets[i])
}
log.info("Storing valid assets list")
vars.putObject("ValidAssetIds",validAssets)
vars.putObject("ValidCatalogAssetIds_"+ (i+1) + "_g",1) 
vars.putObject("ValidAssetIds_"+ (i+1) + "_g0","\"id\":\"${validAssets[i]}\"")

vars.putObject("ValiAssetIds_"+ (i+1) + "_g1",validAssets[i])