You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:32:23