【问题标题】:How to fake my response in pytest requests mock如何在 pytest requests mock 中伪造我的回复
【发布时间】:2020-06-14 20:31:32
【问题描述】:

我正在尝试测试的函数返回 list of strings

def listForumsIds:
    response = requests.get(url)
    forums= response.json().get('forums')
    forumsIds= [forum['documentId'] for forum in forums]
    # return like: ['id1', 'id2', 'id3'.....]
    return forumsIds

我的测试功能:

@requests_mock.mock()
def test_forms(self, m):
    # I also used json='response'
    m.get('valid url', text="response", status_code=200)
    resp = listForumsIds('valid url')
    # ERROR !!!!
    assert resp == "response"

我收到如下错误:json.decoder.JSONDecodeErrorstr object has no attribute get

如何伪造我的响应以匹配我的函数的返回值?

【问题讨论】:

  • @hoefling 不,它不是类似的,基本上我如何告诉模拟我的请求返回不会只是 text='text' 或只是 json='response',它是我的 json 对象将获取论坛标题并在其中获取所有论坛 ID
  • 你在测试什么?来自json的get方法?你应该按照@hoefling 的回答来嘲讽。您也可以查看 pytest.patch.object 来模拟请求和 json 方法(使用 returned_value 参数)

标签: python pytest requests-mock


【解决方案1】:

您必须在模拟响应的json 字段中传递所需的有效负载。示例,适应您的代码:

class MyTests(unittest.TestCase):

    @requests_mock.mock()
    def test_forms(self, m):
        payload = {"forums": [{"documentId": "id1"}]}
        m.register_uri("GET", "https://www.example.com", json=payload)
        ids = listForumsIds('https://www.example.com')
        assert ids == ['id1']

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2019-12-15
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多