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

使用python-telegram-bot如何构造假用户测试群聊内机器人命令响应

python-telegram-bot 命令测试实现方案

User和Chat实例不需要调用额外方法关联,你只需要按照Telegram API的结构手动构造Update对象,将这两个实例填充到对应字段后喂给机器人的处理流程即可,这也是官方推荐的单元测试方案,无需发起真实网络请求。

具体实现步骤如下:

  1. 导入依赖类,构造基础的Chat、User模拟对象
from datetime import datetime
from telegram import Chat, User, Message, Update

chat = Chat(id=0, type="group")
user = User(id=123, first_name="Sam", is_bot=False)
  1. 构造模拟消息对象,关联用户、聊天和命令内容
mock_message = Message(
    message_id=1,
    from_user=user,
    chat=chat,
    text="/start", # 替换为你要测试的命令内容
    date=datetime.now()
)
  1. 构造Update对象,这是机器人处理流程的标准输入单位
mock_update = Update(
    update_id=1000,
    message=mock_message
)
  1. 将模拟Update喂给你的机器人实例触发处理逻辑
# 假设你已经初始化了Application实例:application = Application.builder().token("你的token").build()
await application.process_update(mock_update)

如果需要校验机器人的返回内容,可以通过替换bot.send_message方法捕获输出,示例如下(以pytest为例):

captured_replies = []
def capture_send_message(chat_id, text, **kwargs):
    captured_replies.append({"chat_id": chat_id, "content": text})
    # 返回模拟的Message对象避免后续逻辑报错
    return Message(message_id=2, chat=chat, date=datetime.now(), text=text)

# 替换原生的send_message方法
monkeypatch.setattr(application.bot, "send_message", capture_send_message)

# 执行测试逻辑
await application.process_update(mock_update)

# 断言返回结果符合预期
assert len(captured_replies) == 1
assert captured_replies[0]["content"] == "预期的返回内容"

补充说明:你之前尝试调用的User.send_message是官方提供的主动向该用户发送私聊消息的接口,本身不具备模拟用户发消息的能力,测试场景无需调用这类真实请求接口。

内容的提问来源于stack exchange,提问作者juju

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:06:01