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

Robot Framework如何通过URL流式上传Zip文件至API?

解决Robot Framework直接从URL上传二进制文件的问题

嘿,这个需求我之前刚好碰到过,给你两个在Robot Framework里能落地的方案,亲测好用:

方案一:自定义Python关键字(推荐,复用性高)

核心思路是用Python封装从URL获取二进制流的逻辑,然后在Robot里调用这个自定义关键字,再结合RequestsLibrary完成上传。

步骤1:编写自定义Python库(比如命名为RemoteFileUtils.py)

import requests
from io import BytesIO

def get_remote_file_stream(url, auth=None, headers=None):
    """从指定URL获取文件的二进制流,返回类文件对象"""
    # 支持添加认证、自定义请求头(如果目标URL需要的话)
    response = requests.get(url, stream=True, auth=auth, headers=headers)
    response.raise_for_status()  # 如果请求失败直接抛出异常
    # 将二进制内容转为BytesIO对象,模拟本地文件流
    return BytesIO(response.content)

步骤2:在Robot测试用例中调用

*** Settings ***
Library    RequestsLibrary
Library    ./RemoteFileUtils.py  # 导入自定义库,路径根据实际情况调整

*** Test Cases ***
Upload Zip From Remote URL
    # 1. 创建API会话
    Create Session    upload_service    http://your-upload-api-domain.com

    # 2. 从远程URL获取文件流(如果URL需要认证,可加auth参数,比如auth=('username','password'))
    ${file_stream}    Get Remote File Stream    http://X.X.X.X/test.zip

    # 3. 构造上传参数,注意`file`要和API要求的表单字段名一致
    ${upload_params}    Create Dictionary    file=${file_stream};filename=test.zip

    # 4. 发送POST上传请求
    ${response}    Post Request    upload_service    /api/upload-endpoint    files=${upload_params}

    # 5. 验证上传结果
    Should Be Equal As Strings    ${response.status_code}    200
    Log    Upload success! Response: ${response.json()}

方案二:用Inline Python代码块(轻量,无需额外文件)

如果不想单独写Python文件,可以直接用Robot的Evaluate关键字执行Python代码,完成流获取和上传:

*** Settings ***
Library    RequestsLibrary

*** Test Cases ***
Upload File With Inline Python
    Create Session    upload_api    http://your-upload-api-domain.com

    # 1. 从远程URL获取二进制内容
    ${file_content}    Evaluate    requests.get("http://X.X.X.X/test.zip").content    modules=requests

    # 2. 把字节内容转为类文件对象
    ${file_stream}    Evaluate    io.BytesIO(${file_content})    modules=io

    # 3. 构造上传参数并发送请求
    ${files}    Create Dictionary    file=${file_stream};filename=test.zip
    ${response}    Post Request    upload_api    /api/upload-endpoint    files=${files}

    # 验证结果
    Should Contain    ${response.text}    success

注意事项

  • 确保目标API支持multipart/form-data格式的文件上传(大部分文件上传API都是这个格式)
  • 如果目标URL需要权限验证,可以在requests.get里添加auth或headers参数(比如带Token的请求头)
  • 处理超大文件时,建议用stream=True分块读取,避免内存占用过高(方案一已经默认开启)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:01:39