python 你如何管理测试错误Django项目?

sy5wg1nm  于 2023-02-15  发布在  Python
关注(0)|答案(2)|浏览(134)

我需要创建一个博客文章应用程序,在其中我会测试所有测试用例。我需要一个用户,可以保持登录在整个测试阶段,以便我可以使用相同的登录用户在博客和张贴和更新后的API,但我无法这样做

def test_login(client, user_data):
    # with unittest.mock.patch('django.contrib.auth.authenticate') as mock_authenticate:
    #     mock_authenticate.return_value = authenticate(
    #     request=client.post(reverse('login'), user_data, format='json'),
    #     backend='django.contrib.auth.backends.ModelBackend'
    # )
      with unittest.mock.patch('django.contrib.auth.authenticate') as mock_authenticate:
        user = CustomUser.objects.create_user(**user_data)
        mock_authenticate.return_value = user
        response = client.post(reverse('login'), user_data, format="json")
        assert response.sstatus_code == 200

这是我的登录API,我希望此用户在所有API中登录,而不使用会话

vhmi4jdf

vhmi4jdf1#

要管理Django项目中的测试错误,您可以按照以下步骤操作:

1.创建测试数据库:您应该为运行测试创建一个单独的测试数据库,这是为了避免干扰开发数据库。
1.使用Django的测试工具:Django提供了几个测试工具,包括TestCase类和client对象',它允许你模拟对应用程序的请求。
1.使用assert语句:可以使用assert语句检查代码是否按预期工作。例如,在上面的代码中,可以使用assertresponse.status_code == 200确保登录请求返回成功状态代码。
1.模拟外部依赖项:在测试中,您可能需要模拟代码所依赖的外部依赖项,例如身份验证后端。您可以使用unittest.mock库创建模拟对象来模拟这些依赖项。
关于你的具体问题,如果你想让用户不使用会话就能登录所有API,你可以使用基于令牌的认证。Django提供了一个内置的认证框架django-rest-framework,其中包括基于令牌的认证。你可以在登录过程中为用户创建一个令牌,然后使用该令牌来认证对API的后续请求。这样,您不需要依赖会话来维护用户的登录状态。

vaj7vani

vaj7vani2#

应用程序/tests.py

from rest_framework.test import APITestCase
from rest_framework import status

class YourTest(APITestCase):
    def setUp(self):
        self.user = create_user() # Create your own user here.
        self.client.force_authenticate(user=self.user)

    def test_update_post(self):
        # test your apis here.
        # Below lines are just example.
        response = self.client.patch("posts/3", {"name": "jw"})
        assert response.status_code == status.HTTP_200_OK
        assert response.data["name"] == "jw"

您可以使用force_authenticate方法获取特定用户的身份验证。

相关问题