# framework/scripts/file_system_scenario.py import os import time import random from framework.core.logger import get_logger logger = get_logger("FileSystemScenario") def run_stress_upload_test(fm, file_path, cycles=3): """ 业务逻辑:文件上传压力测试(大文件上传-取消) """ logger.info(f"🚀 启动上传-取消压测 - {cycles} 次") for i in range(1, cycles + 1): logger.info(f"--- 循环第 {i} 次 ---") try: fm.upload_files(file_path) # 大文件需要等一下让上传进度条和取消按钮出现 time.sleep(3) fm.cancel_upload() except Exception as e: logger.warning(f"压测第 {i} 次异常(可忽略): {e}") # 确保弹窗关闭,不影响下一轮 try: fm.page.evaluate("document.querySelector('button.p-dialog-header-close')?.click()") except: pass time.sleep(1) def run_full_file_lifecycle(fm, folder_name): """ 业务逻辑:完整的文件生命周期流程 - 从 test_data 目录随机选取文件上传 - 随机重命名已上传的压缩包 - 返回根目录后删除之前创建的文件夹 """ logger.info(f"--- 开启文件系统全生命周期测试 [{folder_name}] ---") fm.navigate_to() # 1. 创建并进入测试文件夹 fm.create_folder(folder_name) fm.enter_folder(folder_name) # 2. 收集 test_data 目录下所有文件 from framework.config.settings import Config test_data_dir = Config.TEST_DATA_DIR if not os.path.isdir(test_data_dir): logger.warning(f"⚠️ test_data 目录不存在: {test_data_dir},跳过上传测试") fm.back_to_root() time.sleep(2) fm.delete_item(folder_name) time.sleep(3) return all_files = [f for f in os.listdir(test_data_dir) if os.path.isfile(os.path.join(test_data_dir, f))] if not all_files: logger.warning("⚠️ test_data 目录为空,跳过上传测试") fm.back_to_root() time.sleep(2) fm.delete_item(folder_name) time.sleep(3) return all_paths = [os.path.join(test_data_dir, f) for f in all_files] total_size = sum(os.path.getsize(p) for p in all_paths) logger.info(f"📦 test_data 共 {len(all_files)} 个文件,总计 {total_size / 1024 / 1024:.1f} MB") # 3. 一次性上传全部文件(Playwright 支持多文件) fm.upload_files(all_paths) fm.wait_for_success(count=len(all_files)) # 4. 等待文件列表完全刷新(上传对话框关闭后列表需要数秒才能稳定) logger.info("⏳ 等待文件列表稳定...") time.sleep(5) # 5. 随机选取一个当前页面可见的文件并重命名 page_text = fm.page.content() visible_files = [f for f in all_files if f in page_text] if visible_files: rename_target = random.choice(visible_files) logger.info(f"📄 当前第一页可见 {len(visible_files)} 个文件,随机命中: {rename_target}") else: logger.warning("⚠️ 未在第一页检测到任何上传的文件名,回退使用完全随机选择") rename_target = random.choice(all_files) file_base, file_ext = os.path.splitext(rename_target) random_suffix = random.randint(1000, 9999) new_name = f"UI_RENAMED_{random_suffix}{file_ext}" logger.info(f"🎲 随机重命名目标: {rename_target} -> {new_name}") fm.rename_item(rename_target, new_name) # 7. 返回根目录,并删除之前创建的测试文件夹 fm.back_to_root() time.sleep(5) fm.delete_item(folder_name) time.sleep(5) logger.info("✅ 文件系统场景测试完成")