1

如何检查 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)
    # ...
4

1 回答 1

3

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

这是我正在运行的代码:

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

断言在此代码段中传递。可能是版本问题?我使用了 requests==2.25.1 和 requests-mock==1.8.0。

于 2021-04-11T18:30:49.550 回答