2012-02-17 6 views
7

मैं ऐसे प्रोजेक्ट पर काम कर रहा हूं जो टॉरनाडो की वेबस्केट कार्यक्षमता के साथ काम करता है। मुझे एसिक्रोनस कोड के साथ काम करने के लिए एक अच्छी तरह से प्रलेखन दिखाई देता है, लेकिन इस बात पर कुछ भी नहीं है कि इसका उपयोग यूनिट परीक्षण बनाने के लिए कैसे किया जा सकता है जो उनके वेबसॉकेट कार्यान्वयन के साथ काम करता है।वेबस्केट यूनिट परीक्षण बनाने के लिए आप tornado.testing का उपयोग कैसे करते हैं?

क्या tornado.testing ऐसा करने की कार्यक्षमता प्रदान करता है? यदि हां, तो क्या कोई ऐसा संक्षिप्त उदाहरण प्रदान कर सकता है कि इसे कैसे किया जाए?

अग्रिम धन्यवाद।

+0

http://www.tornadoweb.org/documentation/testing.html –

+0

हाँ मैंने उस पृष्ठ को देखा। मैं गलत हो सकता था, लेकिन मेरा मानना ​​है कि उनके द्वारा दस्तावेज किए गए एसिंक्रोनस टेस्ट केस नियमित HTTP अनुरोधों के लिए हैं, न कि वेबस्केट्स। –

+0

ऐसा लगता है कि आप वास्तव में एक परीक्षण सर्वर हिट करने के लिए क्लाइंट का उपयोग करना चाहते हैं, इस मामले में मुझे लगता है कि उत्तर नहीं है, ऐसा नहीं है। 'tornado.testing' में एक वेबसाईट क्लाइंट शामिल नहीं है। आप सेलेनियम की तरह कुछ कोशिश कर सकते हैं। –

उत्तर

3

मैं tornado.websocket.WebSocketHandler आधारित संचालकों पर कुछ इकाई परीक्षण को लागू करने का प्रयास किया और निम्न परिणाम मिल गया है:

सभी AsyncHTTPTestCase पहले निश्चित रूप से वेब सॉकेट समर्थन की कमी है।

फिर भी, कोई भी कम से कम IOLoop और एप्लिकेशन सामग्री को प्रबंधित करने के लिए इसका उपयोग कर सकता है। दुर्भाग्यवश, टर्ननाडो के साथ प्रदान किए गए कोई भी वेबसेट क्लाइंट नहीं है, इसलिए यहां साइड-विकसित लाइब्रेरी दर्ज करें।

जेफ बलोग के tornado websocket client का उपयोग कर unit test on Web Sockets यहां है।

+0

"छोटे फिक्स" टिप्पणी को हटाया जा सकता है क्योंकि इसे पहले से उल्लिखित अपस्ट्रीम रिपोजिटरी में विलय कर दिया गया है। – Joakim

+1

टॉरनाडो में एक वेबसाइटकेट क्लाइंट है: tornado.websocket.websocket_connect जो WebSocketClientConnection ऑब्जेक्ट को तुरंत चालू करता है। –

1

This answer (और प्रश्न) ब्याज का हो सकता है, मैं क्लाइंट और टोरनाडो के AsyncTestCase के लिए ws4py का उपयोग करता हूं जो पूरी चीज को सरल बनाता है।

+0

मुझे टर्ननाडो में एसिंक वेबसाइकिलों का परीक्षण करने का एक पूरा उदाहरण देखना अच्छा लगेगा। क्या आपके पास कहीं ब्लॉग पोस्ट है? – Clint

+0

हाय, नहीं, मैं नहीं करता, हमने अभी एक और पायथन मॉड्यूल के लिए ws4py गिरा दिया है (अभी इसका नाम याद नहीं कर सकता है)। हमें इस बदलाव के कारण कुछ समायोजन करना है। मैं आपको सूचित करूंगा (यहां) जब हमारे पास कुछ काम फिर से होगा (एक या दो सप्ताह में) – Pedru

+0

ठीक है, [यहां] (https://www.assembla.com/code/python_websocket_testing/git/nodes) यह है। यह सिंक वेब सॉकेट अनुरोधों का उपयोग करता है (प्रत्येक अनुरोध के लिए हमें एक प्रतिक्रिया प्राप्त होती है), लेकिन आप इसे कुछ संशोधनों के साथ असीमित बना सकते हैं। वेब सॉकेट क्लाइंट लाइब्रेरी [यहां] से आता है (https://github.com/liris/websocket-client/tree/py3) यह python3 के लिए है, लेकिन एक पायथन 2 संस्करण भी है। b.t.w. कोई टर्ननाडो घटक नहीं है (मुझे लगता है कि आपका इरादा टर्ननाडो सर्वर का परीक्षण करना है?) – Pedru

10

रूप @Vladimir कहा, तुम अब भी AsyncHTTPTestCase का उपयोग बनाने के लिए/परीक्षण वेबसर्वर उदाहरण प्रबंधन कर सकते हैं, लेकिन आप अभी भी WebSockets ठीक उसी तरह आप सामान्य HTTP अनुरोध के रूप में परीक्षण कर सकते हैं - वहाँ बस कोई वाक्यात्मक चीनी आपकी मदद के लिए।

टॉरनाडो का अपना वेबस्केट क्लाइंट भी है, इसलिए किसी तीसरे पक्ष के क्लाइंट का उपयोग करने के लिए कोई आवश्यकता नहीं है (जहां तक ​​मैंने देखा है) - शायद यह हालिया जोड़ा है। तो कुछ ऐसा प्रयास करें:

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 

उम्मीद है कि यह एक अच्छा प्रारंभिक बिंदु है।

संबंधित मुद्दे