2012-11-22 22 views
18

Tôi đang sử dụng Python và Webtest để kiểm tra ứng dụng WSGI. Tôi thấy rằng trường hợp ngoại lệ được nêu ra trong đoạn code xử lý có xu hướng bị nuốt chửng bởi Webtest, sau đó đặt ra một generic:Tìm lỗi thực trong lỗi kiểm tra Webtest

AppError: Bad response: 500 Internal Server Error 

Làm thế nào để nói cho nó để tăng hoặc in các lỗi ban đầu đã gây ra điều này?

+0

Sẽ có 'lỗi' được chuyển hướng đến một số tệp trong cấu hình WSGI. Bạn có thể đăng ký để nhận lỗi trên một số tệp. – Nilesh

Trả lời

3

Khuôn khổ và máy chủ WSGI của bạn chứa các trình xử lý bắt các ngoại lệ và thực hiện một số hành động (hiển thị một ngăn xếp trong cơ thể, đăng nhập backtrace vào logfile, v.v.). Webtest, theo mặc định, không hiển thị phản hồi thực tế, điều này có thể hữu ích nếu khung của bạn hiển thị một chồng xếp chồng trong cơ thể. Tôi sử dụng phần mở rộng sau cho Webtest khi tôi cần xem xét nội dung phản hồi:

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) 

Kiểm soát nhiều hơn những gì xảy ra ngoại lệ tùy thuộc vào khung và máy chủ bạn đang sử dụng. Đối với mô-đun wsgiref được tích hợp sẵn, bạn có thể ghi đè error_output để đạt được những gì bạn muốn.

+0

Báo cáo ngược dòng: https://github.com/Pylons/webtest/issues/176 –

2

Trong khi câu trả lời của clj chắc chắn hoạt động, bạn vẫn có thể muốn truy cập phản hồi trong trường hợp thử nghiệm của mình. Để thực hiện điều này, bạn có thể sử dụng expect_errors=True (từ webtest documentation) khi bạn thực hiện yêu cầu của mình cho TestApp, và theo cách đó không có AppError nào được nâng lên. Dưới đây là ví dụ mà tôi đang gặp lỗi 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

Cảm ơn bạn! Tôi đã không nắm bắt được các ngoại lệ khác trong các bài kiểm tra của tôi cho đến khi tôi thấy điều này expect_errors arg. –

Các vấn đề liên quan