收到错误:tornado.ioloop.TimeoutError:5秒后操作超时。怎么办?

时间:2016-11-21 14:16:24

标签: python-3.x tornado

HY。我尝试为webHander编写测试:

statFunc

运行测试时收到错误:

引发TimeoutError('%s秒'%timeout后的操作超时)

tornado.ioloop.TimeoutError:操作在5秒后超时

2 个答案:

答案 0 :(得分:1)

设置ASYNC_TEST_TIMEOUT环境变量。

  

运行IOLoop,直到调用stop或超时为止。

     

如果超时,将抛出异常。默认超时为5秒;它可以使用timeout关键字参数覆盖,也可以使用ASYNC_TEST_TIMEOUT环境变量全局覆盖。 - 来自http://www.tornadoweb.org/en/stable/testing.html#tornado.testing.AsyncTestCase.wait

答案 1 :(得分:0)

您需要使用AsyncHTTPTestCase,而不仅仅是AsyncTestCase。一个很好的例子是在龙卷风的自我测试中:

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

您需要实现get_app以使用您编写的RequestHandler返回应用程序。然后,做一些像:

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提供了方便的功能,因此您无需使用" gen.coroutine"来编写协同程序。和"收益"。

另外,我注意到你在"#"之后提取了一个带有片段的网址,请注意在现实生活中,网页浏览器在将URL发送到服务器时不包含该片段。因此,您的服务器只会将网址视为" //"而不是" //#/ login"。