2014-07-08 6 views
5

Mam test Django, który uzyskuje dostęp do strony internetowej przy użyciu Django test client.django.test.Client i response.content vs. streaming_content

W jednym z testów serwer zwraca plik ZIP jako załącznik. Mam dostęp do zawartości pliku ZIP z następującego kodu:

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

Powoduje to następujące ostrzeżenie Deprecation:

D:/Rozwój/Archeologia/DB/ArtefactDatabase/Webserver \ ImportExport \ testy \ test_import.py:1: DeprecationWarning: Uzyskanie dostępu do atrybutu content w odpowiedzi na transmisję strumieniową jest przestarzałe. Użyj atrybutu streaming_content instead.`

response.streaming_content zwrotów jakiejś mapy, który zdecydowanie nie jest przedmiotem plikopodobnym co wymagane dla ZipFile. Jak mogę użyć atrybutu streaming_content?

Nawiasem mówiąc, otrzymuję ostrzeżenie o wycofaniu dopiero po przejściu response.content do StringIO, kiedy uzyskuję dostęp do response.content zwykłej strony HTML, nie ma żadnego ostrzeżenia.

Odpowiedz

0

Należy zmienić podejście do testu. response.streaming_content robi dokładnie to, co zamierza. Wystarczy przetestować, że wywołanie do pobrania jest w porządku.

Jeśli chcesz przetestować metody generowania/integralności pliku, musisz przetestować jego funkcję osobno. Nie ma znaczenia, czy twój plik jest ZIP czy CSV do testu Django, ale jeśli twój telefon do tego jest w porządku.

+3

Celem testu integracji jest przetestowanie połączenia i jego wyniku pod kątem poprawności. Nie wystarczy powiedzieć, że test przechodzi bez sprawdzania, czy treść odpowiedzi jest poprawna. – Risadinha

4

Używanie Pythona 3.4.

sznurkiem:

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

z bajtów: znalezionego w TestStreamingMixin z https://github.com/sio2project/oioioi/blob/master/oioioi/filetracker/tests.py

Zobacz również

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

rozwiązanie: https://docs.djangoproject.com/en/1.7/ref/request-response/

Możesz chcieć sprawdzić, czy odpowiedź i s strumień, sprawdzając response.streaming (boolean).

Powiązane problemy