【问题标题】:Mocking up an Azure Functions httpRequest form in Python在 Python 中模拟 Azure Functions httpRequest 表单
【发布时间】:2021-09-23 12:07:28
【问题描述】:

我正在为 Azure 函数编写测试。该函数从前端读取 multipart/form-data,它使用 data = dict(req.form) 访问,其中 req 是 func.HttpRequest。这工作正常,我可以访问从前端传递的表单数据。我的问题是我似乎无法为我的单元测试模拟 req.form 对象。我写过:

    req = func.HttpRequest(
        method="POST",
        headers={
            "x-ms-client-principal": my-test-user-object,
            "Content-Type": "multipart/form-data"
        },
        body=SOMETHING-GOES-HERE,
        url="/api/users"
    )

我尝试将正文设置为字节对象;这允许我使用req.get_body() 访问字节对象。当我转储一个 JSON 对象时,我可以使用 req.get_json() 获取它。但是我不知道要传递什么以便我可以使用req.form 访问它。有谁知道怎么做?

【问题讨论】:

    标签: python azure function unit-testing httprequest


    【解决方案1】:

    我最终在this blog post 上找到了解决方案。博客文章中描述的 encode_multipart_formdata() 函数允许创建一个模拟表单,然后可以将其传递到 HttpResponse 对象的主体中,如下所示:

    body, content_type = encode_multipart_formdata({
        "username": os.environ["TEST_USERNAME1"],
        "email": os.environ["TEST_USER_EMAIL2"]
    })
    req = func.HttpRequest(
        method="POST",
        headers={
            "x-ms-client-principal": my-test-user-obj,
            "Content-Type": content_type
        },
        body=bytes(body, "utf-8"),
        url="/api/users"
    )
    

    【讨论】:

      【解决方案2】:

      我们可以通过以下方式使用该函数来获取整个表单作为返回响应

      def main(req: func.HttpRequest) -> func.HttpResponse:
          logging.info('Python HTTP trigger function processed a request.')
          return func.HttpResponse(
              json.dumps({
                  'method': req.method,
                  'url': req.url,
                  'headers': dict(req.headers),
                  'params': dict(req.params),
                  'get_body': req.get_body().decode()
              })
          )
      

      或者下面example会让我们更了解request.form来查看表单数据。

      【讨论】:

      • 谢谢,但我已经可以使用req.form 访问表单数据。我需要做的是向 Azure Functions HttpRequest 对象添加一些表单数据。但是,HttpRequest 类中没有 form 参数,我在任何地方都找不到描述 req.form 参数的文档。
      猜你喜欢
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多