2012-11-22 4 views
18

저는 Python 및 Webtest를 사용하여 WSGI 응용 프로그램을 테스트하고 있습니다.Webtest 테스트 실패시 실제 오류 찾기

AppError: Bad response: 500 Internal Server Error 

은 어떻게 올리거나이 원인이 된 원래 오류를 인쇄 할 말할까요 : 나는 핸들러 코드에서 제기 예외는 다음 일반을 제기하는 WebTest에 의해 섭취되는 경향이 있음을 발견?

+0

WSGI 구성의 일부 파일에 '오류'가 리디렉션됩니다. 일부 파일에서 오류가 발생했는지 확인할 수 있습니다. – Nilesh

답변

3

WSGI 프레임 워크와 서버에는 예외를 잡아 내고 일부 작업 (본문에서 스택 추적을 렌더링하고 로그 파일에 백 트레이스를 기록하는 등)을 수행하는 처리기가 있습니다. Webtest는 기본적으로 실제 응답을 표시하지 않으므로 프레임 워크가 스택 추적을 본문에 렌더링하는 경우 유용 할 수 있습니다.

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) 

예외가 사용하고있는 프레임 워크와 서버에 따라 다릅니다에 무슨 일보다 효율적으로 관리 얻기 : 나는 응답의 몸을 볼 필요가있을 때 나는 WebTest에에 다음과 같은 확장자를 사용합니다. wsgiref 모듈의 경우 error_output을 재정 의하여 원하는 것을 얻을 수 있습니다.

+0

업스트림보고 : https://github.com/Pylons/webtest/issues/176 –

2

clj의 대답은 틀림없이 작동하지만 테스트 케이스에서 여전히 응답에 액세스 할 수 있습니다. 이렇게하려면 expect_errors=True (webtest documentation에서)을 사용하여 TestApp에 ​​요청하면 AppError가 발생하지 않습니다. 다음은 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)) 
+0

감사합니다. 나는이 expect_errors 인수를 볼 때까지 내 테스트에서 다른 예외를 잡는 데 실패했습니다. –

관련 문제