2014-07-08 6 views
5

Ho un test di Django che accede a una pagina Web utilizzando lo Django test client.django.test.Client e response.content vs. streaming_content

In uno dei test, il server restituisce un file ZIP come allegato. Accedo il contenuto del file ZIP con il seguente codice:

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

In questo modo il seguente avviso deprecazione:

D:/Sviluppi/Archeologia/DB/ArtefactDatabase/web server \ importexport \ test \ test_import.py:1: DeprecationWarning: l'accesso all'attributo content su una risposta di streaming è deprecato. Utilizzare l'attributo streaming_content instead.`

response.streaming_content restituisce una sorta di mappa, che non è sicuramente un oggetto simile a file che è richiesto per ZipFile. Come posso usare l'attributo streaming_content per questo?

Per inciso, ho solo l'avvertimento disapprovazione quando si passa ad un response.contentStringIO, quando accedo al response.content di una pagina HTML ordinario, non c'è nessun avvertimento.

risposta

0

È necessario modificare l'approccio del test. Il response.streaming_content fa esattamente ciò che intende fare. Solo test è la chiamata per il download è ok.

Se si desidera testare i metodi di generazione/integrità dei file, è necessario testarne separatamente la funzionalità. Non importa se il tuo file è un ZIP o un CSV per il test di Django, ma se la tua chiamata è ok.

+3

Lo scopo di un test di integrazione è di verificare la correttezza della chiamata e il relativo risultato. Non è sufficiente dire che il test passa senza verificare se il contenuto della risposta è corretto. – Risadinha

4

Utilizzo di Python 3.4.

con stringa:

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

con Bytes:

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

soluzione trovata in TestStreamingMixin di https://github.com/sio2project/oioioi/blob/master/oioioi/filetracker/tests.py

Vedi anche: https://docs.djangoproject.com/en/1.7/ref/request-response/

si potrebbe desiderare di verificare se la risposta i s uno stream controllando response.streaming (booleano).