"""发布计划「按名字发」相关用例:一次跑完,汇总结果。 用法(项目根目录): .venv/Scripts/python scripts/tests/run_all.py # Windows .venv/bin/python scripts/tests/run_all.py # Linux/macOS 这些用例的**铁律**(与 doc/DEVELOPMENT.md 的测试约定一致): · 一律**临时 SQLite + 临时目录**(`DATABASE_URL` / `DATA_VIDEO_DIR` 指向 tempfile 建的目录), **绝不碰用户的真实库与真实素材目录**; · 需要设备的地方一律用**假设备**(桩对象/stub),**不连真机、不下发 adb**; · 每个用例自己退出码非 0 表示失败,本脚本据此汇总。 覆盖: test_parse_name 文件名/标题行解析(`名字_日期_编号`、`标题 || 正文_...`、各种拒收) test_upload_name 上传 + 配标题落库(不再依赖任何账号台账) test_name_scope 读本机账号名字、按名字取计划、推送前核对 test_switch_account 切换账号(按名字点控件、回读校验、登录页停设备) test_foreach_account 循环本机待发的号(一轮跑完、试过不回头、干净退出) test_push_by_name 按名字找设备推送(matched/unmatched、缓存) """ import os import subprocess import sys HERE = os.path.dirname(os.path.abspath(__file__)) CASES = ["test_parse_name.py", "test_upload_name.py", "test_name_scope.py", "test_switch_account.py", "test_foreach_account.py", "test_push_by_name.py"] if hasattr(sys.stdout, "reconfigure"): sys.stdout.reconfigure(encoding="utf-8", errors="replace") failed = [] for name in CASES: print("=" * 66) print("▶", name) print("=" * 66) r = subprocess.run([sys.executable, os.path.join(HERE, name)]) if r.returncode != 0: failed.append(name) print() print("=" * 66) if failed: print("❌ 失败 %d / %d:%s" % (len(failed), len(CASES), "、".join(failed))) sys.exit(1) print("✅ 全部 %d 个用例通过" % len(CASES))