Django测试问题:User.authenticate认证失败求助
解决Django StaticLiveServerTestCase + Selenium登录失败的问题
嘿,作为过来人太懂这种卡壳的感觉了!手动跑没问题,测试就掉链子,尤其还是新手阶段,真的头大。咱们从最常见的坑开始一步步排查:
先确认测试用户的密码是否被正确哈希
这是新手最容易踩的雷!如果你在setUp里用User.objects.create()创建用户,密码会以明文存储,而User.authenticate()只认哈希后的密码。必须改用User.objects.create_user()方法,它会自动帮你处理密码哈希:# 正确的用户创建方式 self.test_user = User.objects.create_user( username='testuser', email='test@example.com', password='testpass123' )你可以在
setUp末尾加个小测试,直接调用authenticate验证:from django.contrib.auth import authenticate user = authenticate(username='testuser', password='testpass123') print(user) # 输出用户对象说明密码没问题;输出None就是哈希环节出问题了确认临时测试数据库里确实存在用户
StaticLiveServerTestCase会创建独立的临时数据库,测试结束就销毁。有时候可能因为setUp逻辑疏漏,用户没被正确保存。你可以在测试方法里加一行验证:from django.contrib.auth.models import User print(User.objects.filter(username='testuser').exists()) # 正常应该输出True检查Selenium输入的账号密码是否准确
有没有可能代码里输入的密码和创建用户时的不一致?或者输入时不小心多加了空格?可以在输入后打印输入框内容确认:password_input = driver.find_element(By.ID, 'id_password') password_input.send_keys('testpass123') print(password_input.get_attribute('value')) # 看看是不是你设置的目标密码排除CSRF令牌的干扰
虽然手动测试正常,但有时候测试环境下CSRF令牌可能没被正确携带。你可以打印页面源码,确认表单里有csrfmiddlewaretoken隐藏字段:print(driver.page_source)不过你手动测试没问题的话,这个概率比较低,优先排查前面的点。
我当初就是用了create代替create_user,卡了快俩小时才反应过来😂先从第一个点开始查,大概率能解决问题!
内容的提问来源于stack exchange,提问作者Daniel Long
相关产品推荐
相关产品推荐

