Python 模拟api响应

Python 模拟api响应,python,pytest,Python,Pytest,背景 我有一个名为submit_health的函数,负责对我们传递的一些数据进行POST请求。预期输出始终为以下形式: { "errors": [], "warnings": [], "success": true } 唯一的区别是,在某些情况下,如果我们发送无效数据,“success”:false是可能的,当然,“errors”和“warnings”会有适当的文本说明为什么没有成功的post请求 代码

背景

我有一个名为submit_health的函数,负责对我们传递的一些数据进行POST请求。预期输出始终为以下形式:

{
    "errors": [],
    "warnings": [],
    "success": true
} 
唯一的区别是,在某些情况下,如果我们发送无效数据,
“success”:false是可能的,当然,“errors”和“warnings”会有适当的文本说明为什么没有成功的post请求

代码

   def submit_health(health_data):
        return _post_json("health-single", health_data)


def _post_json(resource: str, data: Dict) -> PostResponse:
    json_data = json.dumps(data, default=json_encoding_decimal_default)
    response = request_session_with_retry().post(
        f"{SITE_API_ROOT}/v3/{resource}",
        auth=("", SITE_API_V3_KEY),
        data=json_data,
        headers={"Content-Type": "application/json", "User-Agent": USER_AGENT},
    )
    response.raise_for_status()
    try:
        return json.loads(response.text)
    except Exception:
        return None
问题

我正在尝试使用pytest测试
submit\u health
功能。我不关心API的实现,因为代码的另一部分正在处理该测试。我只关心用预期的输出测试它,这是

{
    "errors": [],
    "warnings": [],
    "success": true
} 

我的问题是,我将如何嘲笑这种反应?我想听听你的建议。我读了一点关于猴子修补术的书,但我还不太确定如何模仿回应。我希望得到一些指导。

假设您的功能位于
health.py
模块中,我将创建一个
test\u health.py
模块,其中包含以下代码:

从unittest.mock导入mock,补丁
从健康导入提交健康
@修补程序(“运行状况。请求会话,并重试”)
def测试提交健康状况(请求模拟):
response_mock=mock(text='{“errors”:[],“warnings”:[],“success”:true}')
请求\u mock.return\u value.get.return\u value=响应\u mock
结果=提交健康状况({“foo”:“bar})
断言结果=={“错误”:[],“警告”:[],“成功”:True}
  • @patch
    将补丁函数作为参数传递,我将其命名为
    request\u mock
  • 我们需要知道调用
    request\u session\u with\u retry.get
    时模拟将返回什么

  • @bigbounty你有什么理由推荐上下文管理器吗?