MacOS M2下Python自动化测试requests连接错误求助
解决MacOS M2上Python自动化测试的请求连接错误
问题场景
我是Python新手,在MacOS M2设备上编写自动化测试代码,运行后出现连接错误,尝试了重试和调整超时时间的方案都无效。
测试代码
def test_get_user_active_list(): params = {'filter': '{"createdAt":{"gte":"2023-08-31T21:00:00.000Z","lte": "2023-10-31T21:00:00.000Z"}}', 'range': '2'} res = get(f'user/active-list/{params}')
自定义get方法实现
def get(endpoint, params=None): response = requests.get( URL + endpoint, params, timeout=0.5 ) assert response.status_code == 200 return response.json()
错误信息
raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPSConnectionPool(host='***', port=443): Max retries exceeded with url: /active-list/%7B'filter':%20'%7B%22createdAt%22:%7B%22gte%22:%222023-08-31T21:00:00.000Z%22,%22lte%22:%20%222023-10-31T21:00:00.000Z%22%7D%7D',%20'range':%20'2'%7D (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x106ee35d0>: Failed to resolve 'api.dev.shadow.funnel-fuel.comuser' ([Errno 8] nodename nor servname provided, or not known)"))
尝试过的无效方案
- 方案一:添加重试机制
from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry session = requests.Session() retry = Retry(connect=3, backoff_factor=1) adapter = HTTPAdapter(max_retries=retry) session.mount('http://', adapter) session.mount('https://', adapter) session.get(url)
- 方案二:调整超时时间
r = requests.get(url, timeout=3)
核心问题与解决方案
核心问题
- URL拼接错误:错误信息里的
api.dev.shadow.funnel-fuel.comuser说明域名和路径直接连在一起,没有用斜杠分隔,导致DNS解析失败。 - 参数传递方式错误:把
params字典直接拼接到endpoint路径中,而不是通过requests.get的params参数传递,导致路径格式完全错误。
解决方案
- 修正URL格式:确保全局变量
URL末尾带斜杠,比如URL = "https://api.dev.shadow.funnel-fuel.com/",或者endpoint开头带斜杠,避免拼接时域名和路径连在一起。 - 正确传递参数:将
params作为第二个参数传给自定义的get方法,而非拼接到路径中;同时把参数里的"替换为正常双引号。
修正后的测试代码:
def test_get_user_active_list(): params = {'filter': '{"createdAt":{"gte":"2023-08-31T21:00:00.000Z","lte": "2023-10-31T21:00:00.000Z"}}', 'range': '2'} res = get('user/active-list', params=params)
自定义get方法无需修改,只要保证URL格式正确即可。
为什么之前的方案无效
重试机制和超时调整都是针对连接超时或重试逻辑的优化,但你的问题根源是URL格式错误导致DNS解析失败,这些方案无法解决格式问题,因此无效。
内容的提问来源于stack exchange,提问作者Yurii23
相关产品推荐
相关产品推荐

