You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Robot Framework发送大体积二进制POST请求时OOM问题求助

解决Robot Framework大二进制文件POST上传OOM问题

你的问题核心在于**Get Binary File会把整个250MB文件一次性加载到内存中**,加上Python对象的额外内存开销,直接触发了OOM。而robotframework-requests的Post Request关键字默认会处理传入的data参数,无法直接利用requests原生的流式上传能力。下面是几个可行的解决方案:

方案1:直接调用底层requests.Session的流式上传

Robot Framework允许通过Call Method关键字直接调用requests.Session对象的原生方法,这样就能利用requests支持的文件对象流式上传(不会一次性读入整个文件)。修改后的测试用例如下:

Upload ${filename} file
Create Session mysession http://${ADDRESS}
&{headers} = Create Dictionary Content-Type=application/octet-stream Accept=application/octet-stream
${file_handle} = Open File ${filename} rb
TRY
    ${resp} = Call Method ${mysession} post ${CGIPath} data=${file_handle} headers=&{headers}
    [Return] ${resp.status_code} ${resp.text}
FINALLY
    Close File ${file_handle}
END

关键说明:

  • Open File以二进制只读模式打开文件,返回的文件句柄可以直接传给requests的post方法
  • requests会自动分块读取文件并上传,内存占用仅维持在几MB级别
  • 用TRY/FINALLY确保文件句柄无论请求成功与否都会被关闭,避免资源泄漏

方案2:使用curl命令流式上传(备选)

如果不想修改Robot Framework的关键字调用逻辑,直接用Run Process执行curl命令也是稳定的选择——curl默认支持流式读取文件上传,内存开销极低:

Upload ${filename} file
&{headers} = Create Dictionary Content-Type=application/octet-stream Accept=application/octet-stream
# 拼接curl命令
${curl_headers} = Catenate SEPARATOR=" " 
... -H "Content-Type: ${headers}[Content-Type]"
... -H "Accept: ${headers}[Accept]"
${curl_cmd} = Catenate SEPARATOR=" "
... curl -X POST
... ${curl_headers}
... --data-binary @${filename}
... http://${ADDRESS}${CGIPath}
# 执行命令并获取结果
${result} = Run Process ${curl_cmd} shell=True
# 解析返回值(根据实际响应格式调整)
[Return] ${result.returncode} ${result.stdout}

关键说明:

  • --data-binary @${filename}告诉curl直接读取文件内容作为请求体,不会加载整个文件到内存
  • 需要注意解析curl的返回结果,比如从stdout中提取响应状态码和内容(如果接口返回的是JSON或文本)

你的测试疏漏点

你之前的测试用例最大的问题是没有利用HTTP客户端的流式上传能力,而是通过Get Binary File把大文件全量加载到内存,这对于百MB级别的文件来说是完全没必要的,也是OOM的直接诱因。robotframework-requests的Post Request关键字封装了requests的方法,但没有暴露流式上传的入口,所以需要绕开封装直接调用底层API。

内容的提问来源于stack exchange,提问作者UVV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:01:31