2024-05-15 02:11:12 发布
网友
当我通过使用app.test_client().post('/users/login', ....)的nosetests运行测试时,我的应用程序依赖于request.remote_addr,即{}。在
app.test_client().post('/users/login', ....)
request.remote_addr
运行测试时,如何模拟IP(127.0.0.1工作正常)? 我尝试过设置环境变量,用post()方法发送头文件,并翻阅了nosetests、werkzeugs和flasks文档,但我所做的一切都没有奏效。在
一个朋友给了我这个解决方案,它适用于所有请求:
class myProxyHack(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): environ['REMOTE_ADDR'] = environ.get('REMOTE_ADDR', '127.0.0.1') return self.app(environ, start_response) app.wsgi_app = myProxyHack(app.wsgi_app) app.test_client().post(...)
如果愿意,也可以将header参数传递给test_request_context。在
header
test_request_context
示例:
from flask import Flask, request import unittest app = Flask(__name__) app.debug = True app.testing = True @app.route('/') def index(): return str(request.remote_addr) class TestApp(unittest.TestCase): def test_headers(self): user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0" ip_address = 127.0.0.1 headers = { 'Remote_Addr': ip_address, 'User_Agent': user_agent } with self.test_request_context(headers=headers): # Do something pass
当您需要使用其他模块中的request对象执行多个单元测试时,这很有用。在
request
参见test_request_context documentation。在
您可以使用environ_base为底层Werkzeug环境设置选项:
from flask import Flask, request import unittest app = Flask(__name__) app.debug = True app.testing = True @app.route('/') def index(): return str(request.remote_addr) class TestApp(unittest.TestCase): def test_remote_addr(self): c = app.test_client() resp = c.get('/', environ_base={'REMOTE_ADDR': '127.0.0.1'}) self.assertEqual('127.0.0.1', resp.data) if __name__ == '__main__': unittest.main()
一个朋友给了我这个解决方案,它适用于所有请求:
如果愿意,也可以将
header
参数传递给test_request_context
。在示例:
当您需要使用其他模块中的
request
对象执行多个单元测试时,这很有用。在参见test_request_context documentation。在
您可以使用environ_base为底层Werkzeug环境设置选项:
相关问题 更多 >
编程相关推荐