微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为用户登录编写测试用例

如何解决如何为用户登录编写测试用例

我应该测试这个 Django 项目的登录功能,但它似乎无法正确登录。 这是views.py上的登录方法

def login_request(request):
if request.method == "POST":
    form = AuthenticationForm(request,data=request.POST)
    if form.is_valid():
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password')
        user = authenticate(username=username,password=password)
        request.session['username'] = username  # Session test
        if user is not None:
            login(request,user)
            messages.info(request,"You are Now logged in as {username}.")
            # Redirect da login alla dashboard dell'utente
            return redirect("dashboard")

        else:
            messages.error("Invalis User")
            #return render(request=request,template_name="dashboard.html",context={})
    else:
        messages.error(request,"Invalid username or password.")
form = AuthenticationForm()
return render(request=request,template_name="login.html",context={"login_form": form})

登录后,它重定向到仪表板,显示链接用户的板,使用此代码

def dashboard(request):
usern = request.session.get('username')
userlog = User.objects.get(username=usern)
boards = BoardMember.objects.all().filter(user=userlog)
return render(request,"dashboard.html",{'board': boards,'user': userlog})

一切正常,但是当我在 TestCase 中测试时,错误是“用户匹配查询不存在”,测试代码为:

class ViewsTestCase(TestCase):
def setUp(self):
    User.objects.create(username="Paolo",password="Paolo")
    self.client = Client()

def test_getLogin(self):
    response = self.client.get("/")
    self.assertEqual(response.status_code,200)

def test_login(self):
    username = "Paolo"
    password = "Paolo"
    response = self.client.post("/dashboard/",{
                                    'username': username,'password': password
                                })

    self.assertEqual(response.status_code,200)
    user = User.objects.get(username="Paolo")
    session = self.client.session
    """self.assertEqual(session['username'],username)
    self.assertEqual(session['user_id'],user.id)
    self.assertEqual(session['logged'],True)"""

完整的回溯:

Traceback (most recent call last):
File "/tests.py",line 52,in test_login
response = self.client.post("/dashboard/",File "venv/lib/python3.8/site-     packages/django/test/client.py",line 543,in post
response = super().post(path,data=data,content_type=content_type,secure=secure,**extra)
File "/venv/lib/python3.8/site-packages/django/test/client.py",line 356,in post
return self.generic('POST',path,post_data,content_type,File "/venv/lib/python3.8/site-packages/django/test/client.py",line 422,in generic
return self.request(**r)
File "/venv/lib/python3.8/site-packages/django/test/client.py",line 503,in request
raise exc_value
File “/venv/lib/python3.8/site-packages/django/core/handlers/exception.py",line 34,in inner
response = get_response(request)
File "/venv/lib/python3.8/site-packages/django/core/handlers/base.py",line 115,in _get_response
response = self.process_exception_by_middleware(e,request)
File “/venv/lib/python3.8/site-packages/django/core/handlers/base.py",line 113,in _get_response
response = wrapped_callback(request,*callback_args,**callback_kwargs)
File "/views.py",line 56,in dashboard
userlog = User.objects.get(username=usern)
File "/venv/lib/python3.8/site-packages/django/db/models/manager.py",line 82,in manager_method
return getattr(self.get_queryset(),name)(*args,**kwargs)
File “/venv/lib/python3.8/site-packages/django/db/models/query.py",line 406,in get
raise self.model.DoesNotExist(
ISW_ScrumBoard.models.User.DoesNotExist: User matching query does not exist.

解决方法

你可以这样做,测试django登录

from django.test import Client,TestCase

class TestsUser(TestCase):
    def __init__(self):
        self.e = Client()
    
    def test_login(self):
        self.e.login(username="Username",password="your_password")
,

你在寻找这个功能吗?

login(request,user,backend=None)

来自 Django docs

如何登录用户¶

如果您有一个经过身份验证的用户想要附加到当前会话 - 这是通过 login() 函数完成的。

login(request,backend=None)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。