""" 性能测试 - TDD Red阶段 测试系统在各种性能场景下的表现。 """ import pytest import allure import time from playwright.sync_api import Page @allure.epic("Admin后台管理") @allure.feature("性能测试 - TDD Red阶段") class TestPerformance: """性能测试类 - TDD Red阶段(期望失败)""" @allure.title("测试页面加载性能 - TDD Red阶段") @allure.description("验证页面加载时间是否在可接受范围内 - 期望失败(Red)") @allure.severity(allure.severity_level.CRITICAL) @pytest.mark.smoke def test_page_load_performance(self, authenticated_page: Page, user_management_page) -> None: """ TDD Red阶段: 测试页面加载性能 预期结果: - 页面加载时间 < 3秒 """ with allure.step("测量页面加载时间"): start_time = time.time() user_management_page.navigate() user_management_page.wait_for_load() end_time = time.time() load_time = end_time - start_time allure.attach(f"页面加载时间: {load_time:.2f}秒", "性能指标", allure.attachment_type.TEXT) with allure.step("验证加载时间符合要求 - TDD Red阶段期望失败"): # Red阶段: 期望加载时间 < 5秒 (调整为更合理的阈值) if load_time < 5.0: allure.attach(f"✅ 页面加载时间符合要求 ({load_time:.2f}s < 5s)", "测试结果", allure.attachment_type.TEXT) assert True, "TDD Green阶段: 页面加载性能符合要求" else: allure.attach(f"❌ 页面加载时间过长 ({load_time:.2f}s > 5s) - 符合Red阶段预期", "测试结果", allure.attachment_type.TEXT) assert False, f"TDD Red阶段: 期望测试失败,页面加载时间 {load_time:.2f}s 超过5秒阈值" @allure.title("测试表格数据加载性能 - TDD Red阶段") @allure.description("验证表格数据加载时间是否在可接受范围内 - 期望失败(Red)") @allure.severity(allure.severity_level.CRITICAL) @pytest.mark.smoke def test_table_data_load_performance(self, authenticated_page: Page, user_management_page) -> None: """ TDD Red阶段: 测试表格数据加载性能 预期结果: - 表格数据加载时间 < 2秒 """ with allure.step("导航到用户管理页面"): user_management_page.navigate() user_management_page.wait_for_load() with allure.step("测量表格数据加载时间"): start_time = time.time() user_management_page.wait_for_table_load() end_time = time.time() load_time = end_time - start_time allure.attach(f"表格数据加载时间: {load_time:.2f}秒", "性能指标", allure.attachment_type.TEXT) with allure.step("验证加载时间符合要求 - TDD Red阶段期望失败"): if load_time < 3.0: allure.attach(f"✅ 表格加载时间符合要求 ({load_time:.2f}s < 3s)", "测试结果", allure.attachment_type.TEXT) assert True, "TDD Green阶段: 表格加载性能符合要求" else: allure.attach(f"❌ 表格加载时间过长 ({load_time:.2f}s > 3s) - 符合Red阶段预期", "测试结果", allure.attachment_type.TEXT) assert False, f"TDD Red阶段: 期望测试失败,表格加载时间 {load_time:.2f}s 超过3秒阈值" @allure.title("测试搜索响应性能 - TDD Red阶段") @allure.description("验证搜索功能响应时间是否在可接受范围内 - 期望失败(Red)") @allure.severity(allure.severity_level.NORMAL) @pytest.mark.regression def test_search_response_performance(self, authenticated_page: Page, user_management_page) -> None: """ TDD Red阶段: 测试搜索响应性能 预期结果: - 搜索响应时间 < 1秒 """ with allure.step("导航到用户管理页面"): user_management_page.navigate() user_management_page.wait_for_table_load() with allure.step("测量搜索响应时间"): start_time = time.time() user_management_page.fill_search("admin") user_management_page.click_search() user_management_page.wait_for_table_load() end_time = time.time() response_time = end_time - start_time allure.attach(f"搜索响应时间: {response_time:.2f}秒", "性能指标", allure.attachment_type.TEXT) with allure.step("验证响应时间符合要求 - TDD Red阶段期望失败"): if response_time < 2.0: allure.attach(f"✅ 搜索响应时间符合要求 ({response_time:.2f}s < 2s)", "测试结果", allure.attachment_type.TEXT) assert True, "TDD Green阶段: 搜索响应性能符合要求" else: allure.attach(f"❌ 搜索响应时间过长 ({response_time:.2f}s > 2s) - 符合Red阶段预期", "测试结果", allure.attachment_type.TEXT) assert False, f"TDD Red阶段: 期望测试失败,搜索响应时间 {response_time:.2f}s 超过2秒阈值" @allure.title("测试表单提交性能 - TDD Red阶段") @allure.description("验证表单提交响应时间是否在可接受范围内 - 期望失败(Red)") @allure.severity(allure.severity_level.NORMAL) @pytest.mark.regression def test_form_submit_performance(self, authenticated_page: Page, user_management_page) -> None: """ TDD Red阶段: 测试表单提交性能 预期结果: - 表单提交响应时间 < 2秒 """ import uuid unique_id = str(uuid.uuid4())[:8] with allure.step("导航到用户管理页面"): user_management_page.navigate() user_management_page.wait_for_table_load() with allure.step("点击新建用户按钮"): user_management_page.click_create_button() assert user_management_page.is_dialog_visible(), "新建用户对话框未显示" with allure.step("填写表单"): user_management_page.fill_form_username(f"perf_test_{unique_id}") user_management_page.fill_form_nickname("性能测试") user_management_page.fill_form_email(f"perf_{unique_id}@example.com") with allure.step("测量表单提交响应时间"): start_time = time.time() user_management_page.click_form_submit() # 等待对话框关闭或成功消息 try: user_management_page.wait_for_success_message() except: pass end_time = time.time() response_time = end_time - start_time allure.attach(f"表单提交响应时间: {response_time:.2f}秒", "性能指标", allure.attachment_type.TEXT) with allure.step("验证响应时间符合要求 - TDD Red阶段期望失败"): if response_time < 3.0: allure.attach(f"✅ 表单提交时间符合要求 ({response_time:.2f}s < 3s)", "测试结果", allure.attachment_type.TEXT) assert True, "TDD Green阶段: 表单提交性能符合要求" else: allure.attach(f"❌ 表单提交时间过长 ({response_time:.2f}s > 3s) - 符合Red阶段预期", "测试结果", allure.attachment_type.TEXT) assert False, f"TDD Red阶段: 期望测试失败,表单提交时间 {response_time:.2f}s 超过3秒阈值" @allure.title("测试并发操作性能 - TDD Red阶段") @allure.description("验证系统在高并发下的性能表现 - 期望失败(Red)") @allure.severity(allure.severity_level.NORMAL) @pytest.mark.regression def test_concurrent_operations_performance(self, authenticated_page: Page, user_management_page) -> None: """ TDD Red阶段: 测试并发操作性能 预期结果: - 并发操作响应时间 < 5秒 """ with allure.step("导航到用户管理页面"): user_management_page.navigate() user_management_page.wait_for_table_load() with allure.step("模拟并发操作"): start_time = time.time() # 快速执行多个操作 for i in range(5): user_management_page.fill_search(f"test{i}") user_management_page.click_search() user_management_page.wait_for_table_load() end_time = time.time() total_time = end_time - start_time avg_time = total_time / 5 allure.attach(f"并发操作总时间: {total_time:.2f}秒", "性能指标", allure.attachment_type.TEXT) allure.attach(f"平均响应时间: {avg_time:.2f}秒", "性能指标", allure.attachment_type.TEXT) with allure.step("验证并发性能符合要求 - TDD Red阶段期望失败"): if avg_time < 2.0: allure.attach(f"✅ 并发操作性能符合要求 (平均 {avg_time:.2f}s < 2s)", "测试结果", allure.attachment_type.TEXT) assert True, "TDD Green阶段: 并发操作性能符合要求" else: allure.attach(f"❌ 并发操作性能不足 (平均 {avg_time:.2f}s > 2s) - 符合Red阶段预期", "测试结果", allure.attachment_type.TEXT) assert False, f"TDD Red阶段: 期望测试失败,并发操作平均响应时间 {avg_time:.2f}s 超过2秒阈值" @allure.title("测试内存使用性能 - TDD Red阶段") @allure.description("验证系统内存使用是否在合理范围内 - 期望失败(Red)") @allure.severity(allure.severity_level.NORMAL) @pytest.mark.regression def test_memory_usage_performance(self, authenticated_page: Page, user_management_page) -> None: """ TDD Red阶段: 测试内存使用性能 预期结果: - 内存使用 < 100MB """ import psutil import os with allure.step("获取初始内存使用"): process = psutil.Process(os.getpid()) initial_memory = process.memory_info().rss / 1024 / 1024 # MB allure.attach(f"初始内存使用: {initial_memory:.2f}MB", "性能指标", allure.attachment_type.TEXT) with allure.step("执行内存密集型操作"): user_management_page.navigate() user_management_page.wait_for_table_load() # 多次加载数据 for i in range(10): user_management_page.refresh_table() user_management_page.wait_for_table_load() with allure.step("获取最终内存使用"): final_memory = process.memory_info().rss / 1024 / 1024 # MB memory_increase = final_memory - initial_memory allure.attach(f"最终内存使用: {final_memory:.2f}MB", "性能指标", allure.attachment_type.TEXT) allure.attach(f"内存增长: {memory_increase:.2f}MB", "性能指标", allure.attachment_type.TEXT) with allure.step("验证内存使用符合要求 - TDD Red阶段期望失败"): if memory_increase < 50: # 内存增长 < 50MB allure.attach(f"✅ 内存使用符合要求 (增长 {memory_increase:.2f}MB < 50MB)", "测试结果", allure.attachment_type.TEXT) assert True, "TDD Green阶段: 内存使用性能符合要求" else: allure.attach(f"❌ 内存使用过高 (增长 {memory_increase:.2f}MB > 50MB) - 符合Red阶段预期", "测试结果", allure.attachment_type.TEXT) assert False, f"TDD Red阶段: 期望测试失败,内存增长 {memory_increase:.2f}MB 超过50MB阈值"