Python 如何编写授权测试?
请帮助修复用于授权的单元测试 views.py:Python 如何编写授权测试?,python,django,Python,Django,请帮助修复用于授权的单元测试 views.py: from django.http import HttpResponse, HttpResponseRedirect, Http404 from django.template import loader, RequestContext from django.contrib import auth from django import forms def auth_view(request): username = request.P
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.template import loader, RequestContext
from django.contrib import auth
from django import forms
def auth_view(request):
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
return HttpResponseRedirect('/accounts/loggedin/')
else:
return HttpResponseRedirect('/accounts/invalid_login/')
login.html:
{% extends "base.html" %}
{% block title %}Login{% endblock %}
{% block content %}
{# {{ form.as_p }} #}
{% if form.errors %}
<p>errors!</p>
{% endif %}
<form action="/accounts/auth/" method="post">{% csrf_token %}
<input type="text" name="username" id="isername" value="" />
<input type="password" name="password" id="password" value="" />
<input type="submit" value="login" />
</form>
{% endblock %}
tests.py:
from django.test import TestCase
from django.test.client import Client
class TestLogin(TestCase):
def test_login(self):
client = Client()
response = client.post('/accounts/auth/', {'username': 'qwe', 'password': 'qwe'})
print(response.content)
self.assertEqual(response.status_code, 302)
我正在做两个测试:一个测试针对现有用户(用户名:qwe,密码:qwe),另一个测试针对不存在的用户(用户名:qwerty,密码:qwe)。因此,控制台显示的内容相同
所以我不知道授权是否成功我假设您正在测试身份验证,因为您的代码就是这么说的。因为您返回相同的HTTP状态代码,所以您的两个用户都通过了测试中的断言。更改
auth_view
方法以执行此操作:
if user is not None:
auth.login(request, user)
return HttpResponseRedirect('/accounts/loggedin/')
else:
return HttpResponseForbidden()
所以当你这样做的时候:
self.assertEqual(response.status_code, 302)
它将只传递给现有用户。您使用该密码创建了用户吗?在发出请求之前,用户必须存在于测试数据库中。对于这两种情况,您返回的响应类型完全相同。您应该返回不同类型的响应,或者测试
响应
对象的内容
self.assertEqual(response.status_code, 302)