使用 Telegram 客户端进行 bot 测试(不是 bot api)

Use Telegram client for bot testing (not bot api)

我现在正在构建一个 Telegram 机器人,并且正在使用 Telegram 客户端对其进行手动测试。 有没有一种方法可以像构建机器人一样发送客户端消息?

我知道我可以在代码中构建单元测试,这不是我想要的。

我问了同样的问题,没有找到答案。所以我制作了两个用于测试电报机器人的库:

  1. telegram-test 如果你使用 node-telegram-bot-api 制作机器人,则可以使用
  2. telegram-test。它捕获机器人请求并假装我们有来自客户的有效答案。
  3. telegram-test-api 可以与任何机器人和任何技术堆栈一起使用。它是一个模拟 Telegram API 的网络服务器。您可以使用任何客户端向它发出客户端请求,协议非常简单。

这两个项目目前都处于深度 alpha 版本,但我还没有看到更好的东西。您可以阅读有关这些项目的文章(俄语)here

或者,您可以使用 MTProto Telegram 用户帐户库,例如 Python 中的 MadelineProto in PHP, Telethon and Pyrogram 3. 您可以使用这些库来自动化用户帐户以测试您的机器人。

请注意,如果您过于频繁地发送消息,您可能会遇到洪水禁令。

Is there a way I can send client messages in the same way I can build bots?

这可以通过 Telegram API(与 Telegram Bot API 不同)完成,它基本上是一个 API 来构建您自己的 Telegram 客户端。首先,您应该注册一个“应用程序”,然后您可以像使用任何其他客户端一样登录到您的应用程序。

现在,您可能不应该挖掘 API 本身,而是使用库来节省时间。最受欢迎的是 Telethon and you can find various examples of its usage. Depeding on what language you use to create a bot you may want to use some other libraries, but most of dedicated ones are actually wrappers of Telethon, an example is Gramjs(但我建议首先尝试 Telethon,因为它的文档更专注并且更容易 google 用例)。

不过,您应该记住,这种方法适用于仅涉及一个用户的单元测试(您可以使用您的帐户登录),不适用于多用户场景并且不适合高负载测试。

这是一个简单的示例,说明您可以使用 Telethon 做什么:

from telethon import TelegramClient

# you will get these when registering your client at https://my.telegram.org/apps
api_id = 12345
api_hash = '0123456789abcdef0123456789abcdef'

client = TelegramClient('arbitrary_session_name', api_id, api_hash)
client.start()

print(client.get_me().stringify())

client.send_message('username', 'Hello! Talking to you from Telethon')

我为 python-telegram-bot 写了 unit-test 框架来做这样的事:

def test_echobot_message(bot, user):
    user.send_message('testing message')
    message = user.get_message()
    assert message['text'] == 'testing message'

https://github.com/dontsovcmc/telegram-bot-unittest

我创建了 Web 服务器并使用其本地 url 调用经过测试的机器人。现在我可以发消息和查看答案了。