如何使用Django test Client提交POST请求?我只想测试我的应用程序的登录功能。我很奇怪
response = self.client.post(reverse('rbac:login'), data=data)
在我的测试用例中,我想对其进行验证,所以我打印 response.status_code
。实际上,它应该返回302 coz,应该转到另一页。但返回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代码一样。
答案 0 :(得分:0)
您可以将follow = True设置为.post函数,如文档https://docs.djangoproject.com/en/2.2/topics/testing/tools/#django.test.Client.get
中所述response = c.post('/redirect_me/', follow=True)
response.redirect_chain
[('http://testserver/next/', 302), ('http://testserver/final/', 302)]
它允许您通过response.redirect_chain访问重定向链。如果重定向链不包含重定向,则您在测试中的行为与在Shell中的行为不同。
答案 1 :(得分:0)
在使用客户端发送POST或GET请求之前,首先需要创建用户以使用户处于活动状态并提供必要的权限,然后通过客户端登录,然后发送发布请求。
例如:self.client.login(username='username', 'password'='password)