django.test.Client和response.content vs. streaming_content

时间:2014-07-08 08:07:22

标签: python django testing django-1.6

我有一个使用Django test client访问网页的Django测试。

在其中一个测试中,服务器将ZIP文件作为附件返回。我使用以下代码访问ZIP文件的内容:

zip_content = StringIO(response.content)
zip = ZipFile(zip_content)

这会导致以下弃用警告:

  

D:/ Developments / Archaeology / DB / ArtefactDatabase / Webserver \ importexport \ tests \ test_import.py:1:DeprecationWarning:不推荐访问流式响应中的content属性。请改用streaming_content属性。

response.streaming_content会返回某种类型的地图,这绝对不是ZipFile所需的文件类对象。如何使用streaming_content属性?

顺便说一句,我只是在将response.content传递给StringIO时才会收到弃用警告,当我访问普通HTML页面的response.content时,没有任何警告。

2 个答案:

答案 0 :(得分:6)

使用Python 3.4。

with String:

zip_content = io.StringIO("".join(response.streaming_content))
zip = ZipFile(zip_content)

带字节:

zip_content = io.BytesIO(b"".join(response.streaming_content))
zip = ZipFile(zip_content)

https://github.com/sio2project/oioioi/blob/master/oioioi/filetracker/tests.py

的TestStreamingMixin中找到的解决方案

另见: https://docs.djangoproject.com/en/1.7/ref/request-response/

您可能希望通过检查response.streaming(布尔值)来测试响应是否为流。

答案 1 :(得分:-1)

您应该更改测试方法。 response.streaming_content完全符合其目的。只是测试是调用下载是好的。

如果要测试文件生成/完整性方法,则需要单独测试其功能。如果您的文件是ZIP或CSV到Django测试无关紧要,但是如果你的调用没问题。