【问题标题】:Django Test Client client.post() sends GET request in my TestcaseDjango 测试客户端 client.post() 在我的测试用例中发送 GET 请求
【发布时间】:2019-04-26 05:24:14
【问题描述】:

如何使用 Django 测试客户端提交 POST 请求?我只想测试我的应用程序的登录功能。我放的很奇怪 response = self.client.post(reverse('rbac:login'), data=data) 在我的测试用例中,我想验证它所以我打印 response.status_code。实际上它应该返回 302 因为它应该转到另一个页面。但它返回 200。这种情况发生在我使用“python manage.py test testmodel”进行测试时。但是,如果我使用 "python manage.py shell" 制作一个 InteractiveConsole 并编写完全相同的代码,它最终会返回 302。

我几乎尝试过堆栈溢出提供的所有方法,例如更改网址,在我发布时提供内容类型....但这些毫无意义。

from django.test import TestCase
from django.test.utils import setup_test_environment,teardown_test_environment
from django.test import Client
from django.urls import reverse
import django
from rbac.models import RbacUser, RbacRole
from system_module.models import Redeploy
from urllib import urlencode
class CreateUser(TestCase):
    @classmethod
    def setUp(self):
        self.client = Client()

    def test_create_user(self):
        data = {"Username": "admin_xy", "Password": "aaa"}

        response = self.client.post(reverse('rbac:login'), data=data)
        print response

它显示我 200 ..... 但是,在交互式控制台中:

>>> response = client.post(reverse('rbac:login'), data=data)
>>> print response.status_code                                                                                                                 
302

它显示了正确的结果。 我想知道如何处理这个烦人的问题。谢谢

我希望当我使用测试文件来测试我的测试用例时,它可以正常工作....就像显示 302 代码一样。

【问题讨论】:

    标签: python django testing post client


    【解决方案1】:

    在使用客户端发送POST或GET请求之前,首先需要创建用户,使用户处于活动状态并赋予必要的权限并通过客户端登录,然后发送post请求。

    例如:self.client.login(username='username', 'password'='password)

    【讨论】:

    • 他正在测试登录,所以你确实希望用户登录。
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2019-08-07
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多