1

Twisted を使用して URL からデータをダウンロードする関数のテストを作成しています (twisted.web.client.getPage については知っていますが、これはいくつかの追加機能を追加します)。いずれにせよ、プロジェクト全体で使用しているため、この特定のテストにのみ Twisted Trial を使用するのは適切ではないように思われるので、nosetests を使用したいと考えています。だから私がやろうとしていることは次のようなものです:

from nose.twistedtools import deferred

@deferred()
def test_download(self):
    url = 'http://localhost:8000'

    d = getPage(url)

    def callback(data):
        assert len(data) != 0

    d.addCallback(callback)
    return d

localhost:8000 でテスト サーバーをリッスンします。問題は、常に twisted.internet.error.DNSLookupError を受け取ることです。

DNSLookupError: DNS lookup failed: address 'localhost:8000' not found: [Errno -5] No address associated with hostname.

これを修正する方法はありますか?実際にnose.twistedtoolsを使っている人はいますか?

更新: より完全なトレースバック

Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/nose-0.11.2-py2.6.egg/nose/twistedtools.py", line 138, in errback
failure.raiseException()
File "/usr/local/lib/python2.6/dist-packages/Twisted-9.0.0-py2.6-linux-x86_64.egg/twisted/python/failure.py", line 326, in raiseException
raise self.type, self.value, self.tb
DNSLookupError: DNS lookup failed: address 'localhost:8000' not found: [Errno -5] No address associated with hostname.

更新 2

私の悪い、それは getPage の実​​装のようです、私は次のようなことをしていました:

obj = urlparse.urlparse(url) netloc = obj.netloc そして、渡すべきだったときに工場に netloc を渡しますnetloc.split(':')[0]

4

1 に答える 1

2

getPage関数が URL を正しく解析していますか? エラー メッセージは、DNS ルックアップを実行するときにホスト名とポートを一緒に使用していることを示唆しているようです。

あなたgetPageは に似ていると言いますがtwisted.web.client.getPage、この完全なスクリプトで使用するとうまくいきます。

#!/usr/bin/env python
from nose.twistedtools import deferred
from twisted.web import client
import nose

@deferred()
def test_download():
    url = 'http://localhost:8000'

    d = client.getPage(url)

    def callback(data):
        assert len(data) != 0

    d.addCallback(callback)
    return d

if __name__ == "__main__":
    args = ['--verbosity=2', __file__]
    nose.run(argv=args)

ホームディレクトリで単純なhttpサーバーを実行している間:

$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

ノーズ テストでは、次の出力が得られます。

.
----------------------------------------------------------------------
Ran 1 test in 0.019s

OK
于 2010-10-05T13:05:30.470 に答える