Необходимо извлечь динамические значения из строкового ответа в Jmeter

Мне нужно извлечь динамическое значение «BSS1,DS1,HYS1,MS1,PTS1,QS1,USG1,YS1,RT10086,RT10081,RT10084,RT10082,OT10076,RT10083,UT10081,RT10085,»
из строкового ответа «ACCOUNT_DETAIL_ACCOUNT_PRODUCT_SERVICES_EDIT_UPDATE_NameSpace.grid.setSelectedKeys(["BSS1","DS1","HYS1","MS1","PTS1","QS1","USG1","YS1","RT10086","RT10081","RT10084","RT10082","OT10076","RT10083","UT10081","RT10085"]);»

Я пробовал использовать экстрактор регулярных выражений:

Regular Expression :Keys\(\[\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\"]\)

template : $1$$2$$3$$4$$5$$6$$7$$8$$9$$10$$11$$12$$13$$14$$15$$16$

Но указанное выше регулярное выражение работает, только если в ответе 16 значений. Если ответ содержит меньшее количество значений, например "ACCOUNT_DETAIL_ACCOUNT_PRODUCT_SERVICES_EDIT_UPDATE_NameSpace.grid.setSelectedKeys(["BSS1","DS1"]);", указанное выше регулярное выражение не работает.

Как я могу извлечь значения из ответа, если общее количество неизвестно? Также необходимо опустить двойные кавычки в ответе.

Есть ли какой-нибудь постпроцессор, с помощью которого можно извлекать динамические значения?

Любая помощь приветствуется.


person Gowri    schedule 25.11.2015    source источник


Ответы (1)


Я считаю, что с некоторыми сценариями будет проще.

  1. Добавьте Beanshell PostProcessor в качестве дочернего элемента запроса, который возвращает вышеупомянутый ответ.
  2. Поместите следующий код в область «Скрипт» постпроцессора:

    String response = new String(data);
    
    String rawKeys = response.substring(response.indexOf("[") + 1, response.indexOf("]")); // get the data inside square brackets
    String keysWithoutQuotes = rawKeys.replaceAll("\"", "");          // remove quotes
    String[] keyData = keysWithoutQuotes.split("\\,");                // get array of keys
    
    for (int i = 0; i < keyData.length; i++) {                       // store array of keys into JMeter variables like
    
      vars.put("Keys_" + (i +1), keyData[i]);                        // Keys_1=BSS1, Keys_2=DS1, etc.
    }
    
    vars.put("Keys_matchNr", String.valueOf(keyData.length));       // set Keys_matchNr variable
    

Где:

  • data - массив байтов, содержащий данные ответа родительского сэмплера
  • vars - это сокращение от класса JMeterVariables, который обеспечивает чтение / доступ на запись к переменным JMeter.

В результате у вас будут такие переменные, как:

Keys_1=BSS1
Keys_2=DS1
..
Keys_matchNr=X

См. Руководство Как использовать BeanShell: любимый встроенный компонент JMeter для получения дополнительной информации о сценариях Beanshell в JMeter и некоторых других примерах

person Dmitri T    schedule 25.11.2015