Tornado使用nginx代理运行测试

时间:2015-09-30 19:58:56

标签: nginx proxy lua tornado

我使用Tornado并编写一些测试。一切都很好。

然后我使用nginx代理:

server {
    listen 80;
    server_name mine.local;
    location / {

      proxy_pass http://localhost:8000;
    }
}

效果很好。但

在测试中,我使用AsyncHTTPTestCaseget_app方法,该方法返回应用

问题是:默认情况下测试“看起来”127.0.0.1:8000 - Tornado 在端口8000上启动,所有self.app.reverse_url('name')返回 127.0.0.1:8000/路径

但我需要,测试的所有请求都转到nginx(代理):

mine.local /路径

主机中,我有:

mine.local      127.0.0.1

在nginx中我使用了一些lua脚本,它们可以完成所有脏工作。所以我需要,测试在 mine.local 上发出请求,而不是默认127.0.0.1:8000。

怎么做?

谢谢!

1 个答案:

答案 0 :(得分:0)

def bind_unused_port():
    """Binds a server socket to an available port on localhost.

    Returns a tuple (socket, port).
    """
    [sock] = netutil.bind_sockets(8000, 'localhost', family=socket.AF_INET)
    port = sock.getsockname()[1]
    return sock, port

class MineTestCase(AsyncHTTPTestCase):
    def setUp(self):
        super(AsyncHTTPTestCase, self).setUp()
        sock, port = bind_unused_port()
        self.__port = port

        self.http_client = self.get_http_client()
        self._app = self.get_app()
        self.http_server = self.get_http_server()
        self.http_server.add_sockets([sock])

    def get_url(self, path):
        url = '%s://%s:%s%s' % (self.get_protocol(), 'mine.local',
                                80, path)
        return url