Я пишу план тестирования Jmeter для загрузки файлов на сервер кусками.Я немного знаю Java.
Я использовал , в то время как контроллер на Sampler запросов HTTP с препроцессором Bean Shell .Я написал короткий скрипт для получения байтов из файла, теперь проблема, с которой я сталкиваюсь: HTTP Sampler Request берет путь к файлу в разделе загрузки файлов.Есть ли способ создать файл в памяти в Bean Shell Pre Processor, а затем использовать эту переменную файла памяти в поле File Path.
То, что я считаю теоретически, возможно.Потому что всякий раз, когда мы загружаем файл, мы сначала записываем его в память, а затем отправляем на сервер.Итак, можем ли мы просто создать файл в памяти из байтов (кусков по 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 Request Sampler -> Загрузка файлов Раздел.