2016-07-23 55 views
3

我想创建自动化测试,我想要的是检查我的TestCase,如果有一个位置标题,它应该基于View.py中的代码(已经在Advanced REST客户端)。但是,我不能解析它在我tests.pyDjango Rest Framework测试响应头

这里是我的代码:

from rest_framework import status 
from rest_framework.test import APITestCase 
url_1 = reverse('artists-list') 

class ArtistTest(APITestCase): 
    # Check the response if there is no data 
    def test_get(self): 
     # Checks the artists 
     # self.client attribute will be an APIClient instance 
     # Basically it will act as a client 
     response = self.client.get(url_1) 
     self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) 
     self.assertEqual(response.content, '') # There should be no data 
     # self.assertEqual(len(data), 0) 
     # print ("%s.%s DONE - 1" % (self.__class__.__name__, inspect.stack()[0][3])) 

    def test_post(self): 
     _data = {"name": "50 Cent", "birth_date":"2005-02-13"} 
     response = self.client.post(url_1, _data) 
     print "----" 
     print response.headers 
     data = json.loads(response.content)["data"] 
     self.assertEqual(response.status_code, status.HTTP_201_CREATED) 
     self.assertEqual(data, _data) 
     self.assertEqual(Artist.objects.count(), 1) 
     self.assertEqual(Artist.objects.get().name, '50 Cent') 

附:

请注意:

print response.headers # this throws an error 
print response # shows the header but I want it to be parsed 

回答

2

有几种选择:

>>> response.has_header('Location') 
True 

>>> response.get('Location') # None if key not in headers 
My location 

>>> response['Location'] # KeyError if key doesn't exist 
My location 

>>> response._headers # headers as dict 
{'allow': ('Allow', 'GET, POST, HEAD, OPTIONS'), 'Location': ...} 

>>> response.serialize_headers() # headers as bytestring (in Python 3) 
b'Allow: GET, POST, HEAD, OPTIONS\r\nLocation: ...'