【问题标题】:Check query string on the request using requests_mock使用 requests_mock 检查请求中的查询字符串
【发布时间】:2021-07-02 09:59:46
【问题描述】:

如何检查 requests_mock 模拟的请求是否在 URL 中添加了一些查询参数?

我有一个函数func,它在 URL 上使用一些查询字符串在 URL 上执行 HTTP POST,我想检查是否使用此查询字符串调用。

这是我的尝试,但失败了。

query 是一个空字符串,qs 是一个空字典。

我确定我的函数在请求中附加了查询字符串。

with requests_mock.Mocker() as mock:
    mock.post(url, text=xml)

    func() # This function will call url + query string

    history = mock.request_history[0]

    assert history.method == "POST" # OK
    assert history.query is None # Returns an empty string, AssertionError: assert '' is None
    assert history.qs is None # Returns an empty dict, assert {} is None 

我的func

def credilink():
    url = settings["url"]
    params = settings["params"]
    params["CC"] = query

    response = requests.post(url, params=params)
    # ...

【问题讨论】:

  • 你能提供一个更完整的例子吗?我在理解您如何使用它时遇到了一些麻烦。演示观察到的行为的单个文件脚本和关于预期行为的评论将是理想的。

标签: python python-requests requests-mock


【解决方案1】:

我试图重现您的问题,但无法...

这是我正在运行的代码:

import requests
import requests_mock

url = "http://example.com"
settings = dict(url=url, params=dict(a=1))
query = "some-query"
xml = "some-xml"


def credilink():
    url = settings["url"]
    params = settings["params"]
    params["CC"] = query

    response = requests.post(url, params=params)
    return response.text
    # ...


def test():
    with requests_mock.Mocker() as mock:
        mock.post(url, text=xml)

        data = credilink()  # This function will call url + query string

        history = mock.request_history[0]

        assert history.method == "POST"  # OK
        assert history.qs == dict(a=['1'], cc=[query])
        assert history.query == f"a=1&cc={query}"
        assert data == xml

断言在这个 sn-p 中传递。 可能是版本问题?我使用 requests==2.25.1 和 requests-mock==1.8.0。

【讨论】:

  • 我用的是同一个版本的pip freeze | grep requests requests==2.25.1 requests-mock==1.8.0
  • 我写的代码不适合你? :(
  • 不。我的.qs.query 还是空的
  • ?。好吧,也许是python版本?不太可能,但仍然值得一试......
  • 我使用的是 Python 3.8.5。可能是我的代码中的其他内容...我会接受您的回答,因为我认为它是正确的。谢谢
猜你喜欢
  • 1970-01-01
  • 2013-04-06
  • 2012-02-07
  • 1970-01-01
  • 2020-12-02
  • 2018-08-17
  • 1970-01-01
  • 2016-05-04
相关资源
最近更新 更多