1

我正在尝试为我正在使用的 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={})

关于可能导致错误的任何想法?我是否缺少一个步骤来让所有东西都运行以进行测试?谢谢!!!

4

2 回答 2

4

不要覆盖get_http_port. 每次测试都会设置一个具有新端口的新 HTTP 服务器,因此不会每次都是 5000,即使这是您的设置。

于 2013-08-10T19:51:13.323 回答
0

我同意 Cole Maclean 的回答

如果需要配置自定义 URL,则覆盖下面的 AsyncHTTPTestCase 方法

def get_url(self, path):
    url = 'http://localhost:8080' + path
    return url

在这种情况下,默认情况下这会将 URL 设为http://localhost:8080

于 2019-07-11T12:24:25.703 回答