python - unit - Obtenga la dirección IP al probar la aplicación del matraz a través de las pruebas de nos
test unitarios flask (2)
Mi aplicación depende de request.remote_addr
que es None
cuando ejecuto pruebas a través de pruebas de detección que usan app.test_client().post(''/users/login'', ....)
.
¿Cómo puedo emular una IP (127.0.0.1 funciona bien) cuando ejecuto pruebas? Intenté establecer variables de entorno, envié encabezados con el método post () y revisé las pruebas de detección de narices, werkzeugs y matraces, pero nada de lo que probé ha funcionado.
Puede establecer opciones para el entorno subyacente de Werkzeug utilizando environ_base :
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()
Un amigo me dio esta solución, que funciona en todas las solicitudes:
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(...)