【发布时间】:2020-07-23 23:35:05
【问题描述】:
我正在使用 python responses 模块在我的测试中模拟 API 响应。问题是,在注册了 url responses.add() 之后,它只能用requests.get() 调用一次,随后对同一 URL 的调用会引发异常。
import requests
import responses
URL = 'http://localhost/abcd'
# Test method
@responses.activate
def get_url(url):
return requests.get(url)
# Set up URL mock
responses.add(responses.GET, URL, body="A B C D")
现在第一个调用有效:
>>> print(get_url(URL)) # <Response [200]>
但是同样的调用再次失败:
>>> print(get_url(URL))
Traceback (most recent call last):
File "test-responses.py", line 19, in <module>
print(get_url(URL))
File "<string>", line 3, in wrapper
File "test-responses.py", line 10, in get_url
return requests.get(url)
File ".../site-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File ".../site-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File ".../site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File ".../site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File ".../site-packages/responses.py", line 674, in unbound_on_send
return self._on_request(adapter, request, *a, **kwargs)
File ".../site-packages/responses.py", line 654, in _on_request
raise response
requests.exceptions.ConnectionError: Connection refused by Responses - the call doesn't match any registered mock.
Request:
- GET http://localhost/abcd
Available matches:
>>>
有什么方法可以使模拟 URL 永久化并根据测试需要多次调用它们?
【问题讨论】:
标签: python unit-testing python-requests mocking