我正在尝试为我正在接受的Tornado代码库创建测试。我让项目运行正常,但我写的第一个测试是连接拒绝错误。
以下是代码:
import unittest, os, os.path, sys, urllib
import tornado.options
from tornado.options import options
from tornado.testing import AsyncHTTPTestCase
APP_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
sys.path.append(os.path.join(APP_ROOT, '..'))
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
from main import Application
app = Application()
def clear_db(app=None):
os.system("mysql -u user --password=pw --database=testdb < %s" % (os.path.join(APP_ROOT, 'db', 'schema.sql')))
class TestHandlerBase(AsyncHTTPTestCase):
def setUp(self):
clear_db()
super(TestHandlerBase, self).setUp()
def get_app(self):
return app
def get_http_port(self):
return 5000
class TestRootHandler(TestHandlerBase):
def test_redirect(self):
response = self.fetch(
'/',
method='GET',
follow_redirects=False)
print response
self.assertTrue(response.headers['Location'].endswith('/login'))
这是我得到的回复:
HTTPResponse(_body=None, buffer=None, code=599,
effective_url='http://localhost:5000/',
error=HTTPError('HTTP 599: [Errno 61] Connection refused',),
headers={}, reason='Unknown',
request=<tornado.httpclient.HTTPRequest object at 0x10c363510>,
request_time=0.01304006576538086, time_info={})
有关可能导致错误的原因的任何想法?是否有一个步骤我缺少让一切运行测试?感谢!!!
答案 0 :(得分:4)
不要覆盖get_http_port
。为每个测试设置一个带有新端口的新HTTP服务器,因此每次都不会为5000,即使这是您设置中的内容。
答案 1 :(得分:0)
我同意科尔·麦克林的回答
如果您需要配置自定义URL,请覆盖下面的AsyncHTTPTestCase方法
def get_url(self, path):
url = 'http://localhost:8080' + path
return url
在这种情况下,默认情况下,该URL将为 http://localhost:8080 。