Установите переменную JMter с заводной коллекцией (JSR223 PostProcessor) - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь установить переменную в 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)

1 Ответ

0 голосов
/ 11 октября 2019

Строки 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, поскольку он будет инициализировать значения перед выполнением сценария, а не как ожидалось

...