2012-11-22 16 views
18

मैं डब्लूएसजीआई एप्लिकेशन का परीक्षण करने के लिए पायथन और वेबटेस्ट का उपयोग कर रहा हूं। मैंने पाया है कि हैंडलर कोड में उठाया अपवाद Webtest द्वारा निगल लिया जा करने के लिए है, जो तब एक सामान्य जन्म देती हैं:वेबटेस्ट परीक्षण विफलता में वास्तविक त्रुटि ढूँढना

AppError: Bad response: 500 Internal Server Error 

मैं इसे कैसे बता बढ़ाने या मूल त्रुटि है कि इस वजह से मुद्रित करने के लिए करते हैं?

+0

WSGI कॉन्फ़िगरेशन में कुछ फ़ाइल में 'त्रुटि' रीडायरेक्ट की जाएगी। आप उस फ़ाइल में कुछ त्रुटि प्राप्त करने के लिए जांच सकते हैं। – Nilesh

उत्तर

3

आपके डब्लूएसजीआई ढांचे और सर्वर में ऐसे हैंडलर हैं जो अपवादों को पकड़ते हैं और कुछ क्रियाएं करते हैं (शरीर में एक स्टैकट्रैक प्रस्तुत करते हैं, लॉगफाइल पर बैकट्रैक लॉग करते हैं, आदि)। वेबटेस्ट, डिफ़ॉल्ट रूप से, वास्तविक प्रतिक्रिया नहीं दिखाता है, जो उपयोगी हो सकता है यदि आपका ढांचा शरीर में एक स्टैक्र्रेस प्रदान करता है। मैं 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) 

क्या होता है अपवाद क्या ढांचे और सर्वर का प्रयोग कर रहे पर निर्भर करता है पर अधिक नियंत्रण हो रही है। wsgiref मॉड्यूल में निर्मित के लिए आप जो चाहते हैं उसे प्राप्त करने के लिए error_output ओवरराइड कर सकते हैं।

+0

अपस्ट्रीम की रिपोर्ट की गई: https://github.com/Pylons/webtest/issues/176 –

2

जबकि क्लज का उत्तर निश्चित रूप से काम करता है, फिर भी आप अपने परीक्षण मामले में प्रतिक्रिया तक पहुंच सकते हैं। ऐसा करने के लिए, आप टेस्ट ऐप पर अपना अनुरोध करते समय expect_errors=True (webtest documentation से) का उपयोग कर सकते हैं, और इस तरह कोई ऐपरर नहीं उठाया जाएगा। यहां एक उदाहरण दिया गया है जहां मुझे 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

इसके लिए धन्यवाद! मैं अपने परीक्षणों में अन्य अपवादों को पकड़ने में असफल रहा जब तक कि मैंने यह उम्मीद_एरर्स तर्क नहीं देखा। –

संबंधित मुद्दे