如何使用tornado.testing来创建WebSocket单元测试



我正在做一个使用toronto的websocket功能的项目。我看到了大量关于处理异步代码的文档,但没有任何关于如何使用这些文档来创建与WebSocket实现一起工作的单元测试的内容。

tornado.testing是否提供了执行此操作的功能?如果是的话,有人能提供一个如何实现这一目标的简单例子吗?

提前谢谢。

正如@Vladimir所说,您仍然可以使用AsyncHTTPTestCase来创建/管理测试Web服务器实例,但您仍然可以以与正常HTTP请求大致相同的方式测试WebSockets-只是没有语法糖可以帮助您。

Tornado也有自己的WebSocket客户端,所以没有必要(就我所见)使用第三方客户端——也许这是最近添加的。所以试试这样的东西:

import tornado
class TestWebSockets(tornado.testing.AsyncHTTPTestCase):
    def get_app(self):
        # Required override for AsyncHTTPTestCase, sets up a dummy
        # webserver for this test.
        app = tornado.web.Application([
            (r'/path/to/websocket', MyWebSocketHandler)
        ])
        return app
    @tornado.testing.gen_test
    def test_websocket(self):
        # self.get_http_port() gives us the port of the running test server.
        ws_url = "ws://localhost:" + str(self.get_http_port()) + "/path/to/websocket"
        # We need ws_url so we can feed it into our WebSocket client.
        # ws_url will read (eg) "ws://localhost:56436/path/to/websocket
        ws_client = yield tornado.websocket.websocket_connect(ws_url)
        # Now we can run a test on the WebSocket.
        ws_client.write_message("Hi, I'm sending a message to the server.")
        response = yield ws_client.read_message()
        self.assertEqual(response, "Hi client! This is a response from the server.")
        # ...etc

希望这是一个好的起点。

我尝试在基于tornado.websocket.WebSocketHandler的处理程序上实现一些单元测试,得到了以下结果:

首先,AsyncHTTPTestCase肯定缺乏对web套接字的支持。

尽管如此,至少可以使用它来管理IOLoop和应用程序,这是非常重要的。不幸的是,没有提供龙卷风的WebSocket客户端,所以在这里进入侧开发库。

以下是使用Jef Balog的toronto websocket客户端对Web套接字进行的单元测试。

这个答案(和问题)可能很有趣,我使用ws4py作为客户端和Tornado的AsyncTestCase,这简化了整个过程。

相关内容

  • 没有找到相关文章

最新更新