【发布时间】:2017-03-14 17:35:23
【问题描述】:
我正在尝试测试这个使用 Tornado 构建的 WebSocket 处理程序,我称之为main.py
import tornado.websocket
class SocketHandler(tornado.websocket.WebSocketHandler):
def open(self):
print(' [T] Websocket connection open')
def on_message(self, message):
print(' [T] Websocket message received: %s' % message)
def on_close(self):
print(' [T] Websocket connection closed')
使用内置模块 tornado.testing 并根据一个简单的 AsyncHTTPTestCase 示例进行一些修改:
import tornado.testing
import tornado.web
import tornado.websocket
from main import SocketHandler
class TestWebSockets(tornado.testing.AsyncHTTPTestCase):
def get_app(self):
return tornado.web.Application([(r'/', SocketHandler)])
@tornado.testing.gen_test
async def test_async_client(self):
url = "ws://localhost:" + str(self.get_http_port()) + "/"
client = await tornado.websocket.websocket_connect(url)
client.write_message('message')
client.close()
此测试通过。但是,当我运行pytest --cov-report term-missing --cov=. 时,它指出main.py 的最后一行没有到达,即服务器没有关闭。
有人知道发生了什么吗?我已经尝试在关闭后添加延迟但没有成功。
【问题讨论】:
标签: python unit-testing websocket code-coverage tornado