run_all.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python3
  2. """
  3. 一键跑通测试
  4. 1. 本地接口 pytest(21+ 条,不依赖 QiWe 真实 guid)
  5. 2. QiWe 真实联调(需 .env 中 QIWEI_TOKEN + QIWEI_GUID)
  6. 3. 生成 report.html
  7. 用法(先确保 backend 已 pnpm dev):
  8. cd backend/tests_python
  9. python run_all.py
  10. """
  11. from __future__ import annotations
  12. import subprocess
  13. import sys
  14. from pathlib import Path
  15. from load_env import load_backend_env
  16. ROOT = Path(__file__).resolve().parent
  17. def main() -> int:
  18. env = load_backend_env()
  19. token_ok = bool(env.get('QIWEI_TOKEN'))
  20. guid = env.get('QIWEI_GUID', '').strip()
  21. room_ids = [x.strip() for x in env.get('QIWEI_ROOM_IDS', '').split(',') if x.strip()]
  22. print('=' * 60)
  23. print('Lami 接口一键测试')
  24. print('=' * 60)
  25. print(f' QIWEI_TOKEN: {"已配置" if token_ok else "未配置"}')
  26. print(f' QIWEI_GUID: {guid if guid else "未配置(真实 QiWe 联调将跳过)"}')
  27. print(f' QIWEI_ROOM_IDS: {len(room_ids)} 个群' if room_ids else ' QIWEI_ROOM_IDS: 未配置')
  28. if token_ok and not guid:
  29. print()
  30. print(' 提示: Token 已生效,但拉群/同步消息还需要设备 GUID。')
  31. print(' 请打开 https://manager.qiweapi.com/nodes 复制设备 ID,写入 backend/.env:')
  32. print(' QIWEI_GUID=你的设备ID')
  33. print(' 然后重新运行: python run_all.py')
  34. print('=' * 60)
  35. cmd = [
  36. sys.executable,
  37. '-m',
  38. 'pytest',
  39. '-v',
  40. '--html=report.html',
  41. '--self-contained-html',
  42. '-m',
  43. 'integration',
  44. ]
  45. if guid:
  46. cmd.extend(['-m', 'integration or qiwei_live'])
  47. print('(含 QiWe 真实联调:test_13~test_17,使用 QIWEI_ROOM_IDS 登记群)\n')
  48. else:
  49. print('(本次仅跑本地集成测试,不含 QiWe 真实数据用例)\n')
  50. result = subprocess.run(cmd, cwd=ROOT)
  51. print()
  52. if result.returncode == 0:
  53. print(f'全部通过。报告: {ROOT / "report.html"}')
  54. else:
  55. print(f'存在失败用例,请查看上方日志。报告: {ROOT / "report.html"}')
  56. return result.returncode
  57. if __name__ == '__main__':
  58. raise SystemExit(main())