我如何编写龙卷风风格的旋风测试?

2024-04-29 05:02:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在谷歌上搜索和询问IRC,但都没有结果。Cyclone应该是Twisted的类似龙卷风的协议。但是,Cyclone存储库中没有测试,也没有人编写过如何将tornado.testing.AsyncHTTPTestCase测试转换为针对Cyclone编写的代码。在

  1. 如何启动服务器来测试web界面?在
  2. self.fetch()在哪里?在
  3. Cyclone中描述如何转换现有Tornado应用程序的文档在哪里?在

Tags: 代码self服务器web应用程序协议界面irc
2条回答

不幸的是,目前在旋风中没有任何东西能像tornado.testing.AsyncHTTPTestCase。最好的办法是使用Twisted Trial编写单元测试。一种(有点笨拙)的方法是在测试用例中显式地调用self.listener = reactor.listenTCP(<someport>, YourCycloneApplication())方法中的setUp,在tearDown方法中调用self.listener.stopListening()。在

然后,在测试方法内部,可以使用cyclone.httpclient.fetch来获取页面。 这远非理想。但到目前为止,这是唯一的出路。在

以下是我们目前正在使用的测试我们的cylcone处理器,就像我们对tornado所做的那样:

from twisted.trial.unittest import TestCase
from twisted.internet import defer, reactor
from cyclone import httpclient

# copied from tornado
_next_port = 10000
def get_unused_port():
    """Returns a (hopefully) unused port number."""
global _next_port
    port = _next_port
    _next_port = _next_port + 1
    return port

class TxTestCase(TestCase):

    def get_http_port(self):
        """Returns the port used by the HTTPServer.

        A new port is chosen for each test.
        """
        if self.__port is None:
            self.__port = get_unused_port()
        return self.__port

    def setUp(self, *args, **kwargs):
        self.__port = None
        self._app = self.get_app()
        self._listener = None
        if self._app:
            self._listener = reactor.listenTCP(self.get_http_port(), self._app)
        return TestCase.setUp(self, *args, **kwargs)

    def get_app(self):
        return None

    def tearDown(self):
        if self._listener:
            self._listener.stopListening()

    @defer.inlineCallbacks
    def fetch(self, url, *args, **kwargs):
        response = yield httpclient.fetch('http://localhost:%s%s'%(self.get_http_port(), url), *args, **kwargs)
        defer.returnValue(response)

这样,您就得到了fetch方法;)

也不需要再进行试验了。在

下面是一个用法示例:

^{pr2}$

希望这对你有帮助。在

相关问题 更多 >