django,测试期间无法登录管理页面

3vpjnl9f  于 2023-05-30  发布在  Go
关注(0)|答案(1)|浏览(159)

我正在使用Django 4.2,我正在尝试做的是一个测试(在管理页面中登录)。因此,首先我用loaddata命令创建一个管理员(在www.example.com中fixtures.py),然后运行测试。他们都失败了。

test_admin_page.py

@pytest.mark.selenium
def test_dashboard_admin_login(live_server, db_fixture_setup, chrome_browser_instance):
    browser = chrome_browser_instance
    browser.get(f"{live_server.url}/admin/login/?next=/admin/")
    user_name = browser.find_element(By.ID, "id_username")
    user_pwd = browser.find_element(By.ID, "id_password")
    submit = browser.find_element(By.XPATH,'//input[@value="Log in"]')
    user_name.send_keys("admin@email.com")
    user_pwd.send_keys("123admin")
    submit.click()#send_keys(Keys.RETURN)
    assert "Site administration" in browser.page_source # this would mean successful login

@pytest.mark.django_db
def test_admin_login(request):
    user = authenticate(request, username='admin@email.com', password='123admin')

    if user is not None and user.is_active and user.is_staff:
        login(request, user)
        assert True
    else:
        assert False

fixtures.py

@pytest.fixture(scope="session")
def db_fixture_setup(django_db_setup, django_db_blocker):
    """
    Loads DB data fixture
    """
    with django_db_blocker.unblock():
        call_command("loaddata","db_admin_fixture.json")

db_admin_fixture.json

[
{ "model": "website.user",
    "pk": 1,
    "fields":{
      "email": "admin@email.com",
      "password": "123admin",
      "is_superuser": true,
      "is_staff": true,
      "is_active": true
    }
}
]

第一个Assert失败是因为页面中没有“Siteadministration”,所以它失败了。在第二个测试中,问题是用户是None,所以函数进入'else'并AssertFalse。我知道这个问题可能太笼统了,但我不知道如何更具体。这些测试失败的原因是什么?任何帮助是赞赏:)

p3rjfoxz

p3rjfoxz1#

好的,一个问题是密码必须被编码,它可以像这样生成:

from django.contrib.auth.hashers import make_password
make_password('password') # 'pbkdf2_sha256$600000$KjRpk4kSRT3jFfCrgdoUf'

此修复test_dashboard_admin_login(..)
还是没有找到第二次测试的解决方案

相关问题