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