python - relativo - could not load type from assembly version 1.0 0.0 culture neutral publickeytoken null
Encontrar el error real en un error de prueba Webtest (2)
Estoy usando Python y Webtest para probar una aplicación WSGI. Encontré que las excepciones generadas en el código del controlador tienden a ser tragadas por Webtest, que luego genera un genérico:
AppError: Bad response: 500 Internal Server Error
¿Cómo puedo indicarle que genere o imprima el error original que causó esto?
Si bien la respuesta de clj ciertamente funciona, es posible que aún desee acceder a la respuesta en su caso de prueba. Para hacer esto, puede usar expect_errors=True
(de la documentación de webtest ) cuando realice su solicitud a TestApp, y de esa manera no se generará el error AppError. Aquí hay un ejemplo en el que estoy esperando un error 403:
# attempt to access secure page without logging in
response = testapp.get(''/secure_page_url'', expect_errors=True)
# now you can assert an expected http code,
# and print the response if the code doesn''t match
self.assertEqual(403, response.status_int, msg=str(response))
Su marco y servidor WSGI contiene controladores que detectan excepciones y realizan alguna acción (hacer un seguimiento de pila en el cuerpo, registrar el seguimiento de retroceso en un archivo de registro, etc.). La prueba web, de forma predeterminada, no muestra la respuesta real, lo que podría ser útil si su marco de trabajo representa un seguimiento de pila en el cuerpo. Uso la siguiente extensión de Webtest cuando necesito ver el cuerpo de la respuesta:
class BetterTestApp(webtest.TestApp):
"""A testapp that prints the body when status does not match."""
def _check_status(self, status, res):
if status is not None and status != res.status_int:
raise webtest.AppError(
"Bad response: %s (not %s)/n%s", res.status, status, res)
super(BetterTestApp, self)._check_status(status, res)
Obtener más control sobre lo que sucede con la excepción depende de qué marco y servidor está utilizando. Para el módulo wsgiref
, puede anular error_output para lograr lo que desea.