用ProxyPin和Autox.js,5分钟搞定安卓APP的Cookie自动抓取与转发(附完整脚本) 安卓自动化测试实战5分钟构建Cookie抓取与转发系统在移动应用测试领域Cookie数据的获取与分析往往是接口测试、用户行为追踪的关键环节。传统手动操作不仅效率低下在多设备并行测试时更显得力不从心。本文将介绍一套基于ProxyPin和Autox.js的高效解决方案帮助测试工程师快速搭建自动化流水线。这套系统的核心优势在于开箱即用无需复杂配置5分钟完成部署多设备支持可同时监控多台安卓设备智能过滤精准捕获目标APP的特定域名请求无缝集成自动转发数据到后端分析系统1. 环境准备与工具配置1.1 设备与软件要求实施本方案需要准备以下基础环境安卓设备推荐使用红米NOTE5及以上机型Android 7.0系统ProxyPin最新版抓包工具v2.3.0Autox.js自动化脚本引擎v6.3.2开发电脑用于调试脚本和查看抓包数据提示建议使用性能中等的专用测试机避免主力机因证书安装影响日常使用1.2 证书安装关键步骤HTTPS流量捕获需要正确安装根证书这是许多开发者容易忽略的关键环节打开ProxyPin应用进入SSL证书设置页点击下载CA证书保存到设备存储进入系统设置 → 安全 → 加密与凭据选择安装证书 → CA证书找到下载的ProxyPin.pem文件完成安装验证证书是否生效adb shell su -c cp /data/misc/user/0/cacerts-added/* /system/etc/security/cacerts/ adb reboot2. ProxyPin高级配置技巧2.1 智能过滤规则设置面对海量网络请求精准过滤是提高效率的核心。推荐采用三级过滤策略过滤层级配置要点示例值应用级包名精确匹配com.target.app域名级主域名子域名api.example.com路径级关键接口路径/v1/user/login在ProxyPin中设置过滤规则的JavaScript代码片段function shouldCapture(request) { return request.host.includes(api.example.com) request.path.startsWith(/v1/); }2.2 数据转发脚本优化原始脚本可能存在请求丢失问题以下是增强版转发脚本async function onResponse(context, request, response) { const MAX_RETRY 3; let retryCount 0; const sendData async () { try { const res await fetch(https://your-backend.com/collect, { method: POST, headers: { X-Request-ID: generateUUID() }, body: JSON.stringify({ device: context.deviceInfo, request: request, response: response }), timeout: 5000 }); return res.ok; } catch (e) { if (retryCount MAX_RETRY) { await sleep(1000); return sendData(); } throw e; } }; await sendData().catch(e console.error(转发失败:, e)); return response; } function generateUUID() { return xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx.replace(/[xy]/g, function(c) { const r Math.random() * 16 | 0; return (c x ? r : (r 0x3 | 0x8)).toString(16); }); }3. Autox.js自动化集成3.1 设备控制核心脚本实现自动化需要处理以下关键场景定时启动目标APP监控APP崩溃重启异常状态自动恢复基础控制脚本框架const { openApp, captureCookie } require(./lib/core); // 主循环 function main() { while(true) { try { openApp(com.target.app); sleep(5000); if (!captureCookie()) { restartProxyPin(); } sleep(60000); // 每分钟检查一次 } catch(e) { logError(e); rebootDevice(); // 严重错误时重启设备 } } } // 启动ProxyPin服务 function restartProxyPin() { shell(am force-stop com.proxypin); shell(am start -n com.proxypin/.MainActivity); sleep(3000); }3.2 多设备管理方案当需要管理多台测试设备时建议采用集中控制模式设备注册表JSON格式{ devices: [ { id: device001, ip: 192.168.1.101, model: Redmi Note 5, status: idle }, { id: device002, ip: 192.168.1.102, model: Pixel 3, status: running } ] }分布式任务调度const schedule require(node-schedule); // 每天上午10点启动测试 schedule.scheduleJob(0 10 * * *, () { devices.forEach(device { if (device.status idle) { exec(adb -s ${device.id} shell am start -n com.autoxjs/.MainActivity); } }); });4. 实战问题排查指南4.1 常见错误代码速查表错误代码可能原因解决方案CERT_VERIFY_FAIL证书未正确安装检查系统证书存储位置ECONNREFUSED后端服务未启动验证服务端口监听状态ETIMEDOUT网络延迟过高调整超时时间为10000ms403 Forbidden请求头缺失添加User-Agent等必要头信息4.2 性能优化建议在高并发场景下需要注意以下性能瓶颈内存泄漏定期重启ProxyPin进程每2小时网络延迟使用gzip压缩传输数据存储压力设置自动清理旧日志保留最近7天优化后的转发脚本配置示例const zlib require(zlib); async function compressData(data) { return new Promise((resolve, reject) { zlib.gzip(JSON.stringify(data), (err, buffer) { if (err) reject(err); else resolve(buffer.toString(base64)); }); }); } // 在转发请求中使用压缩数据 headers: { Content-Encoding: gzip, Content-Type: application/json }, body: await compressData(payload)5. 进阶应用场景5.1 用户行为分析系统集成将抓取的Cookie数据与用户行为分析平台结合可以构建更完整的测试体系数据关联流程通过Cookie中的session_id关联用户会话结合点击流数据重建用户路径异常行为自动标记分析看板关键指标const metrics { sessionDuration: calculateDuration(cookies), pageViews: countPages(cookies), conversionRate: calculateCR(cookies) };5.2 自动化测试流水线在CI/CD环境中集成此方案的建议架构[安卓设备集群] → [ProxyPin捕获] → [数据处理服务] → [测试报告] ↑ ↑ ↑ [Autox.js控制] [过滤规则库] [分析规则引擎]实现代码片段# Jenkins Pipeline示例 stage(Cookie测试) { parallel { stage(设备A) { steps { sh adb -s device1 shell am start -n com.autoxjs/.MainActivity } } stage(设备B) { steps { sh adb -s device2 shell am start -n com.autoxjs/.MainActivity } } } }在实际项目中这套系统已经帮助我们将接口测试的准备时间从原来的30分钟缩短到5分钟以内特别是进行AB测试时可以快速获取多组设备的Cookie数据进行对比分析。