Python 如何测试发送文件

Python 如何测试发送文件,python,flask,Python,Flask,我有一个小的flask应用程序,它可以上传一些图像,并将它们转换成多页tiff。没什么特别的 但是如何测试多个文件的上传和文件下载 我的测试客户: class RestTestCase(unittest.TestCase): def setUp(self): self.dir = os.path.dirname(__file__) rest = imp.load_source('rest', self.dir + '/../rest.py')

我有一个小的flask应用程序,它可以上传一些图像,并将它们转换成多页tiff。没什么特别的

但是如何测试多个文件的上传和文件下载

我的测试客户:

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)

我想读取响应中发送的文件,并将其与另一个文件进行比较。如何从response对象获取文件?

我想这里的混淆可能是
response
是一个对象,而不是post请求下载的数据。这是因为HTTP响应具有其他属性,这些属性通常很有用,例如返回的HTTP状态代码、响应的mime类型等。。。上面的链接中列出了访问这些属性的属性名称

响应对象有一个名为“data”的属性,因此
response.data
将包含从服务器下载的数据。我链接的文档表明
data
很快就会被弃用,应该使用
get\u data()
方法,但仍然使用数据。在您自己的系统上进行测试,看看什么是有效的。假设您想测试数据的往返

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()

rest.py(或者它来自哪个包)的内容是什么,更具体地说,app.post是什么样子的?rest.py是我的烧瓶应用程序。convert方法(我在这里发布到)执行一些图像转换,并以调用flask.send_文件结束。app.post是flask.test_client.Thx中的一个方法,对我帮助很大。在Python 3中,您应该使用
BytesIO
而不是
StringIO
,因为
img1
是以二进制模式读取的,因为
mode='rb'