我使用Tornado并编写一些测试。一切都很好。
然后我使用nginx代理:
server {
listen 80;
server_name mine.local;
location / {
proxy_pass http://localhost:8000;
}
}
效果很好。但
在测试中,我使用AsyncHTTPTestCase
和get_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。
怎么做?
谢谢!
答案 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