Mac环境下如何通过Shell脚本启停Charles Proxy用于自动化测试
在Mac上用Shell脚本实现Charles的自动化启停完全可行,我帮你整理了一套实用的方案,既能在框架初始化时自动启动Charles,又能在测试结束后自动关闭,全程不用手动操作。
核心思路
- 利用Mac上Charles的可执行文件路径直接管控进程
- 加入进程检查逻辑避免重复启动
- 用
trap命令实现脚本异常退出时自动清理Charles进程(防止测试中途崩了导致Charles残留)
具体实现步骤
1. 确认Charles的可执行路径
Mac默认安装的Charles可执行文件路径是:/Applications/Charles.app/Contents/MacOS/Charles,你可以先在终端运行这个路径验证是否能正常启动Charles,没问题的话就用这个路径。
2. 编写Shell脚本(charles_control.sh)
下面是完整的脚本,支持start和stop两个参数,自带进程检查与容错:
#!/bin/bash # Charles可执行文件路径,非默认安装的话请修改这里 CHARLES_PATH="/Applications/Charles.app/Contents/MacOS/Charles" CHARLES_PROCESS_NAME="Charles" # 启动Charles逻辑 start_charles() { # 先检查是否已经在运行 if pgrep -x "$CHARLES_PROCESS_NAME" > /dev/null; then echo "Charles已经在运行中,无需重复启动" exit 0 fi # 后台启动Charles,不占用终端 echo "正在启动Charles..." nohup "$CHARLES_PATH" > /dev/null 2>&1 & # 等待几秒确保Charles完全启动(可根据机器性能调整时长) sleep 5 # 验证启动结果 if pgrep -x "$CHARLES_PROCESS_NAME" > /dev/null; then echo "Charles启动成功" else echo "Charles启动失败,请检查路径是否正确" exit 1 fi } # 关闭Charles逻辑 stop_charles() { # 检查是否在运行 if ! pgrep -x "$CHARLES_PROCESS_NAME" > /dev/null; then echo "Charles没有在运行,无需关闭" exit 0 fi # 尝试正常关闭进程 echo "正在关闭Charles..." pkill -x "$CHARLES_PROCESS_NAME" sleep 3 # 验证关闭结果,失败则强制杀死 if ! pgrep -x "$CHARLES_PROCESS_NAME" > /dev/null; then echo "Charles关闭成功" else echo "Charles关闭失败,尝试强制杀死进程..." pkill -9 -x "$CHARLES_PROCESS_NAME" sleep 2 if ! pgrep -x "$CHARLES_PROCESS_NAME" > /dev/null; then echo "Charles强制关闭成功" else echo "Charles无法关闭,请手动操作" exit 1 fi fi } # 处理命令参数 case "$1" in start) start_charles ;; stop) stop_charles ;; *) echo "用法: $0 {start|stop}" exit 1 ;; esac # 可选:脚本退出时自动关闭Charles(适合单测场景,无论正常/异常结束都清理) # trap stop_charles EXIT
3. 给脚本添加执行权限
写完脚本后,在终端运行以下命令赋予执行权限:
chmod +x charles_control.sh
4. 集成到自动化测试框架
- 框架初始化阶段:在框架的初始化代码里调用脚本的
start命令,比如Python框架可以用subprocess.run(["./charles_control.sh", "start"]),Java框架可以用Runtime.getRuntime().exec("./charles_control.sh start") - 测试结束/框架销毁阶段:调用脚本的
stop命令,确保测试完成后关闭Charles - 如果你担心测试中途异常退出导致Charles残留,可以把脚本里的
trap stop_charles EXIT注释去掉,这样只要脚本进程结束,就会自动触发关闭逻辑
额外提示
- 如果你安装的Charles不在默认路径,记得修改脚本里的
CHARLES_PATH变量 - 启动后的等待时间
sleep 5可以根据你的机器性能调整,确保Charles完全启动后再开始测试 - 若需要Charles自动开启系统代理,可以在Charles偏好设置里勾选"Start Charles on launch",或者配合AppleScript在脚本里实现自动开启(一般自动化测试框架会自行配置代理,这个可能不需要)
内容的提问来源于stack exchange,提问作者Kiran Sk
相关产品推荐
相关产品推荐

