Jak @Vladimir powiedział, nadal można używać AsyncHTTPTestCase
utworzyć/zarządzać instancję Test serwer, ale może jeszcze przetestować WebSockets w taki sam sposób, jak to normalne żądania HTTP - nie tylko nie cukier syntaktyczny pomóc Ci.
Tornado ma również własnego klienta WebSocket, więc nie ma potrzeby (o ile widziałem) korzystania z klienta innej firmy - być może jest to ostatnie dodanie. Więc spróbuj coś takiego:
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
Mam nadzieję, że i tak jest to dobry punkt wyjścia.
http://www.tornadoweb.org/documentation/testing.html –
Tak, widziałem tę stronę. Mogę się mylić, ale sądzę, że asynchroniczne przypadki testowe, które tam dokumentują, dotyczą zwykłych żądań HTTP, a nie WebSockets. –
Wygląda na to, że chcesz użyć klienta, aby trafić serwer testowy. W takim przypadku uważam, że odpowiedź brzmi "nie", nie jest. 'tornado.testing' nie zawiera klienta websocket. Możesz spróbować czegoś takiego jak Selenium. –