""" 认证模块测试 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(), "仪表盘页面未加载"