Python 如何编写授权测试?

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

请帮助修复用于授权的单元测试

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.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)