如何测试每个请求的异常



我创建了一个类RequestBuilder,其中包含我执行的所有请求

class RequestBuilder():
def get(self, url: str):
try:
response = requests.get(url, headers=self._headers)
response.raise_for_status()
return response
except requests.exceptions.HTTPError as errh:
Logger.error("HTTP ERROR "+errh)
raise 
except requests.exceptions.ConnectionError as errc:
Logger.error("CONNECTION ERROR "+errc)
raise
except requests.exceptions.Timeout as errt:
Logger.error("HTTP TIMOUT "+errt)
raise
except requests.exceptions.RequestException as err:
Logger.error("REQUEST ERROR "+err)
raise

我想使用响应模块对其进行单元测试,但覆盖范围无法通过最后两个异常:Timeout和RequestException

@responses.activate 
def testRequestOK():
responses.add(responses.GET, 'http://sample.com', json={'status':'ok'}, status=200)
rb = RequestBuilder()
resp = rb.get('http://sample.com')
assert len(responses.calls) == 1
@responses.activate 
def testRequestBuilderHTTPERROR():
responses.add(responses.GET, 'http://sample.com', json={'status':'no ok'}, status=501)
rb = RequestBuilder() 
with pytest.raises(BaseException):
rb.get('http://sample.com')
@responses.activate 
def testRequestBuilderHTTPERROR2():
responses.add(responses.GET, 'http://sample.com', json={'status':'no ok'}, status=403)
rb = RequestBuilder() 
with pytest.raises(Exception):
rb.get('http://sample.com')

如何模拟Timeout和requestException?

通过模拟不同的异常来解决:

from utils.requestBuilder import RequestBuilder
import responses
import requests
from requests import exceptions as request_exception
import pytest
import mock
def testGetExceptionTimeout():
with mock.patch('requests.get', side_effect=request_exception.Timeout('Failed Request')) as mock_request_post:
rb = RequestBuilder()
with pytest.raises(Exception):
rb.get('http://sample.com')
def testGetExceptionRequestException():
with mock.patch('requests.get', side_effect=request_exception.RequestException('Failed Request')) as mock_request_post:
rb = RequestBuilder()
with pytest.raises(Exception):
rb.get('http://sample.com')

最新更新