Я пытаюсь установить переменную в JMter со значением в списке, который у меня есть в процессоре JSR223 (Groovy). Для этого я использую метод vars.putObject
, но когда я пытаюсь использовать эту переменную в контроллере ForEach, цикл не выполняется.
Мой PostProcessor имеет следующий поток:
- Получить список строк, которые были сгенерированы с помощью
Regular Expression Extractor
- Создать список с допустимыми значениями дляtest (отфильтровать некоторые значения)
- Добавить результат в переменную 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)