SoloPi核心功能详解:录制回放与性能测试实战指南
【免费下载链接】SoloPi SoloPi 自动化测试工具 项目地址: https://gitcode.com/gh_mirrors/so/SoloPi
引言:解放移动测试效率的痛点解决方案
你是否还在为重复的手动测试步骤感到厌烦?是否在多设备兼容性测试中耗费大量时间?作为Android测试工程师,你是否渴望一种无需编写代码即可实现自动化测试的工具?SoloPi——这款由蚂蚁金服开源的自动化测试工具,正是为解决这些痛点而生。
本文将深入剖析SoloPi的两大核心功能:录制回放与性能测试。通过本文,你将获得:
- 录制回放功能的全流程操作指南与高级技巧
- 性能测试模块的多维度指标监控实现原理
- 实际测试场景中的最佳实践与常见问题解决方案
- 代码级别的功能原理分析,助你深入理解工具内核
一、录制回放:零编码实现自动化测试
1.1 功能概述与核心价值
SoloPi的录制回放功能(Record & Replay)是一种非侵入式的自动化测试解决方案,它允许测试人员通过录制实际操作生成自动化脚本,然后在不同设备上进行回放。这一功能的核心价值在于:
- 零编码门槛:无需掌握复杂的自动化测试框架语法
- 真实操作还原:基于实际用户操作录制,保证测试场景真实性
- 跨设备兼容性:一次录制,多设备回放
- 高效回归测试:快速复现测试用例,支持批量执行

1.2 实现原理与技术架构
SoloPi的录制回放功能基于Android系统的辅助功能(AccessibilityService)和触摸事件(TouchEvent)监控实现,其核心架构如下:
关键技术点包括:
- 节点树处理:通过
AccessibilityNodeProcessor解析界面元素结构 - 事件捕获机制:结合辅助功能事件与底层触摸事件
- 操作序列化:将用户操作转换为标准化的JSON格式
- 跨设备适配:基于屏幕分辨率的坐标转换算法
1.3 详细操作步骤
1.3.1 环境准备与配置
-
安装与权限设置
# 克隆仓库 git clone https://gitcode.com/gh_mirrors/so/SoloPi.git # 编译安装 cd SoloPi ./gradlew assembleDebug adb install -r app/build/outputs/apk/debug/app-debug.apk -
必要权限开启
- 辅助功能权限:设置 → 无障碍 → SoloPi → 开启
- 悬浮窗权限:设置 → 应用管理 → SoloPi → 显示在其他应用上层
- USB调试:开发者选项 → USB调试(确保ADB连接正常)
1.3.2 录制流程详解
-
启动录制
- 打开SoloPi应用,点击"录制回放"功能模块
- 选择目标应用(首次使用需授予应用列表访问权限)
- 点击悬浮窗上的录制按钮开始录制(REC图标变为红色)
-
操作录制
- 在目标应用中执行测试步骤,SoloPi会自动记录:
- 点击、长按等触摸事件
- 文本输入操作
- 界面切换与跳转
- 系统按键操作(返回、Home等)
- 在目标应用中执行测试步骤,SoloPi会自动记录:
-
录制控制
- 暂停录制:点击悬浮窗上的暂停按钮
- 添加断言:通过悬浮窗菜单选择"添加断言"
- 结束录制:点击悬浮窗上的停止按钮,输入用例名称保存
1.3.3 回放执行与结果验证
-
基本回放
- 在录制历史列表中选择目标用例
- 点击"回放"按钮,选择执行设备
- 观察回放过程,SoloPi会高亮显示当前执行步骤
-
高级回放选项
- 循环执行:设置重复次数,适用于压力测试
- 多设备同步:通过"一机多控"功能实现多设备同时回放
- 结果对比:回放结束后自动生成执行报告,包含截图对比
1.4 高级应用与最佳实践
1.4.1 测试用例组织与管理
SoloPi采用层级化的用例管理结构:
测试用例库/
├── 登录模块/
│ ├── 正常登录.json
│ ├── 密码错误.json
│ └── 账号锁定.json
├── 支付流程/
│ ├── 支付宝支付.json
│ └── 微信支付.json
└── 设置模块/
└── 修改个人信息.json
1.4.2 参数化与数据驱动测试
通过"全局参数"功能实现测试数据与用例分离:
- 在录制时选择"添加参数",设置参数名(如
username、password) - 回放前在参数设置界面输入不同测试数据
- 支持CSV文件导入导出,实现批量数据管理
1.4.3 常见问题与解决方案
| 问题场景 | 解决方案 |
|---|---|
| 录制时应用崩溃 | 1. 检查目标应用是否开启了防注入保护 2. 尝试使用"无障碍增强模式" 3. 更新SoloPi至最新版本 |
| 回放时定位不准确 | 1. 确保录制与回放设备分辨率一致 2. 使用"节点定位"而非坐标定位 3. 校准设备DPI设置 |
| 输入框无法输入文本 | 1. 检查是否授予输入法权限 2. 手动切换至SoloPi输入法 3. 通过ADB命令强制切换: adb shell ime set com.alipay.hulu/.common.tools.AdbIME |
1.5 代码级原理分析
1.5.1 录制核心实现
在CaseRecordManager类中,录制流程的核心代码如下:
// 设置录制模式
operationService.putRuntimeParam(com.alipay.hulu.shared.node.action.Constant.KEY_CURRENT_MODE, "record");
// 开始录制
InjectorService.g().pushMessage(Constant.RUNNING_STATUS, "record");
// 初始化操作步骤服务
operationStepService.startRecord(caseInfo);
// 启动事件监听
eventService.startTrackAccessibilityEvent();
if (isSupportedDevice()) {
eventService.startTrackTouch();
}
录制过程中,操作步骤被存储为OperationStep对象:
public class OperationStep {
private int index; // 步骤序号
private String operationType; // 操作类型(点击/输入等)
private long timestamp; // 时间戳
private Map<String, Object> params; // 操作参数
private Rect bounds; // 元素位置
private String nodeInfo; // 节点信息
}
1.5.2 回放执行流程
回放引擎在CaseReplayManager中实现,核心代码:
// 创建回放上下文
OperationContext context = new OperationContext();
context.setCaseInfo(caseInfo);
context.setReplayStartTime(new Date());
// 获取步骤提供者
AbstractStepProvider provider = new OperationStepProvider(caseInfo);
// 执行步骤
OperationStep step;
while ((step = provider.nextStep()) != null) {
OperationStepResult result = executeStep(step, context);
if (!result.isSuccess()) {
// 处理执行失败
handleStepFailure(step, result, context);
break;
}
}
二、性能测试:全方位监控应用表现
2.1 功能概述与核心价值
SoloPi的性能测试功能提供了对Android应用多维度性能指标的实时监控与数据记录能力。与传统性能测试工具相比,其独特优势在于:
- 无线化部署:无需连接电脑即可独立运行
- 低侵入性:无需在目标应用中植入SDK
- 实时可视化:悬浮窗实时显示性能数据
- 多指标同步:CPU、内存、FPS等指标同时监控

2.2 性能指标体系
SoloPi监控的核心性能指标包括:
2.2.1 系统级指标
- CPU使用率:应用进程CPU占用率与系统总CPU占用率
- 内存使用:PSS(Prorated Share Size)、USS(Unique Set Size)等多种内存指标
- 网络状况:网络类型、实时上下行速率
- 电池状态:电量消耗速度、当前电量百分比
2.2.2 应用级指标
- 帧率(FPS):应用界面刷新率,反映UI流畅度
- 启动时间:冷启动、热启动、温启动时间
- 页面切换耗时:Activity/Fragment切换时间
- 响应时间:用户操作到界面反馈的时间间隔
2.3 操作指南与数据分析
2.3.1 性能测试配置流程
-
新建性能测试任务
- 打开SoloPi,选择"性能测试"模块
- 选择目标应用,设置测试时长
- 配置监控指标(默认全选)
- 设置数据采样频率(建议1-5秒)
-
执行测试
- 点击"开始"按钮,悬浮窗显示实时数据
- 执行应用操作场景(如浏览商品、提交订单等)
- 测试过程中可标记关键时间点(点击悬浮窗"标记"按钮)
-
测试报告生成
- 测试结束后自动生成HTML报告
- 支持数据导出(CSV/JSON格式)
- 图表化展示各项指标变化趋势
2.3.2 性能数据解读
CPU使用率分析:
- 正常范围:应用CPU占用率应低于30%
- 异常模式:持续高于70%可能导致应用卡顿
- 峰值分析:关注操作瞬间的CPU峰值,可能反映性能瓶颈
内存泄漏检测: 通过内存趋势图判断是否存在泄漏:
- 正常:内存使用呈现"锯齿状",有明显峰值和回落
- 泄漏:多次操作后内存基线持续上升,无明显回落
帧率分析:
- 理想状态:稳定在60FPS(Android标准刷新率)
- 卡顿阈值:低于45FPS用户可感知卡顿
- 掉帧率:连续低于30FPS的持续时间占比
2.4 高级功能与实战技巧
2.4.1 性能压测与边界测试
SoloPi支持性能加压功能,模拟极端环境:
- CPU加压:限制CPU核心数量或设置CPU频率上限
- 内存限制:通过
fillMemory本地方法模拟内存紧张场景 - 网络模拟:模拟2G/3G/弱网等不同网络环境
2.4.2 自定义性能指标
通过"自定义指标"功能添加业务特定指标:
// 自定义指标示例:页面加载完成时间
public class PageLoadTimeMetric implements CustomMetric {
@Override
public String getName() {
return "页面加载时间";
}
@Override
public double getValue() {
// 实现自定义指标计算逻辑
return calculatePageLoadTime();
}
}
2.4.3 性能问题定位流程
- 发现异常:通过SoloPi发现性能指标异常
- 复现问题:使用录制回放功能复现异常场景
- 深入分析:结合Android Studio Profiler进行详细分析
- 优化验证:修复后使用相同用例验证优化效果
2.5 技术原理与代码分析
2.5.1 CPU使用率监控实现
CPUTools类通过读取系统文件和进程信息实现CPU监控:
// 读取/proc/stat文件获取CPU信息
private static String loadTotalLine() {
if (Build.VERSION.SDK_INT > 25) {
// Android O及以上通过ADB命令读取
return CmdTools.execAdbCmd("cat /proc/stat", 0).split("\n")[0];
} else {
// 低版本直接读取文件
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream("/proc/stat")), 1000);
return reader.readLine().trim();
}
}
// 解析CPU使用率
public static float getUsage() {
String[] cpuInfos = loadTotalLine().split("\\s+");
// 计算CPU总时间和空闲时间
currentJiffies = Long.parseLong(cpuInfos[1]) + Long.parseLong(cpuInfos[2]) +
Long.parseLong(cpuInfos[3]) + Long.parseLong(cpuInfos[4]) +
Long.parseLong(cpuInfos[5]) + Long.parseLong(cpuInfos[6]) +
Long.parseLong(cpuInfos[7]);
currentIdle = Long.parseLong(cpuInfos[4]);
// 计算CPU使用率
long gapJiffies = currentJiffies - lastJiffies;
long gapIdle = currentIdle - lastIdle;
float usage = 100 * (gapJiffies - gapIdle) / (float) gapJiffies;
// 更新历史数据
lastJiffies = currentJiffies;
lastIdle = currentIdle;
return usage;
}
2.5.2 内存监控实现
内存监控通过MemoryTools类实现,核心代码:
// 获取内存信息
public static String getMemoryInfo(Context context) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(mi);
// 可用内存(MB)
long availMemory = mi.availMem / (1024 * 1024);
// 总内存(MB)
long totalMemory = mi.totalMem / (1024 * 1024);
return StringUtil.getString(R.string.display_memory__current_info, availMemory, totalMemory);
}
// 内存加压native方法
private static native int fillMemory(int memory);
2.5.3 FPS监控原理
帧率监控通过FpsTools类实现,利用Choreographer获取帧绘制信息:
// 注册帧回调
Choreographer.getInstance().postFrameCallback(new Choreographer.FrameCallback() {
@Override
public void doFrame(long frameTimeNanos) {
// 计算帧间隔时间
if (lastFrameTimeNanos != 0) {
long frameInterval = (frameTimeNanos - lastFrameTimeNanos) / 1_000_000;
// 计算FPS
float fps = 1000f / frameInterval;
updateFpsData(fps);
}
lastFrameTimeNanos = frameTimeNanos;
// 继续注册回调
Choreographer.getInstance().postFrameCallback(this);
}
});
2.6 性能测试最佳实践
2.6.1 典型测试场景
应用冷启动性能测试:
- 配置:CPU、内存、启动时间指标
- 步骤:
- 强制停止目标应用(
adb shell am force-stop com.target.package) - 点击"开始监控"
- 启动应用并记录启动完成时间点
- 强制停止目标应用(
- 分析指标:总启动时间、CPU峰值、内存增长曲线
滑动流畅度测试:
- 配置:FPS、CPU、内存指标,采样频率1秒
- 步骤:
- 开始监控后,在应用内执行连续滑动操作(30秒)
- 标记滑动开始和结束时间点
- 分析指标:平均FPS、最低FPS、掉帧次数统计
2.6.2 性能阈值参考
| 指标 | 优秀标准 | 及格标准 | 需优化标准 |
|---|---|---|---|
| 冷启动时间 | <1.5秒 | <3秒 | >5秒 |
| 页面切换时间 | <300ms | <500ms | >800ms |
| 平均FPS | >55fps | >45fps | <30fps |
| 内存占用 | 稳定无增长 | 增长可控 | 持续增长不回落 |
| CPU占用率 | <20% | <40% | >70% |
三、总结与展望
SoloPi作为一款优秀的开源移动测试工具,通过录制回放和性能测试两大核心功能,为Android测试工程师提供了高效便捷的测试解决方案。其无线化、非侵入式的特点,极大降低了自动化测试的门槛,使测试人员能够将更多精力投入到测试场景设计而非脚本编写中。
3.1 功能对比:SoloPi vs 传统方案
| 特性 | SoloPi | Appium | 传统手动测试 |
|---|---|---|---|
| 技术门槛 | 低(无需编程) | 中(需掌握脚本语言) | 低 |
| 执行效率 | 高(自动化) | 高(自动化) | 低 |
| 设备兼容性 | 高(一次录制多设备回放) | 中(需适配不同设备) | 高(但重复工作多) |
| 侵入性 | 无 | 低 | 无 |
| 学习成本 | 1-2天 | 1-2周 | 无 |
3.2 进阶使用建议
-
结合Jenkins实现持续测试
- 通过ADB命令触发SoloPi执行测试
- 解析测试报告生成趋势图表
- 异常结果自动发送邮件通知
-
与其他工具协同使用
- 录制回放生成的JSON用例可通过SoloPi-Convertor转换为Appium/Macaca脚本
- 性能测试数据导入Grafana进行长期趋势分析
- 结合Charles/Fiddler进行网络相关性能测试
-
参与社区贡献
- 在GitHub上提交Issue和Pull Request
- 加入SoloPi钉钉群参与讨论
- 分享使用经验和定制化方案
3.3 未来展望
随着移动应用复杂度的不断提升,SoloPi也在持续进化。未来版本可能会加入更多令人期待的功能:
- AI辅助的智能测试用例生成
- 更全面的鸿蒙系统支持
- 云测试平台集成
- 更深入的应用性能分析能力
作为测试工程师,掌握SoloPi这类高效工具不仅能提升工作效率,更能将测试工作从重复劳动中解放出来,专注于更有价值的测试策略设计和质量分析工作。立即尝试SoloPi,开启你的高效移动测试之旅吧!
如果你觉得本文对你有帮助,请点赞、收藏、关注三连支持!
【免费下载链接】SoloPi SoloPi 自动化测试工具 项目地址: https://gitcode.com/gh_mirrors/so/SoloPi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



