如何在DRF测试中使用JWT令牌?

时间:2020-07-03 06:13:09

标签: unit-testing django-rest-framework jwt

我需要测试我的API。例如,我有图像列表页面。我需要为此页面进行测试,但是如果没有身份验证,则无法执行此操作。我使用JWT。我不知道怎么做。 请帮助我。

tests.py

class ImagesListTestCase(APITestCase):
    def test_images_list(self):
        response = self.client.get('/api/', HTTP_AUTHORIZATION="JWT {}".format("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTkzNzUxMzMxLCJqdGkiOiI3NWE3NDNkMGU3MDQ0MGNiYjQ3NDExNjQ3MTI5NWVjNSIsInVzZXJfaWQiOjF9.7HkhZ1hRV8OtQJMMLEAVwUnJ0yDt8agFadAsJztFb6A"))
        self.assertEqual(response.status_code, status.HTTP_200_OK)

我试图做

response = self.client.get('/api/', Authorization="Bearer <token>")

response = self.client.get('/api/', Authorization="JWT <token>")

response = self.client.get('/api/', HTTP_AUTHORIZATION="Bearer <token>")

1 个答案:

答案 0 :(得分:1)

django创建一个临时数据库进行测试;因此最好像这样从usernamepassword获取令牌:

class ImagesListTestCase(APITestCase):
    def setUp(self) :
    self.register_url = reverse("your:register:view")  # for example : "users:register"
    self.user_data = {
        "username": "test_user",
        "email": "test_user@gmail.com",
        "password": "123456"
    }
    self.client.post(self.register_url,self.user_data)      # user created

    auth_url = reverse("your:login:view") #for example :"users:token_obtain_pair"
    self.access_token = self.client.post(auth_url,{
        "username" : self.user_data.get("username") ,
        "password" : self.user_data.get("password")
    }).data.get("access")       # get access_token for authorization
    self.client.credentials(HTTP_AUTHORIZATION=f'Bearer {self.access_token}')
    
    def test_images_list(self):
        response = self.client.get('/api/')
        self.assertEqual(response.status_code, status.HTTP_200_OK)