«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как имитировать HTTP-запросы и ответы в сценариях тестирования Python?

Как имитировать HTTP-запросы и ответы в сценариях тестирования Python?

Опубликовано 2 ноября 2024 г.
Просматривать:920

How to Mock HTTP Requests and Responses in Python Testing Scenarios?

Имитация запросов и ответов для тестирования Python

При тестировании Python становится необходимым имитировать модули и их функциональность, чтобы контролировать поток выполнения и проверить конкретные сценарии. Среди них имитация модуля Requests обычно используется для тестирования функций или методов, которые полагаются на HTTP-запросы.

Рассмотрим файлviews.py со следующим кодом:

def myview(request):
    res1 = requests.get('aurl')
    res2 = request.get('burl')
    res3 = request.get('curl')

Чтобы имитировать такое поведение, вы можете использовать пакет макетов Python. Вот как этого можно добиться шаг за шагом:

Шаг 1. Определите фиктивное поведение

Чтобы имитировать модуль запросов, определите функцию, которая будет заменять Requests.get (). В этой функции вы можете указать желаемый ответ для каждого URL.

def mocked_requests_get(*args, **kwargs):
    class MockResponse:
        def __init__(self, json_data, status_code):
            self.json_data = json_data
            self.status_code = status_code

        def json(self):
            return self.json_data

    if args[0] == 'aurl':
        return MockResponse({'a': 'a'}, 200)
    elif args[0] == 'burl':
        return MockResponse({'b': 'b'}, 200)
    elif args[0] == 'curl':
        return MockResponse({'c': 'c'}, 200)

    return MockResponse(None, 404)

Шаг 2. Исправьте модуль запросов

В вашем тестовом примере используйте декораторock.patch() для замены фактических запросов модуль с вашей фиктивной функцией.

@mock.patch('requests.get', side_effect=mocked_requests_get)
def test_myview(self, mock_get):
    # Call the function you want to test
    myview(None)
    # Assertions for expected responses
    ...

Шаг 3. Проверка утверждений

В вашей тестовой функции вы можете использовать утверждения, чтобы убедиться, что возвращаются ожидаемые ответы.

self.assertEqual(mock_get.call_args_list[0][0][0], 'aurl')
self.assertEqual(mock_get.call_args_list[1][0][0], 'burl')
self.assertEqual(mock_get.call_args_list[2][0][0], 'curl')

Выполняя эти шаги, вы можете эффективно имитировать HTTP-запросы и контролировать ответы в сценариях тестирования Python. Это позволяет вам изолировать и тестировать определенные функции, гарантируя, что внешние зависимости не повлияют на ваши результаты.

Заявление о выпуске Эта статья перепечатана по адресу: 1729424478. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3