Как читать из файла кусками для загрузки в Jmeter?

Я пишу план тестирования Jmeter для загрузки файлов на сервер по частям. Я плохо знаю Java.

Я использовал в то время как контроллер на Сэмплер HTTP-запросов с Препроцессор оболочки бина. Я написал короткий скрипт для получения байтов из файла, теперь проблема, с которой я столкнулся, заключается в следующем: пробоотборник HTTP-запросов принимает путь к файлу в разделе загрузки файлов. Есть ли способ создать файл в памяти в Bean Shell Pre Processor, а затем использовать эту переменную файла памяти в поле «Путь к файлу».

То, что я думаю, теоретически, это возможно. Потому что всякий раз, когда мы загружаем файл, мы сначала берем его в память, а затем отправляем на сервер. Итак, можем ли мы просто создать файл в памяти из байтов (фрагментов по 1 МБ), а затем отправить его как загрузку файла. Вот код, который я написал в препроцессоре Bean Shell

Integer maxChunkSize    = new Integer(vars.get("FILE_MAX_SIZE"));
String uploadFilePath   = vars.get("UPLOAD_FILE");
uploadFileSize      = new File(uploadFilePath).length();
InputStream uploadFile  = new BufferedInputStream(new FileInputStream(uploadFilePath));
int offset      = whileCounter * maxChunkSize;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] bytes;
int size;

/* creating bytes array to hold file data*/
if (offset < uploadFileSize) {
    if (((int) offset + (int) maxChunkSize) < uploadFileSize) {
        bytes = new byte[ (int) maxChunkSize];
        size = maxChunkSize;
    } else {
        size = (int) (uploadFileSize - offset);
        bytes = new byte[ (int) size];
        vars.put("WHILE_LOOP", "0");
    }
}

/* printing results for debugging */
/*
log.info(" ============================================================== ");
log.info("While counter " + whileCounter.toString() );
log.info("While loop " + vars.get("WHILE_LOOP").toString() );
log.info("The file to upload is : " + uploadFilePath);
log.info("Maximum Chunk size is : " + maxChunkSize.toString());
log.info("Current Offset is : " + offset.toString());
log.info("The file size is " + uploadFileSize.toString());
log.info(" ============================================================== ");
*/


/* here it is giving method invocation on loop counter 2, so skip method is used */
uploadFile.skip(offset);
int bytesRead = uploadFile.read(bytes, 0, size);


/* write to byte output stream to read as a file */
bos.write(bytes, 0, bytesRead); 


/* params for next iteration */
uploadFile.close();
whileCounter++;
vars.put("WHILE_COUNTER", whileCounter.toString() );

Ожидал: альтернатива загрузке файла по частям через JMeter ИЛИ Создайте переменную памяти, которая будет действовать как файл для пути загрузки файла в разделе JMeter Сэмплер HTTP-запросов -> Загрузка файлов.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
903
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не думаю, что вы можете добиться этого, используя сэмплер HTTP-запрос, варианты, которые я бы рассмотрел, находятся в:

  1. Реализовать загрузку фрагментированного файла с использованием кода Java, не полагаясь на пробоотборник HTTP-запросов JMeter, что-то вроде

    import org.apache.http.client.methods.HttpPost
    import org.apache.http.entity.InputStreamEntity
    import org.apache.http.impl.client.CloseableHttpClient
    import org.apache.http.impl.client.HttpClients
    
    CloseableHttpClient client = HttpClients.createDefault();
    
    HttpPost post = new HttpPost("http://example.com");
    File file = new File("/path/to/your/file");
    
    InputStreamEntity reqEntity = new InputStreamEntity(new FileInputStream(file), -1, "Your file mime type");
    
    //Alternatively:
    //FileEntity reqEntity = new FileEntity(file, "Your file mime type");
    
    reqEntity.setChunked(true);
    
    client.execute(post)
    
  2. Используйте сэмплер Необработанный HTTP-запрос, который просто отправляет фрагментированные данные по сети (размер фрагмента можно контролировать с помощью свойства kg.apc.jmeter.samplers.FileReadChunkSize), поэтому вы можете просто записать связанные данные тела запроса с помощью инструмента для анализа, такого как Wireshark, а затем воспроизвести его. с желаемым размером куска. При необходимости ознакомьтесь со статьей Сэмплер JMeter HTTP Raw Request Sampler — когда и как его использовать для получения дополнительной информации.

  3. Также имейте в виду, что начиная с JMeter 3.1 рекомендуется использовать тестовые элементы JSR223 и язык Groovy для сценариев., поэтому рассмотрите возможность перехода на Groovy при следующей возможности.

Другие вопросы по теме