2014-07-08 12 views
5

Ich habe einen Django-Test, der auf eine Webseite unter Verwendung der Django test client zugreift.django.test.Client und response.content vs streaming_content

In einem der Tests gibt der Server eine ZIP-Datei als Anhang zurück. Ich greife auf den Inhalt der ZIP-Datei mit dem folgenden Code:

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

Dies bewirkt, dass die folgenden deprecation Warnung:

D:/Entwicklung/Archäologie/DB/ArtefactDatabase/Webserver \ export \ Tests \ test_import.py:1: DeprecationWarning: Der Zugriff auf das Attribut content für eine Streaming-Antwort ist veraltet. Verwenden Sie das Attribut streaming_content instead.`

response.streaming_content kehrt eine Art Karte, die definitiv nicht ein dateiähnliche Objekt ist, das für ZipFile erforderlich ist. Wie kann ich das Attribut streaming_content dafür verwenden?

Übrigens, ich bekomme nur die Verwarnungswarnung bei der Übergabe response.content an eine StringIO, wenn ich auf den response.content einer normalen HTML-Seite zugreifen, gibt es keine Warnung.

Antwort

0

Sie sollten den Ansatz Ihres Tests ändern. Die response.streaming_content macht genau das, was sie zu tun hat. Test ist Aufruf zum Download ist in Ordnung.

Wenn Sie Dateigenerierungs-/Integritätsmethoden testen möchten, müssen Sie die Funktion separat testen. Es spielt keine Rolle, ob Ihre Datei eine ZIP-Datei oder eine CSV-Datei für den Django-Test ist, aber wenn Ihr Anruf dazu in Ordnung ist.

+3

Der Zweck eines Integrationstests besteht darin, den Aufruf und sein Ergebnis auf Korrektheit zu testen. Es ist nicht ausreichend zu sagen, dass der Test erfolgreich ist, ohne zu überprüfen, ob der Inhalt der Antwort korrekt ist. – Risadinha

4

Verwenden von Python 3.4.

mit String:

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

mit Bytes

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

Lösung gefunden in TestStreamingMixin von https://github.com/sio2project/oioioi/blob/master/oioioi/filetracker/tests.py

Siehe auch: https://docs.djangoproject.com/en/1.7/ref/request-response/

Vielleicht möchten Sie, ob das testen Antwort ich s ein Stream durch Überprüfung response.streaming (boolean).