websocket 连接的 Pytest 测试

Pytest testing of a websocket connection

对客户端请求和 websocket 连接使用 aiohttp 我正在尝试找到合适的 pytest 实现。

对于客户请求,我使用 aioresponses https://pypi.python.org/pypi/aioresponses/0.1.2

对于模拟 websocket 连接,我不知道该怎么做。有人有什么建议吗?

谢谢!

不要模拟,而是使用伪造的服务器来测试客户端(就像你可能使用 aiohttp 提供的测试客户端来测试服务器)。

假客户端示例:https://github.com/aio-libs/aiohttp/blob/master/examples/fake_server.py

该示例没有演示 websockets 的用法,但我敢肯定您已经理解我的想法并且有足够的知识将所示方法扩展到 websockets。

[编辑]

在 WSGI 世界中,针对假服务器进行测试很困难:它至少需要一个单独的线程。它 asyncio 任务非常简单。

因此请不要误会我的意思。我不建议反对 aioresponses 等,我只是想强调:在 asyncio 世界中,对模拟响应的需求非常低。

基于假服务器的方法更加可靠:您正在测试整个传输层,而不仅仅是模拟(实际上是猴子补丁)数据。

像 aioresponse 这样的库使用 aiohttp 的私有属性 类,下一个 aiohttp 版本可能会破坏这种行为。此外,它可能已经在一些罕见的用例中被破坏了。