【发布时间】:2019-10-11 13:16:04
【问题描述】:
我正在尝试使用我在 JSR223 处理器 (Groovy) 中的列表中的值在 JMter 中设置一个变量。为此,我使用vars.putObject 方法,但是当我尝试在 ForEach 控制器中使用此变量时,循环不会执行。
我的后处理器有以下流程:
- 获取由
Regular Expression Extractor生成的字符串列表 - 为测试创建一个包含有效值的列表(过滤一些值)
- 将结果添加到 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
}
}
我试过了(就像普通的提取器一样):
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)
【问题讨论】:
-
您能否展示一下您是如何做到这一点的:
when I try to use this variable in a Loop Controller the loop doesn't execute. -
在每个控制器(字段
Input variable prefix)我输入ValidAssetIds。我在vars.putObject使用的名字