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

如何在Python中构造Azure Functions的HttpRequest表单对象用于单元测试

Azure Function单元测试模拟multipart/form-data请求方案

req.form只会解析符合HTTP标准的multipart/form-data格式字节流,需要按规范构造请求body和Content-Type头,以下是两种实现方式:

方式一:使用工具类生成标准格式(推荐)

借助requests-toolbelt的MultipartEncoder自动生成合规的表单字节流,无需手动处理格式细节:

  1. 安装依赖
pip install requests-toolbelt
  1. 构造HttpRequest实例
from requests_toolbelt.multipart.encoder import MultipartEncoder
import azure.functions as func

# 定义要模拟的表单字段,支持普通键值对和文件上传
form_encoder = MultipartEncoder(
    fields={
        "username": "test_user",
        "age": "24",
        # 上传文件示例:字段名 = (文件名, 文件字节流, MIME类型)
        # "avatar": ("test_avatar.png", open("./test_avatar.png", "rb"), "image/png")
    }
)

req = func.HttpRequest(
    method="POST",
    headers={
        "x-ms-client-principal": my_test_user_object,
        # 直接使用encoder生成的带boundary的Content-Type,无需手动拼接
        "Content-Type": form_encoder.content_type
    },
    # 传入编码后的表单字节流
    body=form_encoder.read(),
    url="/api/users"
)

构造完成后直接调用dict(req.form)即可拿到和正式运行一致的表单数据。

方式二:手动拼接multipart格式(无额外依赖)

如果不想引入第三方依赖,可以手动按照HTTP规范拼接body:

import azure.functions as func

# 自定义边界符,不要和表单内容重复即可
boundary = "----TestFormBoundary123456"
# 按multipart格式拼接内容,所有换行必须为\r\n
body_content = [
    f"--{boundary}",
    'Content-Disposition: form-data; name="username"',
    "",
    "test_user",
    f"--{boundary}",
    'Content-Disposition: form-data; name="age"',
    "",
    "24",
    # 所有字段写完后加结束标识
    f"--{boundary}--"
]
body_bytes = "\r\n".join(body_content).encode("utf-8")

req = func.HttpRequest(
    method="POST",
    headers={
        "x-ms-client-principal": my_test_user_object,
        "Content-Type": f"multipart/form-data; boundary={boundary}"
    },
    body=body_bytes,
    url="/api/users"
)

注意事项

  • 边界符必须和Content-Type头中声明的一致,不能和表单字段的内容重合
  • 手动拼接时必须使用\r\n作为换行符,否则会解析失败
  • 二进制文件字段直接将字节内容写入对应位置即可,无需额外编码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:09:03