如何提交模拟网址?

2024-06-26 13:43:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我无法使用请求来测试我的表单。在

add_playlist = self.client.post(reverse('new-playlist'),
                                    data={'url': 'https://dailyiptvlist.com/dl/it-m3uplaylist-2018-03-11-1.m3u'})

我需要为'https://dailyiptvlist.com/dl/fr-m3uplaylist-2018-03-06.m3u'创建一个模拟响应,以便在不维护url的情况下测试添加通道是可以接受的。所以,我需要为这个url创建一个模拟响应。我无法想象怎么做。请帮帮我。在


Tags: httpsselfcomclientaddurl表单new
1条回答
网友
1楼 · 发布于 2024-06-26 13:43:13

我想您可以尝试一下这个库(responses请参见https://github.com/getsentry/responses),它允许您使用模拟响应测试任意请求场景。在

想法很简单:

  • 你把你想要的答案硬编码在一些字典里
  • 您创建了某个url的mock,这样真正的请求不在web中的某个地方,而是使用模拟数据和提供的状态代码等

示例测试-正在测试我的方法reverse_geocoding(latitude, longitude)从Google Maps API获得的整个响应中提取所需的内容:

import json
import responses

from django.conf import settings
from django.test import TestCase

from utils.geocoding import reverse_geocoding, REVERSE_GEOCODING_URL


RESPONSE_GEOCODING_MOCK = {
    'results': [
        {
            'address_components': [
                {'long_name': '74', 'short_name': '74', 'types': ['street_number']},
                {'long_name': 'Mickiewicza', 'short_name': 'Mickiewicza', 'types': ['route']},
                {'long_name': 'Żoliborz', 'short_name': 'Żoliborz', 'types': ['political', 'sublocality', 'sublocality_level_1']},
                {'long_name': 'Warszawa', 'short_name': 'Warszawa', 'types': ['locality', 'political']},
                {'long_name': 'Warszawa', 'short_name': 'Warszawa', 'types': ['administrative_area_level_2', 'political']},
                {'long_name': 'mazowieckie', 'short_name': 'mazowieckie', 'types': ['administrative_area_level_1', 'political']},
                {'long_name': 'Poland', 'short_name': 'PL', 'types': ['country', 'political']}
            ],
            'formatted_address': 'Mickiewicza 74, Warszawa, Poland',
            'geometry': {'location': {'lat': 52.2790223, 'lng': 20.980648},
                         'location_type': 'ROOFTOP',
                         'viewport': {'northeast': {'lat': 52.2803712802915, 'lng': 20.9819969802915},
                                      'southwest': {'lat': 52.2776733197085, 'lng': 20.9792990197085}}
                         },
            'place_id': 'ChIJxXoMrOfLHkcRBAFsrjKGcMc',
            'types': ['street_address']
        }
    ],
    'status': 'OK'
}


class TestGoogleAPIGeocodingConsumer(TestCase):

    @responses.activate
    def test_geocoding(self):
        latitude, longitude = 52.27904, 20.980366
        responses.add(
            responses.GET,
            REVERSE_GEOCODING_URL.format(
                latitude=latitude,
                longitude=longitude,
                api_key=settings.GOOGLE_API_KEY
            ),
            body=json.dumps(RESPONSE_GEOCODING_MOCK),
            content_type="application/json")

        response = reverse_geocoding(latitude, longitude)
        self.assertEqual(response, {'address_city': 'Warszawa',
                                    'address_country': 'Poland',
                                    'address_number': '74',
                                    'address_street': 'Mickiewicza'})

供参考的试验方法:

^{pr2}$

相关问题 更多 >