python - Websocket 连接的 Pytest 测试

标签 python pytest aiohttp

使用 aiohttp 进行客户端请求和 websocket 连接,我正在尝试找到合适的 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 世界中,针对假服务器进行测试很困难:它至少需要一个单独的线程。异步任务非常简单。

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

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

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

关于python - Websocket 连接的 Pytest 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224765/

相关文章:

python - 如何从 View 中的异步事件循环中获取任务?

python - 在 Python 中构建编译器 : determining integer values

python - 使用 ND 数组选择维度

python - pytest的文件夹结构和导入问题

Python 修补类 - 方法 return_value 返回 MagicMock

python - 运行单个测试有效,但运行多个测试失败 - Flask 和 Pytest

progress-bar - 使用tqdm的asyncio aiohttp进度栏

python - 查询的获取抛出 : 'str' object has no attribute 'kind'

python - 如何在 `python setup.py test` 中运行 py.test 和 linters

python - 在 Docker 中运行的 Aiohttp 和 NGINX