Как преобразовать полученный массив байтов в виде base64 в строку и записать в файл в Jmeter

{result:{success:true,errMsg:error},bytes:PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxCdXNpbmVzc1J1bGUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQogICAgPEN}

Я получаю ответ, как указано выше, мне нужно преобразовать байты в строку и записать в файл с помощью Jmeter. Как это возможно, я могу записать в файл, извлекая значение с помощью экстрактора JSON, и записать в файл

receivedbytes =  vars.get("recvBytes");
log.info(receivedbytes);
FileWriter fstream = new FileWriter("C:\\tmp\\getSoftwarePackage.out", true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(receivedbytes);
out.close();
fstream.close();

где recvBytes — байты в ответ


person AA-usa    schedule 21.09.2020    source источник


Ответы (2)


Я смог добиться этого после декодирования.

import org.apache.commons.codec.binary.Base64; String receivedbytes = 

vars.get("recvBytes"); 
log.info(receivedbytes); 
log.info("Decoding base64 format");
String decoded_response = new String(Base64.decodeBase64(receivedbytes));
FileWriter fstream = new FileWriter("C:\\tmp\\getSoftwarePackage.out", true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(decoded_response); 
out.close(); 
fstream.close();
person AA-usa    schedule 22.09.2020

  1. Начиная с JMeter 3.1, вы должны использовать тестовые элементы JSR223 и язык Groovy, не beanshell
  2. Вы получаете не массив байтов, а строку Base64
  3. Если вы будете писать один и тот же файл несколькими потоками, вы столкнетесь с состоянием гонки, что приведет к потеря данных

Предполагая все вышеперечисленное:

  1. Измените свой код, чтобы он выглядел следующим образом:

    vars.put('decodedBytes', new String(vars.get('recvBytes').decodeBase64()))
    
  2. Добавьте следующую строку в файл user.properties:

    sample_variables=decodedBytes
    
  3. Используйте Flexible File Writer, чтобы записать переменную в файл

Если вы не боитесь состояния гонки или использования JMeter для функционального тестирования, запуская его с 1 виртуальным пользователем, вы можете изменить код следующим образом:

new File('C:\\tmp\\getSoftwarePackage.out').text = new String(vars.get('recvBytes').decodeBase64())
person Dmitri T    schedule 22.09.2020
comment
Спасибо за ответ, как мы можем избежать состояния гонки и записать его в несколько файлов - person AA-usa; 23.09.2020
comment
Ваш вклад был так полезен. Следуя этому blazemeter.com/blog/ почти достиг того, что я делаю. Но теперь, столкнувшись с исключением из-за размера ответа, Excepton находится в дереве результатов просмотра, а также в прослушивателе. Любой способ преодолеть это? - person AA-usa; 24.09.2020
comment
Решил проблему с буфером размера файла. Я отправил это значение kg.apc.jmeter.reporters.FFWBufferSize=100000000 в user.properties, и это сработало. Теперь посмотрим, смогу ли я создать несколько разных файлов для каждого запроса. - person AA-usa; 24.09.2020
comment
Можно ли записать вывод гибкого средства записи файлов в виде нескольких файлов с отметкой времени или чем-то еще? - person AA-usa; 24.09.2020