JMeter - чтение изображения из файла данных для запроса PUT

У меня есть данные CSV как

FirstName,MiddleName,LastName,ImageLocation
Jack|Michel|Rechards|C:\Image\picture.jpg
Tom|Peter|Kim|C:\Image\picture123.jpg

Я пытаюсь настроить Jmeter для чтения вышеуказанного файла данных и передачи изображения как данных формы в ресурс REST API PUT как данные формы. API принимает изображение как ByteBuffer.

В JMeter загрузка multipart / form-data доступна только для POST, но не для ресурса PUT.

Для изображения я написал код в BeanShell PreProcessor, который помещает byte [] в переменную.

String imageLoc = vars.get("ImageLocation");
File file = new File(imageLoc);
byte[] buffer = new byte[(int) file.length()];
InputStream ios = null;
    try {
        ios = new FileInputStream(file);
        if (ios.read(buffer) == -1) {
            throw new IOException(
                    "EOF reached while trying to read the whole file");
        }
    } finally {
        try {
            if (ios != null)
                ios.close();
        } catch (IOException e) {
        }
    }
vars.put("imageData", new String(buffer));

а переменная imageData передается в данных тела HTTP-запроса как

------=_parttest
Content-Type: image/jpeg; name=test.jpeg
Content-Transfer-Encoding: binary
Content-Disposition: form-data; name="Picture"; filename="test.jpeg"
${imageData}
------=_parttest--

По какой-то причине изображения не отображаются правильно для запросов от Jmeter. Если я сделаю аналогичный запрос PUT от почтальона к API для сохранения изображения и сделаю еще один запрос GET для чтения изображения, он будет успешно прочитан.

Либо я неправильно настроил свой тест (проблема с кодом beanShell или проблема с данными тела HTTP-запроса), либо есть лучший способ настроить этот тест для чтения изображений из пути в файле данных и передачи изображения в качестве данных формы в ресурс API PUT.

Жду совета специалистов.


person user842122    schedule 27.04.2018    source источник


Ответы (1)


На самом деле можно выполнить многостраничный запрос PUT с помощью JMeter, вам необходимо:

  1. Добавьте диспетчер заголовков HTTP и настройте его для отправки заголовок Content-Type со значением:

    multipart/related; boundary=parttest
    
  2. Создайте тело запроса в HTTP-запросе, используя то же граничное значение, что и в Content-Type заголовок

См. Тестирование загрузки файлов REST API в JMeter например план тестирования, который обновляет документ на Google Диске с помощью запроса PUT, вы можете использовать его как ссылку.

Также я бы предпочел использовать функцию __FileToString () для чтения изображения. содержимое файла или, если вы предпочитаете сценарии, выберите вместо этого JSR223 PreProcessor и язык Groovy .

person Dmitri T    schedule 30.04.2018