【问题标题】:How do I POST a JSON body AND a Video file to an API endpoint on JMeter?如何将 JSON 正文和视频文件发布到 JMeter 上的 API 端点?
【发布时间】:2020-01-29 13:48:29
【问题描述】:

我无法在 JMeter 上的一个请求中同时发送 JSON 正文数据和视频/图像文件。即使我在 HTTP 标头管理器中添加了 Authorization 标头,它也会提供 401 未授权。带有标头的相同请求在 Postman 上运行良好。

我已经在这里参考了本指南,但没有运气。

https://www.blazemeter.com/blog/testing-advanced-rest-api-file-uploads-jmeter/

Content-Type: multipart/form-data

{
    "email": "xyz@gmail.com",
    "password": "xyz",
    "file": ${__FileToString("/Downloads/SampleVideo_1280x720_1mb.mp4")}

}

采样器结果:

Thread Name: Thread Group 1-1
Sample Start: 2019-09-30 14:26:25 IST
Load time: 2922
Connect Time: 838
Latency: 2922
Size in bytes: 202
Sent bytes:1056397
Headers size in bytes: 202
Body size in bytes: 0
Sample Count: 1
Error Count: 1
Data type ("text"|"bin"|""): 
Response code: 401
Response message: Unauthorized


HTTPSampleResult fields:
ContentType: 
DataEncoding: null

请求:

POST data:
--o3F8APyqP080W3wk0N_-96jzl11Bfsa
Content-Disposition: form-data; name="file"; filename="SampleVideo_1280x720_1mb.mp4"
Content-Type: video/mp4
Content-Transfer-Encoding: binary

<actual file content, not shown here>
--o3F8APyqP080W3wk0N_-96jzl11Bfsa--


[no cookies]

【问题讨论】:

    标签: rest http jmeter performance-testing load-testing


    【解决方案1】:

    JMeter 应该做真正的浏览器(或使用您的 API 端点的其他应用程序)正在做的事情。

    如果浏览器(或应用程序)发送 2 个请求 - JMeter 也必须发送 2 个请求。如果浏览器(或应用程序)发送 1 个请求 - JMeter 必须发送 1 个请求。如果有 1 个请求,我的期望是您应该发送 application/json 作为 Content-Type 标头的值,就像在您所指的指南中所做的那样。

    --boundary
    Content-Type: application/json; charset=UTF-8
    
    
    
    JSON Metadata
    --boundary
    Content-Type: file MIME type
    
    
    
    File content
    --boundary--
    

    答案很简单:只需记录使用 JMeter 的 HTTP(S) Test Script Recorder 的请求,JMeter 就会对 HTTP 请求采样器、HTTP Header Manager 等进行正确配置。需要做的是实现parameterization and correlation,以便可以成功重播脚本。

    一个重要的一点:在录制过程中,您需要在 JMeter 的“bin”文件夹中拥有 SampleVideo_1280x720_1mb.mp4 文件作为现代 browsers don't return the full path,因此只有当文件位于其“bin”中时,JMeter 才能正确捕获文件上传请求“ 文件夹。更多信息:Recording File Uploads with JMeter

    【讨论】:

    • 感谢您的回复德米特里!浏览器仅发送 1 个带有 json 正文和视频文件的请求,我在邮递员上试过,它可以工作。但是当我在 jmeter 上尝试相同时,它没有。我试图检查正文数据是否正在传递给请求,但它没有。添加上面指南中提到的内容类型的问题是它仍然失败并给出 401,即使我已经尝试过了。
    • 这里提到:``` --boundary Content-Type: 文件MIME类型 文件内容 --boundary-- ``` 我在文件内容中添加什么?当我尝试使用 FileToString 函数时,它不起作用
    • 如果您能够在浏览器和邮递员中运行请求,您应该能够在 JMeter 中记录请求。也许文件主体以某种方式编码/压缩
    • 除了记录请求,还有其他解决办法吗?我尝试使用 Recorder,但它是一个移动应用程序,即使按照关于在移动应用程序上录制的教程,也无法录制。
    • 应该可以正常录制手机应用,只需要在设备上安装JMeter的证书即可。在 Android 7+ 上,您还需要采取一些额外的步骤,查看Recording Using Android Devices 文章了解更多详情
    【解决方案2】:

    要发布 json 正文和附件,您可以在 JMeter HTTPS 请求的 Parameters 选项卡中添加您的“电子邮件”和“密码”,并在 Files Upload 选项卡中添加文件。 p>

    【讨论】:

    • 感谢您的回复,但它不起作用。见上面我的 cmets。
    • 您可以分享您添加到 Jmeter 的标头以及为成功请求添加到邮递员的内容吗?
    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2022-01-19
    • 2022-01-27
    • 1970-01-01
    • 2016-09-12
    • 2019-02-08
    相关资源
    最近更新 更多