2014-10-14 6 views
6

का परीक्षण कैसे करें मेरे पास एक छोटा फ्लास्क एप्लिकेशन है जो अपलोड करने के लिए कुछ छवियां लेता है और उन्हें एक मल्टीपाज टिफ़ में परिवर्तित करता है। कुछ खास नहीं।send_file फ्लास्क

लेकिन मैं एकाधिक फ़ाइलों और फ़ाइल डाउनलोड के अपलोड का परीक्षण कैसे करूं?

मेरे Testclient:

class RestTestCase(unittest.TestCase): 
    def setUp(self): 
     self.dir = os.path.dirname(__file__) 
     rest = imp.load_source('rest', self.dir + '/../rest.py') 
     rest.app.config['TESTING'] = True 
     self.app = rest.app.test_client() 

    def runTest(self): 
     with open(self.dir + '/img/img1.jpg', 'rb') as img1: 
      img1StringIO = StringIO(img1.read()) 

     response = self.app.post('/convert', 
           content_type='multipart/form-data', 
           data={'photo': (img1StringIO, 'img1.jpg')}, 
           follow_redirects=True) 
     assert True 

if __name__ == "__main__": 
    unittest.main() 

आवेदन

return send_file(result, mimetype='image/tiff', \ 
            as_attachment=True) 

मैं जवाब में भेजा फ़ाइल को पढ़ने और एक अन्य फ़ाइल के साथ तुलना करना चाहते हैं के साथ फाइल वापस भेजता है। मैं प्रतिक्रिया ऑब्जेक्ट से फ़ाइल कैसे प्राप्त करूं?

+0

rest.py की सामग्री क्या हैं (या क्या पैकेज से है), और अधिक विशेष रूप से, क्या करता है app.post की तरह दिखते हैं? – sirlark

+0

rest.py मेरा फ्लास्क एप्लिकेशन है। कन्वर्ट विधि, जहां मैं कुछ छवि रूपांतरण करने के लिए पोस्ट करता हूं, और flask.send_file पर कॉल के साथ समाप्त होता है। app.post flask.test_client से एक विधि है। – Christian

उत्तर

7

मुझे लगता है कि यहां भ्रम हो सकता है कि responseResponse ऑब्जेक्ट है और पोस्ट अनुरोध द्वारा डाउनलोड किया गया डेटा नहीं है। ऐसा इसलिए है क्योंकि एक HTTP प्रतिक्रिया में अन्य विशेषताएँ होती हैं जो अक्सर जानना उपयोगी होती हैं, उदाहरण के लिए http स्टेटस कोड लौटाया जाता है, प्रतिक्रिया का माइम-प्रकार इत्यादि ... इन तक पहुंचने के लिए विशेषता नाम ऊपर दिए गए लिंक में सूचीबद्ध हैं।

प्रतिक्रिया ऑब्जेक्ट में 'डेटा' नामक एक विशेषता है, इसलिए response.data में सर्वर से डाउनलोड किया गया डेटा होगा। मेरे द्वारा लिंक किए गए दस्तावेज़ इंगित करते हैं कि data जल्द ही बहिष्कृत किया जा सकता है, और get_data() विधि का उपयोग इसके बजाय किया जाना चाहिए, लेकिन testing tutorial अभी भी डेटा का उपयोग करता है। अपने खुद के सिस्टम पर टेस्ट क्या आप डेटा की एक राउंड ट्रिप का परीक्षण करना चाहते works.Assuming को देखने के लिए,

def runTest(self): 
    with open(self.dir + '/img/img1.jpg', 'rb') as img1: 
     img1StringIO = StringIO(img1.read()) 

    response = self.app.post('/convert', 
          content_type='multipart/form-data', 
          data={'photo': (img1StringIO, 'img1.jpg')}, 
          follow_redirects=True) 
    img1StringIO.seek(0) 
    assert response.data == imgStringIO.read() 
+0

Thx, मुझे बहुत मदद की। – Christian