如何解决如何为用户登录编写测试用例
我应该测试这个 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 举报,一经查实,本站将立刻删除。