python библиотека ответов добавляет часть URL к параметрам запроса - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь имитировать внешний API, используя библиотеку ответов. Я хочу проверить, правильно ли я передал свои параметры в моем запросе, поэтому я использую этот минимальный рабочий пример из ответов docs :

import responses
import requests

@responses.activate
def test_request_params():
    responses.add(
        method=responses.GET,
        url="http://example.com?hello=world",
        body="test",
        match_querystring=False,
    )

    resp = requests.get('http://example.com', params={"hello": "world"})
    assert responses.calls[0].request.params == {"hello": "world"}

Проблема в том, что это прерывается как как только я заменю http://example.com URL-адресом, который похож на конечную точку API:

@responses.activate
def test_request_params():
    responses.add(
        method=responses.GET,
        url="http://example.com/api/endpoint?hello=world",
        body="test",
        match_querystring=False,
    )

    resp = requests.get('http://example.com/api/endpoint', params={"hello": "world"})
    assert responses.calls[0].request.params == {"hello": "world"}

Теперь ответы добавили часть URL-адреса к первому параметру запроса:

>       assert responses.calls[0].request.params == {"hello": "world"}
E       AssertionError: assert {'/api/endpoint?hello': 'world'} == {'hello': 'world'}

Я чего-то не хватает?

1 Ответ

0 голосов
/ 24 июня 2020

Вы можете передать регулярное выражение в качестве аргумента url, которое игнорирует параметры:

@responses.activate
def test_request_params():

    url = r"http://example.com/api/endpoint"
    params = {"hello": "world", "a": "b"}

    # regex that matches the url and ignores anything that comes after
    rx = re.compile(rf"{url}*")
    responses.add(method=responses.GET, url=rx)

    response = requests.get(url, params=params)
    assert responses.calls[-1].request.params == params

    url_path, *queries = responses.calls[-1].request.url.split("?")
    assert url_path == url
...