JMeter - 从PUT请求的数据文件中读取图像

时间:2018-04-27 19:46:49

标签: image rest jmeter put data-files

我有一个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中,多部分/表格数据上传仅适用于POST,但不适用于PUT资源。

对于Image,我在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的请求,图像无法正确呈现。如果我向API发出类似的邮递员PUT请求以保存图像并发出另一个GET请求来读取图像,那么它就会成功读取。

我没有正确配置我的测试(beanShell代码问题或HTTP请求正文数据问题)或者有更好的方法来配置此测试以从数据文件中的路径读取图像并将图像作为表单数据传递给API PUT资源。

期待专家的建议。

1 个答案:

答案 0 :(得分:1)

实际上可以使用JMeter执行多部分PUT请求,您需要:

  1. 添加http://scikit-learn.org并将其配置为发送HTTP Header Manager标头,其值为:

    compile 'com.onesignal:OneSignal:3.8.4'
    // Required for OneSignal, even if you have added FCM.
    compile 'com.google.gms:google-services:3.2.1'
    
  2. 使用与multipart/related; boundary=parttest 标题中相同的边界值在Content-Type中构建您的请求正文
  3. 有关使用PUT请求在Google云端硬盘中更新文档的示例测试计划,请参阅HTTP Request,您可以将其用作参考。

    另外,我建议使用Testing REST API File Uploads in JMeter函数来读取图像文件内容,或者如果您更喜欢编写脚本 - 请转到__FileToString()