Sonic云真机测试平台与app自动化测试
一、Sonic核心功能详解
在移动互联网时代,客户端应用的兼容性测试和远程调试需求日益增长。传统的物理设备管理方式存在成本高、效率低、跨平台协作困难等问题。Sonic 作为一款开源的云真机测试平台,能够解决以下问题:
-
兼容性测试:需要接入一定数量、具有代表性的测试机资源;
-
自动化测试:
-
零编码UI自动化:通过积木式操作界面,快速构建测试流程,一键分发多设备任务;
-
支持多平台:覆盖覆盖 Android、iOS 和 鸿蒙系统等应用;
-
可视化报告:自动生成包含截图、日志等信息的详细测试报告,快速定位问题;
-
自定义脚本:可以自己写脚本代码,连接云真机运行测试,代码语言支持Groovy(Java)和Python。
-
-
测试机资源紧张:云真机平台秉承着用完即走的设计理念,因此使用完退出后,下一个登录用户可以接着使用,一定程度上可以解决研发团队测试机资源紧张的问题;
-
远程演示:如验收测试或是在客户演示过程中,只需要在已投屏的电脑上登录远程云真机的地址,即可实时访问并操作真机,方便同步观看;
-
测试数据共享不便问题:测试过程中,有时需要在一个历史版本上验证回溯问题,云真机可以安装历史版本的app,并提前预置好测试数据,以便共享使用;
-
远程控制与调试:
-
跨网段设备访问:通过 Agent 端实现跨网络、跨地域的设备远程控制;
-
实时WebView调试:集成 Chrome DevTools,支持在线调试 H5 页面;
-
代理抓包:一键开启抓包功能,分析网络请求与性能瓶颈;
-
日志查看:可以实时查看和筛选Logcat日志,支持输入Shell命令操作系统后台。
-
-
CI/CD 集成:
-
Jenkins 插件支持:通过在Jenkins中安装 sonic-ci-helper.hpi 插件,可以无缝对接持续集成流水线,实现触发 Sonic 自动化测试流程,生成报告并通过飞书、钉钉、微信等机器人通知团队;
-
定时任务:通过 Quartz 分布式任务框架,设置Cron表达式,定期清理数据并发送测试日报/周报。
-
二、Sonic架构
- 基础通信架构

通过架构图可以看到,用户可以通过 Sonic 平台,轻松访问跨网段的 Agent 下的设备,执行远控或测试,如果公司资金充足的情况下,全球分布多个机房是 ok 的,这样可以满足公司有海外业务测试的需求。
-
Agent 端
从基础通信架构图我们得知,所有 Agent 端都是需要跟 sonic-server 通信的,往下是跟连接的设备进行通信的。所以 Agent 端可以说是执行机。
架构图

Agent 通过图中的方式与设备进行交互(ADB 通信、Appium 交互),同时自身加入了图像算法与 webSocket 服务。
三、Agent端部署与设备接入
1、Agent端部署
- jar 方式部署
该方式将以本地 jar 包部署 Agent 端、Appium 等等环境。
- 最低启动要求为JDK17或者以上版本
- 从部署好的前端界面【设备中心】的【Agent 中心】新增 Agent,记录 Agent 的 Key

- 选择 PC 对应的平台 zip 包下载并解压到任意目录,这里标记为 工作目录(下载链接为Releases · SonicCloudOrg/sonic-agent)

这里以windows平台为例,其它平台的部署方式可参照链接:Agent 端部署 | Sonic - 开源云真机平台
- 修改 config 文件夹中 application-sonic-agent.yml 的配置信息,保存。

- 在 工作目录 路径下执行以下指令
- 先在终端控制台输入 chcp 65001 并回车,再输入以下命令
java -Dfile.encoding=utf-8 -jar sonic-agent-windows-x86_64.jar
- 至此,Agent端即部署完毕,成功启动后界面如下

2、设备接入
1. 安卓设备接入
1. 通用接入步骤(所有设备都需要按照这个步骤接入)
1. 将 usb 线一端插入 Agent,另一端插入手机
2. 进入手机【设置】页面
3. 进入【关于手机】页面
4. 点击多次【版本号】,直到开启开发者选项
5. 进入开发者选项
6. 打开 usb 调试
7. 保持设备竖放或平放
2. 各手机品牌接入时的设置,会有细微差异,这里以 小米14Pro 为例,其他品牌具体不同设置可参照:安卓设备接入 | Sonic - 开源云真机平台
1. 进入【设置】->【我的设备】->【全部参数】->【MIUI 版本】多次点击开启开发者选项
2. 【更多设置】中,打开开发者页面,【USB 安装】和【USB 调试(安全模式)】打开,【USB 调试(安全模式)】选项需要插入 SIM 卡才能开启,可以配置完成后拔出
3. 开发者最底下【启用系统优化】关闭
4. 【语言与输入法】关闭安全键盘
5. 【当前输入法】选择 Sonic Keyboard
6. 找到 sonic ,应用权限设置成 -> 【无限制】
2. iOS设备接入,可参照:iOS 设备接入 | Sonic - 开源云真机平台
3. 设备接入成功后,【设备中心】的状态如下,点击【马上使用】,可进入设备远程控制界面

四、实际使用案例
1、远控(投屏+触控)

2、网络抓包

3、获取Logcat日志和查看系统文件

4、性能监控

5、获取控件元素

6、UI自动化

上图中,可关联已有的自动化测试用例,并执行自动化测试(这里是单用例执行,多用例执行可前往下面 项目的【测试套件】中运行)
- 这里也可以新增测试用例

- 点击刚刚新增的用例,会自动关联该用例,并进入用例步骤界面,在此可添加该用例的执行步骤

五、app自动化测试用例的编写与执行
1、自动化测试用例的编写
1. 添加自动化用例
新增用例的入口有两个,一个是上面第6点【设备中心】的【UI自动化】中,选择关联项目后,会显示;另一个新增用例入口是下面的 项目中心 -> 【测试用例管理】 -> 【测试用例】中

用例命名规则为:模块_功能_用例名称;若是专属模块的用例,需要选择模块,便于后期按模块筛选用例

2. 进入设备中心,选择空闲设备,进入远程控制界面 -> 控件元素 中,获取当前用例所需要的定位元素

3. 若上面推荐的定位方法有合适的,则可以直接点击后面的手指,该定位方法和元素值即会自动填写到所弹出的控件元素信息框中,补充该元素的控件名称和所属模型(方便使用时查找)即可,点击测试,则会运行点击一下当前的控件元素

4. 上面点击保存,则该控件元素的定位信息会被保存到 项目中心 -> 测试数据管理 -> 控件元素 中

5. 点击前面新增用例的【步骤详情】

6. 在步骤详情界面,进行添加步骤操作

7. 选择该步骤要对控件元素所进行的操作

8. 选择要操作的控件元素

9. 选择该控件元素发生异常时,需要的处理操作

10. 此时用例步骤即可添加成功

2、用例断言
用例结果断言一般有文本断言、截图图像相似度匹配断言、控件元素断言、值比较断言、值包含断言等等

- 成功断言效果展示
- 控件元素文本断言成功

- 截图图像相似度匹配断言成功

- 失败断言效果展示
- 控件元素文本断言失败

- 截图图像相似度匹配断言失败

3、执行自动化测试
1. 运行单用例脚本(一般用于用例调试),在【设备中心】 -> 【UI自动化】中关联用例执行即可,运行结果只产生过程日志,不会生成测试报告。

2. 添加测试套件批量执行用例脚本(会生成相应的测试报告)
1. 添加测试套件,选择已有用例到当前测试套件中

2. 关联设备,选择当前测试套件的执行设备,可选择多台设备,当设备都是空闲状态时,会同时把当前测试套件分发到所选的多台设备中执行自动化测试

3. 新增的测试套件保存后,点击测试套件后面的运行按钮,即会执行当前的测试套件,自动化测试报告可在【测试结果分析】中查看

3. 设置定时任务执行用例脚本(会生成相应的测试报告),定时任务状态为启用时,会按照Cron表达式执行当前的测试套件,若点击立即运行,则会立即执行一次当前定时任务

六、查看测试报告
1、平台测试报告展示
- 点击查看报告,可查看前面已执行的自动化测试结果报告

- 报告详情展示如下

2、飞书机器人通知测试结果展示

七、技巧与进价
1、全局参数
测试用例中,需要共用到的数据,可以添加保存到全局参数中,后期通过{{参数名}}来引用

2、公共步骤
用例中需要经常执行的步骤,可以封装成公共步骤,后期可在用例中直接调用

3、自定义代码脚本
可以自定义代码脚本,然后将代码脚本插在用例的某个步骤中执行,也可在测试平台中单独执行

4、图像相似度定位
可以将屏幕截图或按钮截图作为自动化测试时,控件元素的定位方式


浙公网安备 33010602011771号