08ea5fbe98
添加用户管理视图、API和状态管理文件
248 lines
9.0 KiB
Python
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(), "仪表盘页面未加载"
|