2017-03-21 37 views
2

我有课,要求请求的方法使用GETATTR这样的:如何使用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) 

我试图用模拟测试API和响应LIB是这样的:

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' 

回答

1

有没有必要使用getattrrequests.getrequests.post等都是requests.request只是方便的方法,它可以让你通过HTTP方法作为参数:

requests.request('GET', url) # equivalent to requests.get(url) 

另外:

+0

谢谢@ThisSuitIsBlackNot。感谢“另:”下的所有要点。我只是编写了那些Try/Except,因为无法找到更好的示例来编写。在我的代码中,我完全按照你指出的做同样的事情。让我试用一下,如果这样做,而我嘲笑使用响应的请求。 –

+0

谢谢!有效!! –

+0

@SunilKapil太棒了!乐意效劳。 – ThisSuitIsBlackNot