2016-11-21 20 views
0

Hy。私はwebHanderのためにテストを書いてみる:受信エラー:tornado.ioloop.TimeoutError:操作が5秒後にタイムアウトしました。何をする必要がありますか?

テストを実行しているときにエラーを受け取っ
import pytest 
import tornado 
from tornado.testing import AsyncTestCase 
from tornado.httpclient import AsyncHTTPClient 
from tornado.web import Application, RequestHandler 
import urllib.parse 


class TestRESTAuthHandler(AsyncTestCase): 
@tornado.testing.gen_test 
def test_http_fetch_login(self): 
    data = urllib.parse.urlencode(dict(username='admin', password='123456')) 
    client = AsyncHTTPClient(self.io_loop) 
    response = yield client.fetch("http://localhost:8080//#/login", method="POST", body=data) 
    # Test contents of response 
    self.assertIn("Automation web console", response.body) 

レイズTimeoutError(%タイムアウト '操作は%sの秒後にタイムアウトになりました')

tornado.ioloop.TimeoutError:操作は5秒後にタイムアウトします

+0

localhostポート8080でリッスンしているHTTPサーバーはありますか?それは応答しますか? –

+0

番号。私はそれで新しいです。それを行うには?多分私はここで竜巻のサーバーを開始する必要がありますか?私はテストコードに何かがないと思う。 – Serhiy

答えて

0

AsyncTestCaseだけでなく、AsyncHTTPTestCaseを使用する必要があります。良い例は、トルネードの自己テストである:

https://github.com/tornadoweb/tornado/blob/d7d9c467cda38f4c9352172ba7411edc29a85196/tornado/test/httpclient_test.py#L130-L130

はあなたが書いたのRequestHandlerを使用してアプリケーションを返すようにget_appを実装する必要があります。その後、のようなものです:あなたは「gen.coroutine」と「歩留まり」とコルーチンを書く必要はありませんので、

class TestRESTAuthHandler(AsyncHTTPTestCase): 
    def get_app(self): 
     # implement this 
     pass 

    def test_http_fetch_login(self): 
     data = urllib.parse.urlencode(dict(username='admin', password='123456')) 
     response = self.fetch("http://localhost:8080//#/login", method="POST", body=data) 
     # Test contents of response 
     self.assertIn("Automation web console", response.body) 

AsyncHTTPTestCaseは、便利な機能を提供します。

また、「#」の後にフラグメントを含むURLを取得していることに気付きました。実際のWebブラウザでは、URLをサーバーに送信する際にフラグメントが含まれません。したがって、あなたのサーバはURLを "//#/ login"ではなく "//"としか見ません。

関連する問題