4

私はグーグルでIRCに尋ねてきましたが、役に立ちませんでした。Cycloneは、Twisted の Tornado に似たプロトコルであると想定されています。tornado.testing.AsyncHTTPTestCaseしかし、Cyclone リポジトリにはテストがなく、テストを変換して Cyclone に対して書かれたコードを実行する方法を誰も書いていません。

  1. Web インターフェイスをテストするためにサーバーを起動するにはどうすればよいですか?
  2. はどこself.fetch()ですか?
  3. 既存の Tornado アプリを変換する方法を説明する Cyclone のドキュメントはどこにありますか?
4

2 に答える 2

2

残念ながら、tornado.testing.AsyncHTTPTestCase現時点ではサイクロンのようなものはありません。あなたの最善の策は、Twisted Trialを使用して単体テストを作成することです。1 つの (少しぎこちない) アプローチは、テスト ケース内self.listener = reactor.listenTCP(<someport>, YourCycloneApplication())のメソッドで明示的に呼び出し、メソッドで呼び出します。setUpself.listener.stopListening()tearDown

次に、テスト メソッド内で、 を使用cyclone.httpclient.fetchしてページを取得できます。これは理想とはかけ離れています。しかし、今のところ、これが唯一の方法です。

于 2012-10-10T09:31:10.430 に答える
2

以下は、竜巻で行ったように、cylcone ハンドラーをテストするために現在使用しているものです。

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メソッドを元に戻します;)

また、トライアルを使用する必要はもうありません。

使用例を次に示します。

from twisted.internet import defer

class Test(TxTestCase):

    def get_app(self):
        return MyApplication()

    @defer.inlineCallbacks
    def some_test_method(self):
        res = yield self.fetch('/path/to/resource')
        self.assertEquals(200, res.code)

それがあなたを助けることを願っています。

于 2013-02-20T10:47:54.053 に答える