我有类使用getattr调用请求方法,如下所示:
import requests
class CustomRequests(object):
def __init__(self):
pass
def _do_requests(self, method='GET', url='', expected_status=200):
make_request = getattr(requests, method.lower())
url = url if url else 'http://example.com'
try:
response = make_request(method, url=url)
except response.exceptions.RequestException as exception:
raise exception
if response.status_code != expected_status:
raise ValueError
def get(self, *args, **kwargs):
self._do_requests(method='GET', *args, **kwargs)
我正在尝试使用mock和响应lib测试api,如下所示:
import responses
@responses.activate
def test_get_method(self):
responses.add('GET', url='http://test_this_api.com', status=200)
custom_request = CustomRequest()
response_data = custom_request.get(method='GET')
AssertIsNotNone(response_data)
有没有更好或正确的方法来测试此方法。 得到此错误:
message = message.format(**values)
KeyError: 'method'
答案 0 :(得分:1)
无需使用getattr
。 requests.get
,requests.post
等只是requests.request
的便捷方法,可让您将HTTP方法作为参数传递:
requests.request('GET', url) # equivalent to requests.get(url)
此外:
try
/ except
毫无意义,因为您所做的只是重新提出异常。ValueError
没有意义。 ValueError
用于"when a built-in operation or function receives an argument that has the right type but an inappropriate value."创建您自己的例外类,例如UnexpectedHTTPStatusError
。CustomRequests
类的整个点似乎是在响应的状态代码与用户期望的内容不匹配时引发异常,因此您的测试应该声明实际引发了异常{ {3}}。