нос питона и витой - PullRequest
       16

нос питона и витой

1 голос
/ 05 октября 2010

Я пишу тест для функции, которая загружает данные из URL с помощью Twisted (я знаю о twisted.web.client.getPage, но этот добавляет некоторые дополнительные функции).В любом случае, я хочу использовать тесты на нос, так как я использую его на протяжении всего проекта, и не представляется целесообразным использовать Twisted Trial только для этого конкретного теста.Так что я пытаюсь сделать что-то вроде:

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

На локальном хосте: 8000 слушает тестовый сервер.Проблема в том, что я всегда получаю twisted.internet.error.DNSLookupError

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

Есть ли способ, как это исправить?Кто-нибудь на самом деле использует nose.twistedtools?

Обновление: более полный traceback

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

Myплохо, кажется, в реализации getPage, я делал что-то вроде:

obj = urlparse.urlparse(url) netloc = obj.netloc и передавал netloc на завод, когда я должен был передать netloc.split(':')[0]

1 Ответ

2 голосов
/ 05 октября 2010

Вы уверены, что ваша функция 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
...