Как проверить все запросы исключений - PullRequest
0 голосов
/ 05 ноября 2019

Я создал класс 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

Я хотел бы провести на нем модульные тесты с использованием модуля ответа, но покрытие не может пройти через последние 2 исключения: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?

1 Ответ

0 голосов
/ 06 ноября 2019

Решено с насмешкой разные исключения:

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...