自动化平台接口
2018-09-27整理
返回值
Json消息格式:所有服务端返回的消息都使用如下格式的包装:
{
"status":0,
"message":"xxx"
}
status=0说明请求成功,message携带数据结果
status!=0说明失败,具体失败原因参见status数值。
status取值含义
0 成功 1 用户未登录 2 用户被禁用 3 没有权限访问 4 sessionId错误,可能是被伪造的,视同未登录,需要用户重新登录 5 用户信息不完全,需要补全信息 6 邀请码不存在 10 参数格式错误 11 用例重名 12 apk名称错误,用于上传apk时,appname和apk解析结果不一致时报错。 13 设备全部被占用 14 参数值错误19 操作过期 20 应用|用例解析错误 21 apk下载失败(用于通过网站下载方式上传apk时的下载失败) 22 apk大小超过限制 23 apk上传/下载操作过于频繁,1分钟内操作3次开始标记,2分钟内禁止该操作 24 限制一个用户在5分钟内最多发15个任务 25 获取应用失败 26 下载地址不正确 27 管理员已知晓,定位问题后第一时间回复哦。 28 webTask中选择的公有设备数超过该用户级别的限制数。目前所有用户的公有设备数限制为20。 29 该用户当天发送任务数超过每个账户每天发送任务数的限制。 30 这个webTask中用例数超过选择用例数的限制。 31 操作失败 32 用例组不存在 33 公共用例组中存在其他用户的重名用例组34 未测试通过的用例组不能移入公共用例池 35 当前用例组版本已经移入公共库 40 没有管理员权限 41 管理员单独密码输入错误 43 模拟用户功能只能在内网使用 44 请求资源不存在 45 apk的安全等级为危险 460 上传的文件不存在 461 解压后的文件夹不存在 462 用例文件无效 50 内部错误 60 数据库错误
接口
用例与lib库上传
POST /arcus/caseFile/uploadCaseAndLib
request
参数名
|
类型
|
必填/选填
|
|
---|---|---|---|
caseAndLibFile | MultipartFile | 必填 | 包含用例与lib库的zip包 |
response
成功
{
"message": {
"cases": [
{
"caseName": "test1_send_gossip_text",
"description": "",
"caseFileName": "maimai_gossip"
},
失败
{
"status" : 1 | 10 | 20 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
添加用例
POST /arcus/caseFile/add
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 必填 | |
appName | String | 必填 | |
uploadId | String | 必填 | /arcus/caseFile/uploadCaseAndLib接口的返回值 |
scriptType | String | 必填 | Python | Java |
cases | Array | 必填 | ["caseFileName1$$$caseNameA", "caseFileName2$$$caseNameB", ...] |
cover | String | 选填 | 目前为总是覆盖 |
response
成功
{
"status" : 0,
"message" : null
}
失败
{
"status" : 1 | 10 | 11 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
删除用例文件
POST /arcus/caseFile/delete
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
ids | Array | 必填 | 用例文件id数组 |
response
成功
{
"status" : 0,
"message" : null
}
失败
{
"status" : 1 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
用例列表
GET /arcus/caseFile/scriptList
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 选填 | 包名 |
appName | String | 选填 | 应用名 |
groupId | String | 选填 | 用例组ID |
response
成功
{
"message": [
{
"modifyTime": "2018-09-25 15:39:21",
"tested": false,
"appName": "脉脉",
"scriptType": "Python",
"groupId": "hello_world",
"name": "doing",
"platformType": "Android",
"description": null,
"id": "2510",
"packageName": "com.taou.maimai",
"caseFileName": "hello_world"
},
失败
{
"status" : 1 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
公共用例列表
GET /arcus/caseFile/publicScriptList
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 必填 | 包名 |
appName | String | 必填 | 应用名 |
groupId | String | 必填 | 用例组ID |
userNameMd5 | String | 必填 | 用户标识 |
response
成功
{
"message": [
{
"modifyTime": "2018-09-26 21:05:26",
"tested": false,
"appName": "脉脉",
"scriptType": "Python",
"groupId": "maimai_test_ok_b",
"name": "test2_send_emoji_message1",
"platformType": "Android",
"description": null,
"id": "2609",
"packageName": "com.taou.maimai",
"caseFileName": "maimai_test_ok_b"
},
失败
{
"status" : 1 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
用例组列表
GET /arcus/caseGroup/list
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 选填 | 包名 |
appName | String | 选填 | 应用名 |
showCaseNames | String | 选填 | 显示用例组下的用例字段 |
response
成功
{
"message": [
{
"personalManageStatus": "NO_PUBLIC",
"modifyTime": "2018-09-25 15:39:20",
"execStatus": "NOT_RUNNING",
"appName": "脉脉",
"scriptType": "Python",
"name": "maimai_gossip",
"platformType": "Android",
"publicGroup": false,
"moveInTime": "",
"id": "maimai_gossip",
"packageName": "com.taou.maimai",
"userNameMd5": "6f3f095f72f3b950"
},
失败
{
"status" : 1 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
删除用例组
POST /arcus/caseGroup/delete
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 必填 | 包名 |
appName | String | 必填 | 应用名 |
groupId | String | 必填 | 用例组ID |
response
成功
{
"status" : 0,
"message" : null
}
失败
{
"status" : 1 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
移入公共用例池
POST /arcus/caseGroup/moveInPublic
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 必填 | 包名 |
appName | String | 必填 | 应用名 |
groupId | String | 必填 | 用例组ID |
response
成功
{
"status" : 0,
"message" : null
}
失败
{
"status" : 1 | 33 | 34 | 35 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
从公共用例池回退
POST /arcus/caseGroup/returnFromPublic
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 必填 | 包名 |
appName | String | 必填 | 应用名 |
groupId | String | 必填 | 用例组ID |
returnReason | String | 选填 | 回退原因 |
response
成功
{
"status" : 0,
"message" : null
}
失败
{
"status" : 1 | 3 | 32 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
公共用例组列表
GET /arcus/caseGroup/publicList
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 选填 | 包名 |
appName | String | 选填 | 应用名 |
page | String | 选填 | 页数,默认为0 |
pz | String | 选填 | 每页显示记录数,默认为0,全部显示 |
orderBy | String | 选填 | 排序字段:appName、modifyTime、moveInTime等 |
reverse | String | 选填 | true | false,是否倒序 |
showCaseNames | String | 选填 | 显示用例组下的用例字段 |
response
成功
{
"message": {
"total": 1,
"page": 1,
"items": [
{
"execStatus": "SUCCESS",
"appName": "脉脉",
"platformType": "Android",
"userNameMd5": "4d167387b28d13b3",
"returnTime": "",
"testAppVersion": "4.23.22(1279)",
"modifyTime": "2018-09-18 20:58:51",
"publicManageStatus": "MOVE_IN",
"scriptType": "Python",
"name": "maimai_test_ok_b",
"publicGroup": true,
"testExecTime": "2018-09-25 15:38:19",
"id": "maimai_test_ok_b",
"packageName": "com.taou.maimai"
},
失败
{
"status" : 1 | 3 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
更新状态为稳定
POST /arcus/caseGroup/updatePublicCaseGroupToStable
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 必填 | 包名 |
appName | String | 必填 | 应用名 |
groupId | String | 必填 | 用例组ID |
response
成功
{
"status" : 0,
"message" : null
}
失败
{
"status" : 1 | 3 | 32 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
通过设备获取任务报告的用例组列表
GET /arcus/report/getScriptListWithGroupForDevice
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
wTaskId | String | 必填 | web任务ID |
model | String | 必填 | 设备型号 |
osVersion | String | 必填 | 系统版本 |
response
成功
{
"message": {
"scriptTaskList": {
"maimai_test_ok_a": [
{
"scriptId": "2567",
"name": "test2_send_emoji_message",
"status": "executefail",
"mTaskId": "5bab1e4f4b197704e7a1f9c5:1",
"bInstall": true,
"bLaunch": true,
"bScript": true,
"bUninstall": true,
"bFinish": true
},
失败
{
"status" : 1 | 3 | 10 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
获取任务报告中用例的详细信息
GET /arcus/report/getScriptDetail
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
mTaskId | String | 必填 | mobile任务ID |
scriptId | String | 必填 | 用例ID |
response
成功
{
"message": {
"bScript": false,
"bInstall": true,
"scriptLogUrl": "http://arcus.in.taou.com/arcus/mobileTaskResult/result/get/log?id003d5bab1e4f4b197704e7a1f9c5_1_2567.log",
"logcatUrl": "http://arcus.in.taou.com/arcus/mobileTaskResult/result/get/log?id003d5bab1e4f4b197704e7a1f9c5:1-logcat",
"taskLogUrl": "http://arcus.in.taou.com/arcus/mobileTaskResult/result/get/log?id003d5bab1e4f4b197704e7a1f9c5:1-tasklog",
"bFinish": true,
"bUninstall": true,
"mTaskType": "SCRIPT",
"scriptResults": [
{
"id": "2567",
"name": "test2_send_emoji_message",
"fileName": "maimai_test_ok_a",
"scriptLogKey": "http://arcus.in.taou.com/arcus/mobileTaskResult/result/get/log?id003d5bab1e4f4b197704e7a1f9c5_1_2567.log",
"execTime": 76437,
"result": false,
"screenshotMap": {
"5bab1e4f4b197704e7a1f9c5_1_2567_0": "5bab1e4f4b197704e7a1f9c5_1_2567_0.png"
},
"screenshots": {
"5bab1e4f4b197704e7a1f9c5_1_2567_0_png": "bb6df9a453c2d424aef7e9c80320e46c.png"
}
}
],
"deviceInfo": {
"storageFree": 0,
"memFree": 317,
"memTotal": 3590,
"cpuModel": "高通 MSM8953",
"ip": "10.9.0.48",
"cpuCoreCount": "八核",
"storageTotal": 0,
"resolution": "1080*1920",
"screenSize": "5.5",
"osVersion": "7.1.2",
"sdcardTotal": 0,
"sdcardFree": 0,
"model": "vivo X9",
"cpuFeq": "未知",
"sn": "c9ceda59",
"brand": "vivo"
},
"screenshots": [
{
"name": "5bab1e4f4b197704e7a1f9c5_1_2567_0_png",
"url": "bb6df9a453c2d424aef7e9c80320e46c.png"
}
],
"result": false,
"errorLogcatUrl": "",
"performance": {
"installTime": 15.54,
"firstLaunchTime": 2.72
},
"bLaunch": true,
"errors": []
},
"status": 0
}
失败
{
"status" : 1 | 10 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
公共用例回退历史列表
GET /arcus/history/returnFromPublicList
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 选填 | 包名 |
appName | String | 选填 | 应用名 |
page | String | 选填 | 页数,默认为0 |
pz | String | 选填 | 每页显示记录数,默认为0,全部显示 |
orderBy | String | 选填 | 排序字段:appName、groupId、recordTime等 |
reverse | String | 选填 | true | false,是否倒序 |
response
成功
{
"message": {
"total": 1,
"page": 1,
"items": [
{
"groupName": "maimai_test_ok_c",
"publisherOpUserName": "张辉",
"execStatus": "SUCCESS",
"recordTime": "2018-09-18 21:16:49",
"appName": "脉脉",
"returnReason": "",
"groupId": "maimai_test_ok_c",
"ownerUserName": "王欣",
"testExecTime": "2018-09-18 21:13:16",
"packageName": "com.taou.maimai",
"testAppVersion": "4.23.22(1279)"
}
]
},
"status": 0
}
失败
{
"status" : 1 | 3 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
公共用例报告列表
GET /arcus/task/publicScriptTaskList
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
packageName | String | 选填 | 包名 |
appName | String | 选填 | 应用名 |
page | String | 选填 | 页数,默认为0 |
pz | String | 选填 | 每页显示记录数,默认为0,全部显示 |
sort | String | 选填 | 排序字段:appName、modifyTime、moveInTime等 |
reverse | String | 选填 | true | false,是否倒序 |
keyword | String | 选填 | 应用名称|版本号(versionName或versionCode)进行搜索 |
filter | String | 选填 | all | done | waiting | pending | running | pause |
response
成功
{
"message": {
"total": 2,
"taskList": [
{
"appName": "脉脉",
"runPercent": 100,
"description": "1设备+1用例+性能+安全",
"useNewAlgorithm": true,
"versionName": "4.23.22",
"readReport": true,
"versionCode": "1279",
"throughputRate": 100,
"webTaskId": "5ba9e5b94b197704e7c4a94c",
"startTime": "2018-09-25 15:37:28",
"packageName": "com.taou.maimai",
"apkSize": "24.15",
"endTime": "2018-09-25 15:38:34",
"scriptAlwaysRun": "false",
"status": "DONE"
},
失败
{
"status" : 1 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}
任务派发
POST /arcus/task/dispatch
request
参数名
|
类型
|
必填/选填
|
描述
|
---|---|---|---|
data | String | 必填 | 序列化的DistributeWebTask类 |
DistributeWebTask类
public class DistributeWebTask {
private String userNameMd5; //用户名md5
private List<WebTaskType> type; //web任务类型
private String hasJava; //是否带有java脚本
private List<String> scriptType;
private String apkId; //APK的md5
/* 公有的型号过滤器列表
* String为”设备型号$$$OS版本“
*/
private List<String> publicMobileFilter;
private List<String> badPublicMobileFilter;
/* 私有的型号过滤器列表
* String为”用户名$$$设备型号$$$OS版本“
*/
private List<String> privateMobileFilter;
private List<String> mailList;
private String uiTravelUserName; //UI遍历自动填充用户名
private String uiTravelPassword; //UI遍历自动填充密码
private boolean uiTravelChecked; //用户是否选中使用登陆信息
private long uiTravelExecTime; //UI遍历执行时间,单位:秒
private int uiTravelExecSteps; //UI遍历执行步数,单位:步
private int uiTravelType = -1; //UI遍历类型
private int uiTravelSwipeType = -1; //欢迎界面滑动方式
private String rerunFrom; //说明任务是重测,从哪个项目开始重测的。(存的是需要重测的webTaskId)
private List<PluginItemPojo> plugins; //当用户在同一个webTask中勾选多个插件时,会有多个。每个元素都是pluginId 和 pluginArgs组成
private List<String> caseGroups; //用例组列表(item:caseGroupId$$$userNameMd5)
private boolean scriptOrderExec; //脚本是否顺序执行
private boolean scriptAlwaysRun; //脚本是否持续执行
private boolean publicScript; //公共用例任务
private boolean scriptNodejsRegression; //是否为用例nodejs回归
private int uiTravelDeep; //UI遍历的深度
}
response
成功
{
"status": 0,
"message":
{
"appName":"应用apk名称" ,
"packageName":"" ,
"versionName":"" ,
"versionCode":"",
"apkSize": 20.00,
"launcherActivity":"" ,
"mainActivity":"" ,
"iconUrl":"http://xxx",
"dispatchTime": "",
"scriptCount": 20,
"deviceCount": 20,
"bUITravel": true,
"estimateRunTime": "2-8小时",
"saveMoney": 75,
"filterMobiles" : [
{"brand": "华为",
"model": "H60-L102",
"osVersion" "android 4.1.4",
"resolution": "800*600",
},
失败
{
"status" : 1 | 10 | 13 | 50 ,
"message" : "XXXXXX", //错误原因,有可能为null
}