test/framework/scripts/file_system_scenario.py

100 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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("✅ 文件系统场景测试完成")