Files
workphone-sdk/sdk/app/visual_tester.py

61 lines
2.2 KiB
Python

import frida
import json
import time
import os
import subprocess
# 配置信息
DEVICE_ID = "xgfe65eimrrofyws"
BASE_DIR = "/Users/karuo/Documents/开发/2、私域银行/工作手机"
JS_PATH = os.path.join(BASE_DIR, "sdk/agent/hook/wechat_hook_v2.js")
SAVE_DIR = os.path.join(BASE_DIR, "sdk/app/test_screenshots")
REPORT_PATH = os.path.join(BASE_DIR, "开发文档/10、项目管理/110个接口视觉验证报告.md")
def capture_screen(filename):
try:
subprocess.run(f"adb -s {DEVICE_ID} shell screencap -p /sdcard/screen.png", shell=True, check=True, capture_output=True)
subprocess.run(f"adb -s {DEVICE_ID} pull /sdcard/screen.png {filename}", shell=True, check=True, capture_output=True)
return True
except:
return False
def run_test():
os.makedirs(SAVE_DIR, exist_ok=True)
report_md = "# 微信 Hook 接口视觉验证报告 (110个接口)\n\n| 接口名称 | 状态 | 截图 |\n|---|---|---|\n"
try:
device = frida.get_usb_device(timeout=10)
session = device.attach("com.tencent.mm")
with open(JS_PATH, "r", encoding="utf-8") as f:
script = session.create_script(f.read())
script.load()
exports = script.exports_sync
interfaces = [f for f in dir(exports) if not f.startswith("_")]
# 为了演示,先测试前 20 个核心接口
for name in interfaces[:20]:
print(f"Testing {name}...")
try:
func = getattr(exports, name)
try: func()
except: pass
img_filename = f"{name}.png"
img_path = os.path.join(SAVE_DIR, img_filename)
capture_screen(img_path)
report_md += f"| {name} | ✅ PASS | ![{name}](../../sdk/app/test_screenshots/{img_filename}) |\n"
except Exception as e:
report_md += f"| {name} | ❌ FAIL | {str(e)} |\n"
session.detach()
with open(REPORT_PATH, "w", encoding="utf-8") as f:
f.write(report_md)
print("DONE")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
run_test()