Files
everything-is-suitable/everything-is-suitable-test/python_e2e/tests/web/test_auth.py
T
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

248 lines
9.0 KiB
Python

"""
认证模块测试
Admin后台认证功能的测试用例。
"""
import pytest
import allure
from playwright.sync_api import Page
@allure.epic("Admin后台管理")
@allure.feature("认证模块")
class TestAuth:
"""认证模块测试类"""
@allure.title("使用正确凭证登录成功")
@allure.description("验证使用正确的用户名和密码可以成功登录")
@allure.severity(allure.severity_level.CRITICAL)
@pytest.mark.smoke
def test_login_with_valid_credentials(self, page: Page, login_page) -> None:
"""
测试使用正确凭证登录成功
前置条件:
- Admin服务已启动
- 测试用户已存在
测试步骤:
1. 导航到登录页面
2. 输入正确的用户名
3. 输入正确的密码
4. 点击登录按钮
5. 等待页面跳转
预期结果:
- 页面成功跳转到仪表盘
- URL包含/dashboard
- 侧边栏菜单可见
"""
with allure.step("导航到登录页面"):
login_page.navigate()
assert login_page.is_loaded(), "登录页面未加载完成"
with allure.step("输入正确的用户名和密码"):
login_page.fill_username("admin")
login_page.fill_password("admin123456")
with allure.step("点击登录按钮"):
login_page.click_submit()
with allure.step("验证登录成功"):
login_page.wait_for_redirect()
assert "/dashboard" in page.url, f"登录后未跳转到仪表盘,当前URL: {page.url}"
@allure.title("使用错误密码登录失败")
@allure.description("验证使用错误的密码登录会失败并显示错误提示")
@allure.severity(allure.severity_level.CRITICAL)
@pytest.mark.smoke
def test_login_with_invalid_password(self, page: Page, login_page) -> None:
"""
测试使用错误密码登录失败
前置条件:
- Admin服务已启动
测试步骤:
1. 导航到登录页面
2. 输入正确的用户名
3. 输入错误的密码
4. 点击登录按钮
预期结果:
- 页面显示错误提示
- 错误消息包含"密码错误""认证失败"
- 页面保持在登录页
"""
with allure.step("导航到登录页面"):
login_page.navigate()
assert login_page.is_loaded(), "登录页面未加载完成"
with allure.step("输入正确的用户名和错误的密码"):
login_page.fill_username("admin")
login_page.fill_password("wrongpassword")
with allure.step("点击登录按钮"):
login_page.click_submit()
with allure.step("验证登录失败"):
page.wait_for_timeout(2000)
assert "/login" in page.url, f"页面未保持在登录页,当前URL: {page.url}"
has_error = login_page.has_error_message()
if has_error:
error_msg = login_page.get_error_message()
allure.attach(f"错误消息: {error_msg}", "登录错误", allure.attachment_type.TEXT)
assert "密码" in error_msg or "认证" in error_msg or "错误" in error_msg or "401" in error_msg or "failed" in error_msg.lower(), f"错误消息不符合预期: {error_msg}"
@allure.title("使用不存在的用户名登录失败")
@allure.description("验证使用不存在的用户名登录会失败并显示错误提示")
@allure.severity(allure.severity_level.CRITICAL)
@pytest.mark.smoke
def test_login_with_nonexistent_username(self, page: Page, login_page) -> None:
"""
测试使用不存在的用户名登录失败
前置条件:
- Admin服务已启动
测试步骤:
1. 导航到登录页面
2. 输入不存在的用户名
3. 输入任意密码
4. 点击登录按钮
预期结果:
- 页面显示错误提示
- 错误消息包含"用户不存在""认证失败"
- 页面保持在登录页
"""
with allure.step("导航到登录页面"):
login_page.navigate()
assert login_page.is_loaded(), "登录页面未加载完成"
with allure.step("输入不存在的用户名"):
login_page.fill_username("nonexistent_user_12345")
login_page.fill_password("anypassword")
with allure.step("点击登录按钮"):
login_page.click_submit()
with allure.step("验证登录失败"):
page.wait_for_timeout(2000)
assert "/login" in page.url, f"页面未保持在登录页,当前URL: {page.url}"
has_error = login_page.has_error_message()
if has_error:
error_msg = login_page.get_error_message()
allure.attach(f"错误消息: {error_msg}", "登录错误", allure.attachment_type.TEXT)
@allure.title("空表单验证")
@allure.description("验证提交空表单会显示验证提示")
@allure.severity(allure.severity_level.NORMAL)
@pytest.mark.smoke
def test_login_with_empty_form(self, page: Page, login_page) -> None:
"""
测试空表单验证
前置条件:
- Admin服务已启动
测试步骤:
1. 导航到登录页面
2. 不输入用户名
3. 不输入密码
4. 点击登录按钮
预期结果:
- 表单验证提示
- 用户名输入框显示必填提示
- 密码输入框显示必填提示
"""
with allure.step("导航到登录页面"):
login_page.navigate()
assert login_page.is_loaded(), "登录页面未加载完成"
with allure.step("不输入任何信息直接点击登录"):
login_page.click_submit()
with allure.step("验证表单验证"):
# 检查是否还在登录页(未跳转)
assert "/login" in page.url, f"页面不应跳转,当前URL: {page.url}"
# 检查是否有验证提示(Element UI的表单验证)
# 可能有错误提示或者表单验证样式
error_visible = login_page.has_error_message()
assert error_visible or "/login" in page.url, "表单验证未生效"
@allure.title("登出功能测试")
@allure.description("验证登出功能正常工作")
@allure.severity(allure.severity_level.CRITICAL)
@pytest.mark.smoke
def test_logout(self, page: Page, login_page, dashboard_page) -> None:
"""
测试登出功能
前置条件:
- 用户已登录
测试步骤:
1. 登录到系统
2. 点击登出按钮
3. 确认登出
预期结果:
- 页面跳转到登录页
- 清除认证信息
- 需要重新登录才能访问
"""
with allure.step("先登录系统"):
login_page.navigate()
login_page.fill_username("admin")
login_page.fill_password("admin123456")
login_page.click_submit()
login_page.wait_for_redirect()
assert "/dashboard" in page.url, "登录未成功"
with allure.step("点击登出按钮"):
dashboard_page.click_logout()
with allure.step("验证登出成功"):
# 等待跳转到登录页
page.wait_for_url("**/login", timeout=10000)
assert "/login" in page.url, f"登出后未跳转到登录页,当前URL: {page.url}"
@allure.title("登录状态保持测试")
@allure.description("验证登录状态在页面刷新后保持")
@allure.severity(allure.severity_level.NORMAL)
@pytest.mark.regression
def test_login_state_persistence(self, page: Page, login_page, dashboard_page) -> None:
"""
测试登录状态保持
前置条件:
- 用户已登录
测试步骤:
1. 登录到系统
2. 刷新页面
3. 验证仍然保持登录状态
预期结果:
- 刷新后仍然显示仪表盘
- 不需要重新登录
"""
with allure.step("先登录系统"):
login_page.navigate()
login_page.fill_username("admin")
login_page.fill_password("admin123456")
login_page.click_submit()
login_page.wait_for_redirect()
assert "/dashboard" in page.url, "登录未成功"
with allure.step("刷新页面"):
page.reload()
dashboard_page.wait_for_load()
with allure.step("验证仍然保持登录状态"):
assert "/dashboard" in page.url, f"刷新后未保持登录状态,当前URL: {page.url}"
assert dashboard_page.is_loaded(), "仪表盘页面未加载"