设置一个带有时髦集合的 JMter 变量(JSR223 PostProcessor)



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

我的后处理器具有以程:

  • 获取由Regular Expression Extractor生成的字符串的列表
  • 使用测试的有效值创建列表(筛选一些值(
  • 将结果添加到 JMter 变量vars.putObject

import 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
}
}

我试过(像常规提取器(:

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)

Concat 字符串作为"+ (i+1) + "

vars.putObject("ValidCatalogAssetIds_"+ (i+1) + "_g",1) 
vars.putObject("ValidAssetIds_"+ (i+1) + "_g0",""id":"${validAssets[i]}"")
vars.putObject("ValiAssetIds_"+ (i+1) + "_g1",validAssets[i])

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

最新更新