You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pytest测试fetch_recent_klines去重逻辑失败:未触发陈旧API返回[]

问题:测试Bybit V5 API K线去重逻辑失败

背景

我正在测试从Bybit V5 API获取1分钟K线数据的fetch_recent_klines()函数,该函数设计为收到重复数据块时终止并返回[],以此检测陈旧API响应。

🔍 去重逻辑

chunk_key = hashlib.md5(str([row[0] for row in chunk]).encode()).hexdigest()
if chunk_key in seen_chunks:
    return []

模拟测试设置

def build_chunk():
    return [[str(1717382400000), "", "", "", "", "1"] for _ in range(100)]

mock_response = {"result": {"list": build_chunk()}}
responses = [mock_response, mock_response, mock_response]

def side_effect(*args, **kwargs):
    if responses:
        return MagicMock(status_code=200, json=lambda: responses.pop(0))
    return MagicMock(status_code=200, json=lambda: {"result": {"list": []}})

测试代码

with patch("scan.requests.get", side_effect=side_effect):
    result = scan.fetch_recent_klines("BTCUSDT", total=315)
    assert result == []

问题详情

尽管模拟的数据块完全相同、哈希仅基于时间戳,且真实API环境下代码有效,但函数从未返回[],去重逻辑未触发。不过调试消息显示:[DEBUG] Duplicate chunk detected, breaking early.

已尝试方案

  • 调整total=参数(101、200、315)
  • 仅对时间戳进行哈希
  • 验证行内容完全一致
  • 将json=lambda:替换为直接字典

即便做了这些尝试,测试仍返回完整K线数据,未触发提前终止。请问如何编写测试以验证陈旧数据去重逻辑有效?MagicMock是否会以某种微妙方式干扰哈希或身份比较?


内容的提问来源于stack exchange,提问作者b-Water

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:28:17