AutoSense实时Socket.IO协议
- AutoSense实时Socket.IO协议
- 规范
- * 消息协议
- 一、后端与客户端任务控制协议
- 二、WebSE+群控+远程控制与客户端协议
- 1、群控任务操作通知
- 2、待添加
- 3、客户端回图控制消息
- 4、设备物理键控制消息
- 5、设备屏幕操作控制消息
- 6、客户端回屏消息
- 7、客户端回屏图片回复消息
- 8、Shell命令执行消息
- 9、Shell命令结果回复消息
- 10、客户端屏幕截图消息
- 11、客户端屏幕截图回复消息
- 12、应用管理消息
- 13、客户端回复应用管理操作状态消息
- 14、文件下载消息
- 15、客户端回复下载文件地址
- 16、Shell命令停止消息
- 17、区域截图消息
- 18、区域截图客户端回复消息
- 19、SDK透传消息
- 20、SDK透传回复消息
- 21、SE透传消息
- 22、SE透传回复消息
- 23、本地设备列表获取消息
- 24、本地设备上下线更新通知消息
- 25、WebSE脚本调试通知消息
- 26、WebSE脚本调试回复消息
- 27、IOS输入文本框消息
- 28、IOS控件信息消息
- 29、IOS控件信息回复消息
- 30、WebSE脚本调试流程反馈
- 31、设备信息注册
- 32、IOS客户端MobSense录制状态消息
- 33、IOS客户端MobSense录制状态回复消息
- 34、IOS客户端MobSense日志回复消息
- 三、接口测试调试协议
- 四、WebUI自动化录制插件协议
- 五、应用性能测试协议
- 六、WebSE与Android Provider通信协议
AutoSense实时Socket.IO协议
规范
命名空间
客户端 | 命名空间 |
---|---|
手机客户端程序 | /agent |
Web后台管理平台 | /web |
远程控制与Web脚本工具客户端 | /remote |
接口测试Debug客户端(Mock客户端) | /mock |
Web自动化插件程序 | /webui |
Web版脚本录制工具 | /webse |
应用性能测试客户端 | /perf-agent |
应用性能测试Web端 | /perf-web |
Android Provider端 | /android-provider |
客户端定义
客户端 | 缩写 |
---|---|
手机客户端Agent | A |
网页客户端Web | W |
远程控制与Web脚本录制工具客户端Remote | R |
服务端Socket | S |
脚本录制工具ScriptEditor | SE |
Web脚本录制工具客户端LocalServer端 | LS |
接口测试的Debug客户端(Mock客户端) | M |
Web 自动化插件程序 | WUI |
Web版脚本录制工具 Web SE | WSE |
应用性能测试客户端 | PA |
应用性能测试Web端 | PW |
Android Provider端 | AP |
Socket.IO连接地址
生产环境:http://autosocket.uusense.com:9001/
测试环境:http://123.207.254.211:9004/
连接参数
参数名 | 描述 |
---|---|
serial | 设备的IMEI,保证与autosense注册接口字段DevId 使用同一个 |
连接示例:{Socket.IO连接}{命令空间}?serial=xxxxxxx
返回类型
Object对象
UTF-8编码
返回字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
message | String | 200 | success | 消息的描述 |
data | Object | - | 返回的数据。可能为空对象 |
返回示例
{
"message": "",
"data": {
"field1": "value1",
"field2": "value2"
}
}
更新日志
日期 | 更新人 | 更新内容 |
---|---|---|
2018-01-04 | 刘光彪 | 初版 |
2018-11-21 | 刘光彪 | 格式调整,去掉废弃的协议 |
2018-11-23 | 刘光彪 | 增加协议编号 |
2018-11-27 | 刘光彪 | 增加通用sdk消息协议、区域截图协议 |
2018-12-06 | 刘光彪 | 增加command命令消息的type 参数;去掉设备信息获取协议;增加R端与SE端通信协议 |
2019-03-04 | 刘光彪 | 调整NDK4方协议通信消息 |
2019-04-22 | 刘光彪 | 增加25 、26 脚本调试相关通信协议 |
2019-04-26 | 刘光彪 | 增加27 、28 、29 接口测试调试相关协议 |
2019-06-17 | 刘光彪 | 增加33 WebSE调试反馈协议,修改25 调试消息协议 |
2019-06-18 | 刘光彪 | 增加命名空间、完善接口测试相关协议 |
2019-06-19 | 刘光彪 | 接口调试日志消息字段修改 |
2019-06-24 | 余细红 | 增加34 补充设置注册信息 |
2019-07-24 | 余细红 | 增加 web 自动化测试接口初稿 |
2019-09-18 | 刘光彪 | 增加应用测试相关协议参数定义 |
2019-09-23 | 刘光彪 | 调整文档结构 |
2019-09-24 | 林海 | 添加IOS端的mobsense录制相关3个通道 |
2020-05-09 | 刘光彪 | 调整文档结构,增加任务停止通知协议 |
2020-05-22 | 刘光彪 | 增加二、1、群控任务操作通知 ,修改二、5、设备屏幕操作控制消息 增加screenshot 字段 |
* 消息协议
一、后端与客户端任务控制协议
1、脚本更新通知
消息方向
W -> S -> A
事件名称
W端发送:web.script.message
或 script
A端接收:agent.script.message
或 script
事件描述
后端有上传、编辑脚本时,将广播相关设备更新脚本,手机客户端软件收到该消息后通过HTTP接口获取新的脚本更新内容。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 20 | newscript | 消息类型,参见下一节《消息类型》 |
消息类型
type | 描述 |
---|---|
newscript | *有新脚本。 |
消息示例
{
"data": {
"type": "newscript"
}
}
2、任务获取通知
消息方向
W -> S -> A
事件名称
W端发送:web.task.message
或 task
A端接收:agent.task.message
或 task
事件描述
后端有新任务时通知客户端获取,客户端通过 HTTP 接口获取任务内容。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 20 | newtask | 消息类型,参见下一节《消息类型》 |
消息类型
type | 描述 |
---|---|
newtask | *有新任务。 |
消息示例
{
"data": {
"type": "newtask"
}
}
3、任务停止通知
消息方向
S -> A
事件名称
A端接收:agent.task.stop
事件描述
后端有任务暂停或取消操作时,socket会发送该消息,客户端收到该消息时判断一下是否是当前正在运行的任务,如果是即kill掉这个任务并调用客户端通过 HTTP 接口获取任务内容的逻辑以更新本地数据库任务状态,如果不是可以忽悠这条消息。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
taskId | Int | 10 | 123 | 任务Id |
消息示例
{
"data": {
"taskId": 123
}
}
二、WebSE+群控+远程控制与客户端协议
1、群控任务操作通知
消息方向
R -> S -> A
事件名称
R端发送:remote.groupcontrol.status
A端接收:agent.groupcontrol.status
事件描述
群控在选定设备后,点击开始测试任务按钮,后端向所有选定的设备发送任务开始的消息,客户端准备就绪等待群控操作;任务操作完成后,点击结束测试任务的按钮,后端身所有选定的设备发送任务结束的消息,客户端将测试的截图、日志等消息按指定格式打包成zip包供测试人员使用(结果包格式参考Mobsense结果包格式)。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 30 | start | 消息类型,参见下一节《消息类型》 |
消息类型
type | 描述 |
---|---|
startScreenshot | 开始测试任务 |
stop | 结束测试任务 |
消息示例
{
"type": "start"
}
2、待添加
3、客户端回图控制消息
消息方向
R -> S -> A
事件名称
R端发送:remote.screenshot
或 screenshot
A端接收:agent.screenshot
或 screenshot
事件描述
后端向客户端发送启动回图与关闭回图的命令,客户根据命令启动或关闭相应的回图进程。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 30 | startScreenshot | 消息类型,参见下一节《消息类型》 |
消息类型
type | 描述 |
---|---|
startScreenshot | 开始回图 |
stopScreenshot | 停止回图 |
消息示例
{
"data": {
"type": "startScreenshot"
}
}
4、设备物理键控制消息
消息方向
R -> S -> A
事件名称
R端发送:remote.device.control.keyboard
或 deviceControl
A端接收:agent.device.control.keyboard
或 deviceControl
事件描述
通过固定键值控制手机按键的消息。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
command | String | 50 | 30 | 按键消息值 |
消息类型
以下是command的可能值定义:
值 | 说明 |
---|---|
3 | Home键响应 |
4 | 返回键响应 |
82 | 菜单键响应 |
26 | 电源键 |
27 | 相机快捷键 |
24 | 音量+ |
25 | 音量- |
164 | 静音 |
消息示例
{
"command": "23"
}
5、设备屏幕操作控制消息
消息方向
R -> S -> A
事件名称
R端发送:remote.device.control.screenshot
或 deviceControlEvent
A端接收:agent.device.control.screenshot
或 deviceControlEvent
事件描述
后端将屏幕控制消息发送给客户端。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 10 | move | 操作类型,move up down |
x | Int | 10 | 234 | |
y | Int | 10 | 344 | |
screenshot | Int | 1 | 1 | 是否同步截图,1 =是,0 或无该节点为否。为1 时客户端实现按设备截图并保存本地功能(在执行控制操作前截图),暂时仅为iOS群控消息。 |
消息类型
以下是type的值定义:
值 | 说明 |
---|---|
down | 按下的操作 |
up | 松开的操作 |
move | 移动的操作 |
消息示例
{
"type": "dwon",
"x": 345,
"y": 456,
"screenshot": 0
}
6、客户端回屏消息
消息方向
R -> S -> A
事件名称
R端发送:remote.screenshot.message
或 screenCaptureEvent
A端接收:agent.screenshot.message
或 screenCaptureEvent
事件描述
R端向客户端发送需要回屏的消息通知,R 端通过轮询方式主动获取回屏数据,A 端为被动模式。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
quality | Int | 10 | 30 | 图像质量 |
width | Int | 10 | 340 | 图像宽度 |
height | Int | 10 | 605 | 图像高度 |
消息示例
{
"quality": 30,
"width": 340,
"height": 605
}
7、客户端回屏图片回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.screenshot.message
或 screenCaptureEvent
R端接收:remote.screenshot.message
或 screenCaptureEvent
事件描述
客户端截取全屏后将图片以buffer流方式回传给后端。客户端默认设置截屏尺寸为340x605
像素。
消息字段
无,图片的buffer流内容
消息示例
无
8、Shell命令执行消息
消息方向
R -> S -> A
事件名称
R端发送:remote.shell.command
或command
A端接收:agent.shell.command
或command
事件描述
后端向客户端发送shell命令,客户端收到后执行并将output内容回传给后端。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 | |
---|---|---|---|---|---|
command | String | 200 | ps aux\ | grep ‘autosense’ | shell命令 |
type | String | 命令类型,客户端需要回复这个类型 |
消息示例
{
command: "ps | grep 'autosense'",
type: 'command'
}
9、Shell命令结果回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.shell.command
或 command
R端接收:remote.shell.command
或 command
事件描述
后端向客户端发送shell命令,客户端收到后执行并将output内容回传给后端。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 | |
---|---|---|---|---|---|
command | String | 200 | ps aux\ | grep ‘autosense’ | 执行的shell命令 |
type | String | 命令类型,R端会下发下来,客户端与结果返回即可 | |||
output | Text | 输出的结果 |
消息示例
{
command: "ps | grep 'autosense'",
type: 'command',
output: 'xxxxx'
}
10、客户端屏幕截图消息
消息方向
R -> S -> A
事件名称
R端发送:remote.screen.capture
或 screenCapture
A端接收:agent.screen.capture
或 screenCapture
事件描述
后端向客户端发送截屏的消息。
消息字段
无
消息示例
无
11、客户端屏幕截图回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.screen.capture
或 screenCapture
R端接收:remote.screen.capture
或 screenCapture
事件描述
客户端截取全屏后将图片以buffer流方式回传给后端。尺寸为全屏图片,质量默认80,格式为JPG。
消息字段
无,图片的buffer流内容
消息示例
无
12、应用管理消息
消息方向
R -> S -> A
事件名称
R端发送:remote.app.manage
或 manageApp
A端接收:agent.app.manage
或 manageApp
事件描述
后端向客户端发送安装或卸载应用的命令,客户根据命令的URL地址开始下载APP并安装。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 | |
---|---|---|---|---|---|
params | String | 255 | 0\ | /app/xxx.apk | 此参数透传给脚本,参数间用竖线隔开,具体请看下一节消息类型 |
消息类型
以下是params的值定义:
值 | 说明 |
---|---|
第一个参数 | 0:安装,1:卸载 |
第二个参数 | 安装地址(/app/xxx.ap)/ 卸载的应用包名(com.tencent.android.qqdownloader) |
消息示例
{
"params": "1|com.tencent.android.qqdownloader"
}
13、客户端回复应用管理操作状态消息
消息方向
A -> S -> R
事件名称
A端发送:agent.app.manage.message
或 appStatus
R端接收:remote.app.manage.message
或 appStatus
事件描述
后端向客户端发送安装或者卸载命令,客户端收到后执行把相应的状态回传给后端。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
status | Int | 5 | 1 | 请看下一节消息类型 |
消息类型
以下是status的值定义:
值 | 说明 |
---|---|
0 | 下载中 |
1 | 下载失败 |
2 | 下载成功 |
3 | 安装中 |
4 | 安装失败 |
5 | 安装成功 |
6 | 其他错误 |
消息示例
{
status: "2"
}
14、文件下载消息
消息方向
R -> S -> A
事件名称
R端发送:remote.file.download
或 downloadFile
A端接收:agent.file.download
或 downloadFile
事件描述
后端发送downloadFile命令,客户端接收文件目录dir字段后,通过给定的HTTP协议将文件上传该文件给后端。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 20 | download | 消息类型,参见下一节《消息类型》 |
file | String | 255 | /data/test.txt | 要下载的文件 |
消息类型
type | 描述 |
---|---|
download | *有下载任务。 |
消息示例
{
"type": "download",
"file": "/data/test.txt"
}
15、客户端回复下载文件地址
消息方向
A -> S -> R
事件名称
A端发送:agent.file.download
或 downloadFile
R端接收:remote.file.download
或 downloadFile
事件描述
客户端在接收到downloadFile
消息时将文件打包上传至后端,通知后端并带上下载链接。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
status | Int | 1 | 0 | 消息类型,参见下一节《消息类型》 |
url | String | 255 | http://xxx.com/app/xxx.sh | 客户端上传的文件地址 |
消息类型
以下是status的值定义:
值 | 描述 |
---|---|
0 | 文件上传中 |
1 | 文件上传失败 |
2 | 文件上传成功 |
消息示例
{
status: 2
url: "/app/xxx.sh"
}
16、Shell命令停止消息
消息方向
R -> S -> A
事件名称
R端发送:remote.shell.stop
或 stopCommand
A端接收:agent.shell.stop
或 stopCommand
事件描述
后端向客户端发送停止shell命令,客户端收到后执行停止当前的所有命令。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
command | String | 10 | stop | 消息类型,参见下一节《消息类型》 |
消息类型
以下是status的值定义:
值 | 描述 |
---|---|
stop | 停止执行shell |
消息示例
{
command: 'stop'
}
17、区域截图消息
消息方向
R -> S -> A
事件名称
R端发送:remote.screen.capture.block
A端接收:agent.screen.capture.block
事件描述
R端在脚本录制过程中请求客户端截取某一区域图像的通知消息。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
x1 | Int | 10 | 200 | 左上角x坐标 |
y1 | Int | 10 | 200 | 左上角y坐标 |
x2 | Int | 10 | 500 | 右下角x坐标 |
y2 | Int | 10 | 500 | 右下角y坐标 |
消息示例
{
"x1": 200,
"y1": 200,
"x2": 500,
"y2": 500
}
18、区域截图客户端回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.screen.capture.block
R端接收:remote.screen.capture.block
事件描述
A客户端按要求截取高清区域图片后将图片的buffer流回传给S端,S端直接透传给R端。
消息字段
暂无,内容为图片的buffer二进制流。
消息示例
暂无
S端返回给R端字段
内容为图片的buffer二进制流。
19、SDK透传消息
消息方向
R -> S -> A
事件名称
R端发送:remote.sdk.message
A端接收:agent.sdk.message
事件描述
R端给A端发送需要调用SDK层数据的通知,A端将该条消息内容通过NDK与SDK层的socket转发给SDK层(NDK与SDK层的socket协议由双方另行约定)。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
data | String | 不定长 | 消息的内容,不定长字符串,NDK接收到后透传给SDK |
消息示例
{
"data": "{\"type\": \"getDisplay\", \"params\": \"\"}"
}
20、SDK透传回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.sdk.message
R端接收:remote.sdk.message
事件描述
A端在收到SDK层的回复消息时再将这个消息内容回复给R端。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
data | String | 消息内容 |
消息示例
{
"data": ""
}
21、SE透传消息
消息方向
R -> S -> A
事件名称
R端发送:remote.se.message
A端接收:agent.se.message
事件描述
R端给A端发送需要调用SE层数据的通知,A端将该条消息内容通过NDK与SE层的socket转发给SE层(NDK与SE层的socket协议由双方另行约定)。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
data | String | 不定长 | 消息内容,不定长字符串,NDK层收到后透传给SE |
消息示例
{
"data": "{\"type\": \"getDisplay\", \"params\": \"\"}"
}
22、SE透传回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.se.message
R端接收:remote.se.message
事件描述
A端在收到SE层的回复消息时再将这个消息内容回复给R端。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
data | String | 不定长 | 消息内容 |
消息示例
{
"data": "{\"width\": \"1080\", \"height\": \"1920\"}"
}
23、本地设备列表获取消息
消息方向
R -> LS -> R
事件名称
R端发送:remote.device.local
R端接收:remote.device.local.list
事件描述
A端在收到SE层的回复消息时再将这个消息内容回复给R端。
发送消息字段
暂无
回复消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
brand | String | 50 | HUAWEI | 设备品牌 |
model | String | 50 | 设备型号 | |
resolution | String | 50 | 分辨率,高x宽 | |
imei | String | IMEI号 |
回复消息示例
[{
"brand": "HUAWEI",
"model": "mate7",
"resolution": "1920x1080",
"imei": "d342o343932p0"
}]
24、本地设备上下线更新通知消息
消息方向
LS -> R
事件名称
LS端发送:remote.device.local.update
R端接收:remote.device.local.update
事件描述
LS端监听到有新设备联入或有设备离线时,会发布通知消息给R端,R端收到该消息后回复remote.device.local
消息给LS端可以获取设备列表信息(23章节)。
发送消息字段
暂无
回复消息字段
暂无
回复消息示例
暂无
25、WebSE脚本调试通知消息
消息方向
R -> S -> A
事件名称
R端发送:remote.debug.message
A端接收:agent.debug.message
事件描述
R 端将脚本打包成zip后,将调试脚本有存放在autosense平台指定目录,提供一个 URL 地址给A端下载脚本调试使用。A 端接收到调度消息后将地址里的zip脚本下载保存并执行将执行结果的消息返回(通过协议26
)给R端。
调试过程需要反馈流程信息,通过协议33
反馈,具体参见协议33
。
消息字段
字段名称 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
debugParams | String | 100 | 调试参数,由后端与脚本引擎约定,A端调试时传递给引擎 | |
scriptUrl | String | 250 | 调试脚本的下载地址,A端通过这个地址下载脚本发起调试 |
消息示例
{
"debugParams": "MI5X|1|1|1|INPHONE|auto|1|1",
"scriptUrl": "http://auto.uusense.com/data/script-debug/993derw034soer33.zip"
}
26、WebSE脚本调试回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.debug.message
R端接收:remote.debug.message
事件描述
A端将脚本调试结果打包成zip后以二进制流回传给R端。R 端在接收后解压、解析结果内容并显示在调试内容栏。
消息字段
结果zip包内容
消息示例
暂无
27、IOS输入文本框消息
消息方向
R -> S -> A
事件名称
R端发送:remote.ios.device.input.message
A端接收:agent.ios.device.input.message
事件描述
R端给A端发送输入文本控件消息,
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
content | String | 不定长 | 用户输入的消息内容,不定长字符串 |
消息示例
{
"content": "输入框要输入的内容"
}
28、IOS控件信息消息
消息方向
R -> S -> A
事件名称
R端发送:remote.ios.device.control.message
A端接收:agent.ios.device.control.message
事件描述
R端给A端发送获取控件详细信息的消息。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 50 | dump | 控件类型,以后可以扩充(详情下一节) |
消息类型
以下是type的可能值定义:
值 | 说明 |
---|---|
dump | 返回控件详细信息 |
消息示例
{
"type": "dump"
}
29、IOS控件信息回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.ios.device.control.message
R端接收:remote.ios.device.control.message
事件描述
A端在收到R端的获取控件消息后,以预先制定的json字符串(参考UUBootstrap协议说明.md 和 UUBootstrap协议dump数据详细说明.md)方式传递给R端。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 50 | dump | 返回的控件类型 |
data | String | 不定长 | 消息内容(预先制定的json格式) |
消息示例
{
"type":"dump",
"data": "{\"width\": \"1080\", \"height\": \"1920\"}"
}
30、WebSE脚本调试流程反馈
消息方向
A -> S -> R
事件名称
A端发送:agent.debug.status
R端接收:remote.debug.status
事件描述
调试过程中A端需向R端有状态反馈,方便R端展示状态给用户,提升用户体验。具体状态反馈点见下表。
反馈流程 | type |
描述 |
---|---|---|
接收调试信息 | 1 | A端接收到调试信息时立即向R端反馈 |
开始下载脚本 | 2 | A端开始下载脚本前向R端反馈 |
脚本下载成功 | 3 | A端完成脚本下载后反馈 |
脚本下载失败 | 4 | A端脚本下载失败后反馈,此时调试失败 |
开始调试脚本 | 5 | A端开始调试脚本前反馈 |
脚本调试完成 | 6 | A端完成脚本调试后反馈 |
打包结果信息 | 7 | A端开始打包结果信息时反馈 |
开始回复结果消息 | 8 | A端开始上向R端回复结果消息时反馈 |
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
type | Int | 10 | 是 | 1 | 消息类型,见上表事件描述 |
message | String | 250 | 否 | 消息内容,A端可根据情况自定义一些消息内容反馈给R端 |
消息示例
{
"type": 2,
"message": "start download script."
}
31、设备信息注册
消息方向
A -> S -> R
事件名称
A端发送:agent.device.register
R端接收:remote.device.register
事件描述
补全设备信息。
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
serial | String | 100 | 是 | xxxx | 设备imie号 |
name | String | 250 | 否 | SMG9008V | 设备名称 |
brand | String | 100 | 否 | 华为 | 品牌名称 |
model | String | 100 | 否 | SMG9008V | 设备型号 |
消息示例
{
"serial": "xxxx",
"name": 'SMG9008V',
"brand": 'huiwei',
"model": 'SMG9008V'
}
32、IOS客户端MobSense录制状态消息
消息方向
R -> S -> A
事件名称
R端发送:remote.ios.mobsense.record.message
A端接收:agent.ios.mobsense.record.message
事件描述
R端给A端发送mobsense录制状态的通知。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 20 | start | 消息类型,参见下一节《消息类型》 |
消息类型
type | 描述 |
---|---|
start | 开启mobsense录制模式。 |
stop | 停止mobsense录制模式。 |
stauts | 询问是否为mobsense录制模式。 |
消息示例
{
"type": "start"
}
33、IOS客户端MobSense录制状态回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.ios.mobsense.record.message
R端接收:remote.ios.mobsense.record.message
事件描述
A端在收到R端发来的消息时把处理的状态回复给R端。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
type | String | 20 | start | 消息类型,参见下一节《消息类型》 |
status | Int | 1 | 1 | 操作状态,请看下一节《操作状态》 |
消息类型
type | 描述 |
---|---|
start | 开启mobsense录制模式。 |
stop | 停止mobsense录制模式。 |
stauts | 询问是否为mobsense录制模式。 |
logStauts | 日志打包是否成功 |
操作状态
值 | 描述 |
---|---|
0 | 操作失败(或stauts类型非mobsense录制模式) |
1 | 操作成功(或stauts类型是mobsense录制模式) |
消息示例
{
"type": "start",
"status": 1
}
34、IOS客户端MobSense日志回复消息
消息方向
A -> S -> R
事件名称
A端发送:agent.ios.mobsense.log.message
R端接收:remote.ios.mobsense.log.message
事件描述
客户端收到录制完成后命令日志打包成zip以buffer流方式回传给后端。
消息字段
无,zip的buffer流内容
消息示例
无
三、接口测试调试协议
1、接口测试接口调试通知消息
消息方向
W -> S -> M
事件名称
W端发送:mock.request.runner
M端接收:mock.request.runner
事件描述
W端生成支持newman
的json格式的请求数据,发送给M端去执行。
消息字段
字段名称 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
serial | String | 32 | Web客户端序列号,用于区分不同web用户 | |
sessionId | String | 32 | 调试的sessionId,debug客户端需要记录,按些sessionId回复数据 | |
from | String | 20 | 调试来源,debug-api =接口编辑器,debug-box =用例调试 |
|
data.collection | Object | - | newman collection。json内容,参见https://github.com/postmanlabs/postman-collection-transformer/tree/develop/examples/v2.1.0 | |
data.reporters | String | - | json | newman报告输出类型 |
消息示例
{
"serial": "",
"sessionId": "57c2f20acd919c6a8cfa08e3e961314b",
"from": "debug-api",
"data": {
"collection": {},
"reporters": "json"
}
}
2、接口测试调试日志消息
消息方向
M -> S -> W
事件名称
M端发送:mock.response.log
W端接收:mock.response.log
事件描述
M端执行过程中回复执行过程日志消息给W端供了解调试过程,W端解析后显示给用户。
消息字段
字段名 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
serial | String | 100 | Web客户端序列号 | |
sessionId | String | 100 | sessionId | |
from | String | 20 | 调试来源,debug-api =接口编辑器,debug-box =用例调试 |
|
log.time | String | 30 | 时间,YYYY-MM-dd HH:ii:ss | |
log.level | String | 10 | INFO | 日志级别,INFO,ERROR,DEBUG |
log.message | String | 200 | 日志内容 |
消息示例
{
"serial": "",
"sessionId": "57c2f20acd919c6a8cfa08e3e961314b",
"from": "debug-api",
"log": {
"time": "2019-04-26 12:12:12",
"level": "INFO",
"message": "接收数据"
}
}
3、接口测试调试回复消息
消息方向
M -> S -> W
事件名称
M端发送:mock.response.message
W端接收:mock.response.message
事件描述
M端执行完成后将数据回复给W端,W端解析后显示给用户。
消息字段
字段名称 | 类型 | 长度 | 示例值 | 描述 |
---|---|---|---|---|
serial | String | 100 | 设备序列号 | |
sessionId | String | 100 | sessionId | |
from | from | 20 | 调试来源,debug-api =接口编辑器,debug-box =用例调试 |
|
response | Object | json格式的报告,参见https://github.com/postmanlabs/newman#json-reporter |
消息示例
{
"serial": "",
"sessionId": "",
"from": "debug-api",
"response": {}
}
四、WebUI自动化录制插件协议
1、web插件状态上报
消息方向
WUI -> S -> W
事件名称
WUI端发送:webui.record.status
W端接收:web.record.status
事件描述
上报插件开启状态
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
isOnline | Number | 1 | 是 | 1 | 1:在线 0:离线 |
消息示例
{
"isOnline": 1
}
2、web插件录制脚本指令
消息方向
WSE -> S -> WUI
事件名称
WSE端发送:webse.record.action
WUI端接收:webui.record.action
事件描述
web插件录制脚本动作
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
action | String | 20 | 是 | start | start:开启 stop:停止 playback:回放 |
消息示例
{
"action": "start"
}
3、web插件录制脚本消息
消息方向
WUI -> S -> WSE
事件名称
WUI端发送:webui.record.message
WSE端接收:webse.record.message
事件描述
web插件录制脚本消息指令
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
command | String | 200 | 是 | click | 每条脚本的消息 |
消息示例
{
"command": "click:XXXX"
}
五、应用性能测试协议
1、扫码解析协议
协议说明
PA客户端通过扫码获取任务的serial
序列号、socket连接信息、任务的原有设备与被测应用信息。获取成功后根据socket参数连接socket-server,根据设备信息判断之前是不是本设备所测试的数据,根据被测应用自动启动被测信息开始测试。
扫码结果
http://auto.uusense.com/home/download/perf?id=eyJzZXJpYWwiOiI1ZDhjNjc0MTY3MGI4Iiwic29ja2V0VXJsIjoiaHR0cDpcL1wvMTI3LjAuMC4xOjkwMDEiLCJuYW1lc3BhY2UiOiJcL3BlcmYtYWdlbnQiLCJwYWNrYWdlTmFtZSI6IiIsImRldmljZVNlcmlhbCI6IiJ9
客户端解析这个结果获取URL中的id参数的值,并通过base64decode解析等到一个json字符串
扫码结果json字符串参数
参数名称 | 示例 | 说明 |
---|---|---|
serial | 5d8c6741670b8 | 客户端与socket-srver、Web界面通讯的认证码,连接socket时需要将其作为连接参数 |
socketUrl | 客户端连接后台socket-server的地址 | |
namespace | /perf-agent | 客户端连接socket-server需要使用的NameSpace |
packageName | 如果是二次扫码对原任务进行继续性能测试的话,刷新后的二维码会带有被测应用的包名,客户端根据这个包名自动启动被测应用,无需要再次进入选应用流程。默认为空 | |
deviceSerial | 如果是二次扫码时,二维码会带有之前的设备的序列号信息,客户端需要与本机的序列号进行一次对比,如果不相等需要有一个提示是否继续,否时退出测试流程。 |
2、设备信息上报消息
消息方向
PA -> S -> PW
事件名称
PA端发送:perf.agent.device
PW端接收:perf.web.device
事件描述
PA端将设备信息上报给PW端,PW端显示。
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
brand | String | 50 | 是 | oppo | 设备品牌 |
model | String | 50 | 是 | v21 | 设备型号 |
serial | String | 50 | 是 | 同autosense客户端获取方法,取WiFi MAC地址去冒号后转大写,如果没有开WiFi提示要打开WiFi,建议同autosense获取逻辑。 | |
androidVersion | String | 50 | 是 | V9.0 | Android系统版本号,格式:V9.0.0 |
roomVersion | String | 50 | 否 | MIUI V10.0 | ROOM名称与版本号 |
resolution | String | 20 | 否 | 1920x1080 | 分辨率,{H}x{W},宽x高 |
memorySize | Int | 20 | 是 | 3096120 | 内存总量,单位Byte |
cpuInfo | String | 100 | 是 | CPU名称、型号、核心数、频率组成 | |
network | String | 20 | 是 | 5G | 当前网络类型,2G/3G/4G/5G/WiFi |
batterySize | Int | 20 | 否 | 电池总容量,mAh | |
batteryRate | Float | 20 | 否 | 20.34 | 电池电量百分比,% |
isCharge | Int | 1 | 否 | 1 | 是否在充电,1=是,0=否 |
消息示例
{
"data": {
"brand": "oppo",
"model": "v21",
"serial": "D4E8FE87A8",
"androidVersion": "V9.0.0",
"roomVersion": "MIUI V10.0",
"resolution": "1920x1080",
"memoryTotal": 3096000,
"cpuInfo": "ARMv7 Processor rev 0 (v7l),4,1.8MHZ",
"network": "5G",
"batteryTotal": 3600,
"batteryRate": 45.34,
"isCharge": 0
}
}
3、应用信息上报消息
消息方向
PA->S->PW
事件名称
PA端发送:perf.agent.appinfo
PW端接收:perf.web.appinfo
事件描述
PA客户端在用户选择了被测应用后时,将应用的基本信息上报给后端,后端实时存储显示。
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
name | String | 200 | 是 | 测网速 | 应用名称 |
packageName | String | 100 | 是 | com.uusense.speed | 应用包名 |
code | int | 10 | 是 | 应用版本code | |
version | String | 20 | 是 | 4.5.2 | 应用版本号码 |
logo | String | 是 | LOGO文件的base64字符串 |
消息示例
{
"data": {
"name": "测网速",
"packageName": "com.uusense.speed",
"code": 123,
"version": "4.5.6",
"logo": "xxxxx"
}
}
4、应用LOGO上报消息(暂不用)
消息方向
PA->S->PW
事件名称
PA端发送:perf.agent.applogo
PW端接收:perf.web.applogo
事件描述
PA客户端在用户选择了被测应用后时,将应用的基本信息上报给后端后,接着上报应用LOGO数据给后端。LOGO以二进制buffer流格式作为socket的消息体上报。
消息字段
暂无
消息示例
暂无
5、应用性能数据上报消息
消息方向
PA->S->PW
事件名称
PA端发送:perf.agent.perfinfo
PW端接收:perf.web.perfinfo
事件描述
客户端回传性能数据
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
pid | String | 10 | 是 | 123213 | 被测应用进程PID |
time | String | 20 | 是 | 客户端时间,格式:YYYY-MM-DD HH:ii:ss | |
cpuApp | String | 10 | 是 | 1.23 | APP消耗CPU |
cpuTotal | String | 10 | 是 | 90.00 | 全局消耗CPU |
参考:
性能工具数据格式
参数 | 类型 | 示例值(单位) | 描述 |
---|---|---|---|
cpu_total | float | 21.11(%) | 全局CPU使用占比,异常时值为-1 |
cpu_app | float | 10.11(%) | 目标应用CPU使用占比,异常时值为-1 |
memory_use | long | 1935(MB) | 系统可用内存大小 |
memory_total | long | 3783(MB) | 系统总内存大小 |
memory_pss | float | 135.72(MB) | 实际使用的物理内存(比例分配共享库占用的内存) |
memory_privateDirty | float | 100.72(MB) | 应用进程独占内存 |
net_current_rx_size | float | 10.11(KB) | 应用当前接收数据大小 |
net_total_rx_size | float | 11022.21(KB) | 应用接收数据总大小(累计值) |
net_current_tx_size | float | 30.15(KB) | 应用当前发送数据大小 |
net_total_tx_size | float | 1234.17(KB) | 应用发送数据总大小(累计值) |
battery_momentary_current | float | -100.1(mA) | 电池瞬时电流大小,保留小数点后一位 |
fps | int | 60 | 帧率 |
fps_junk_count | int | 0 | 延迟数 |
fps_junk_max | int | 15(ms) | 最长延迟 |
fps_junk_percent | float | 1.11(%) | 延迟占比,默认值为0.00% |
response_time | long | 0(ms) | 响应耗时 |
refresh_time | long | 0(ms) | 刷新耗时 |
average_time_one | float | 36.34(%) | 过去1分钟的系统平均负载情况 |
average_time_five | float | 35.68(%) | 过去5分钟的系统平均负载情况 |
average_time_fifteen | float | 37.81(%) | 过去15分钟的系统平均负载情况 |
cpu_temperature | float | 40.1(°C) | CPU温度 |
battery_temperature | float | 30.2(°C) | 电池温度 |
消息示例
因数据量较大,为节省传输引起的消耗,
{
"data": "12321|2019-09-24 13:00:34|3.45|34.45|"
}
6、任务停止消息
消息方向
PA->S->PW 或 PW->S->PA
事件名称
PA端发送与接收:perf.agent.stop
PW端接收与发送:perf.web.stop
事件描述
PerfSense Agent客户端监听socket服务端发送的perf.agent.stop
消息,收到该消息时,退出性能采集程序,关闭浮窗,PerfSense断开socket连接、回到主界面并回到前台。
PerfSense浮窗上的停止按钮点击后,发送perf.agent.stop
消息给socket服务端,并退出性能采集程序,关闭浮窗,PerfSense断开socket连接、回到主界面并回到前台。
后台收到perf.web.stop
消息时停止存储数据,改变任务状态,实时图表复位。
消息字段
空,这个消息的内容为空
消息示例
暂无
六、WebSE与Android Provider通信协议
1、Android Provider上报设备信息
消息方向
AP->S
事件名称
AP端发送:android.provider.device
事件描述
Android Provider在有设备接入、服务重启、与后台socket.io重连时将已接入的设备数据发送给S端,S端存储与维护设备与Android Provider的关联数据。
消息字段
数组形式支持多设备数据同时发送。
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
serial | String | 30 | 是 | 设备的序列号,按autosense取序列号的方法:WiFi Mac地址去冒号转大写。 | |
消息示例
{
"data": [
{
serial: "AGERD34DFDE4"
},
{
serial: "DFER343FDFER"
}
]
}
2、Android Provider回复设备可连接消息
消息方向
AP->S->R
事件名称
AP端发送:android.provider.connect
R端接收:remote.android.provider.connect
事件描述
Android Provider收到S端的android.provider.connect
连接请求消息后,根据消息内容启动相应设备的服务并将相关信息回复给R端。
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
serial | String | 30 | 是 | 设备的序列号,按autosense取序列号的方法:WiFi Mac地址去冒号转大写。 | |
resolution | String | 20 | 是 | 1920x1080 | 设备的实际分辨率,高x宽 |
webSocketUrl | String | 30 | 是 | ws://x.x.x.x:24090/ | 启动成功atx-server后的socket地址。R端在后面带上minicap可连接,为websocket,不是socket.io。 |
消息示例
{
"data": {
"serial": "DEFDEDE87FE",
"resolution": "1920x1080",
"webSocketUrl": "ws://x.x.x.x:24090/"
}
}
3、WebSE端发送检查设备是否在Android Provider环境的消息
消息方向
R->S->AP
事件名称
R端发送:remote.android.provider.check
AP端接收:android.provider.connect
事件描述
WebSE在设备连接时发送消息给S端去检查当前设备是否在Android Provider列表,如果在,S端发送连接消息给对应的Android Provider。
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
serial | String | 30 | 是 | 设备的序列号 |
消息示例
{
"data": {
"serial": "DFEEF87FDE3"
}
}
4、Android Provider关闭服务消息
消息方向
S->AP
事件名称
AP端接收:android.provider.disconnect
事件描述
S端检测到R端设备断连后,如果当前设备在android provider列表,发送停止服务消息给Android Provider。
消息字段
字段名称 | 类型 | 长度 | 是否必须 | 示例值 | 描述 |
---|---|---|---|---|---|
serial | String | 30 | 是 | 设备的序列号 |
消息示例
{
"data": {
"serial": "DFEEF87FDE3"
}
}