@testin-official/xagent 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/README.md +157 -0
  2. package/dist/action/client.d.ts +13 -0
  3. package/dist/action/client.d.ts.map +1 -0
  4. package/dist/action/client.js +28 -0
  5. package/dist/action/client.js.map +1 -0
  6. package/dist/action/mcp-content.d.ts +2 -0
  7. package/dist/action/mcp-content.d.ts.map +1 -0
  8. package/dist/action/mcp-content.js +116 -0
  9. package/dist/action/mcp-content.js.map +1 -0
  10. package/dist/action/protocol.d.ts +36 -0
  11. package/dist/action/protocol.d.ts.map +1 -0
  12. package/dist/action/protocol.js +29 -0
  13. package/dist/action/protocol.js.map +1 -0
  14. package/dist/assets/contracts/app-list.schema.json +31 -0
  15. package/dist/assets/contracts/app-upload.schema.json +45 -0
  16. package/dist/assets/contracts/app.schema.json +18 -0
  17. package/dist/assets/contracts/authoring-attempt-create.schema.json +12 -0
  18. package/dist/assets/contracts/authoring-attempt.schema.json +56 -0
  19. package/dist/assets/contracts/authoring-complete.schema.json +13 -0
  20. package/dist/assets/contracts/authoring-draft-attempt-create.schema.json +12 -0
  21. package/dist/assets/contracts/authoring-observation.schema.json +28 -0
  22. package/dist/assets/contracts/authoring-revision-create.schema.json +13 -0
  23. package/dist/assets/contracts/authoring-revision.schema.json +19 -0
  24. package/dist/assets/contracts/authoring-session-create.schema.json +11 -0
  25. package/dist/assets/contracts/authoring-session.schema.json +54 -0
  26. package/dist/assets/contracts/canonical-script.schema.json +219 -0
  27. package/dist/assets/contracts/compat-script.schema.json +380 -0
  28. package/dist/assets/contracts/device-list.schema.json +19 -0
  29. package/dist/assets/contracts/error.schema.json +47 -0
  30. package/dist/assets/contracts/execution-target.schema.json +55 -0
  31. package/dist/assets/contracts/fixtures/authoring-attempt-create.valid.json +4 -0
  32. package/dist/assets/contracts/fixtures/authoring-attempt.passed.json +16 -0
  33. package/dist/assets/contracts/fixtures/authoring-draft-attempt-create.valid.json +10 -0
  34. package/dist/assets/contracts/fixtures/authoring-observation.valid.json +7 -0
  35. package/dist/assets/contracts/fixtures/authoring-revision.valid.json +16 -0
  36. package/dist/assets/contracts/fixtures/authoring-session.active.json +12 -0
  37. package/dist/assets/contracts/fixtures/canonical-script.valid.json +17 -0
  38. package/dist/assets/contracts/fixtures/ci-exit-status-cases.json +44 -0
  39. package/dist/assets/contracts/fixtures/command-mutual-exclusion-cases.json +20 -0
  40. package/dist/assets/contracts/fixtures/compat-script.all-platform-actions.yaml +227 -0
  41. package/dist/assets/contracts/fixtures/execution-target.both.invalid.json +7 -0
  42. package/dist/assets/contracts/fixtures/execution-target.concurrency-two.invalid.json +4 -0
  43. package/dist/assets/contracts/fixtures/execution-target.count-two.invalid.json +6 -0
  44. package/dist/assets/contracts/fixtures/execution-target.dynamic.valid.json +12 -0
  45. package/dist/assets/contracts/fixtures/execution-target.fixed.valid.json +4 -0
  46. package/dist/assets/contracts/fixtures/execution-target.multiple-devices.invalid.json +4 -0
  47. package/dist/assets/contracts/fixtures/execution-target.multiple-filters.invalid.json +7 -0
  48. package/dist/assets/contracts/fixtures/execution-target.strategy-all.invalid.json +6 -0
  49. package/dist/assets/contracts/fixtures/idempotency.conflict.json +26 -0
  50. package/dist/assets/contracts/fixtures/idempotency.same-request.json +26 -0
  51. package/dist/assets/contracts/fixtures/principal.personal.json +23 -0
  52. package/dist/assets/contracts/fixtures/principal.project-ci.json +20 -0
  53. package/dist/assets/contracts/fixtures/project-config.no-default.valid.json +9 -0
  54. package/dist/assets/contracts/fixtures/project-config.secret.invalid.json +10 -0
  55. package/dist/assets/contracts/fixtures/project-config.target-name.invalid.json +10 -0
  56. package/dist/assets/contracts/fixtures/project-config.valid.json +22 -0
  57. package/dist/assets/contracts/fixtures/public-script.all-cli-actions.yaml +39 -0
  58. package/dist/assets/contracts/fixtures/public-script.invalid.json +8 -0
  59. package/dist/assets/contracts/fixtures/public-script.valid.json +17 -0
  60. package/dist/assets/contracts/fixtures/run-create-v2.device-id.invalid.json +16 -0
  61. package/dist/assets/contracts/fixtures/run-create.personal-upload.valid.json +20 -0
  62. package/dist/assets/contracts/fixtures/run-create.single-device.json +19 -0
  63. package/dist/assets/contracts/fixtures/run-create.target.valid.json +22 -0
  64. package/dist/assets/contracts/fixtures/run.queued.json +19 -0
  65. package/dist/assets/contracts/fixtures/run.target.queued.json +38 -0
  66. package/dist/assets/contracts/fixtures/skill-catalog.valid.json +19 -0
  67. package/dist/assets/contracts/fixtures/skill-reference.valid.json +9 -0
  68. package/dist/assets/contracts/fixtures/skill.valid.json +10 -0
  69. package/dist/assets/contracts/fixtures/target-hash-cases.json +30 -0
  70. package/dist/assets/contracts/fixtures/target-preview.hash-mismatch.error.json +8 -0
  71. package/dist/assets/contracts/fixtures/target-preview.no-match.error.json +9 -0
  72. package/dist/assets/contracts/fixtures/target-preview.request.valid.json +9 -0
  73. package/dist/assets/contracts/fixtures/target-preview.success.json +18 -0
  74. package/dist/assets/contracts/fixtures/target-preview.unavailable.json +18 -0
  75. package/dist/assets/contracts/principal.schema.json +72 -0
  76. package/dist/assets/contracts/project-config.schema.json +23 -0
  77. package/dist/assets/contracts/public-script.schema.json +397 -0
  78. package/dist/assets/contracts/run-create-v2.schema.json +78 -0
  79. package/dist/assets/contracts/run-create.schema.json +70 -0
  80. package/dist/assets/contracts/run.schema.json +137 -0
  81. package/dist/assets/contracts/skill-catalog.schema.json +15 -0
  82. package/dist/assets/contracts/skill-reference.schema.json +17 -0
  83. package/dist/assets/contracts/skill-summary.schema.json +28 -0
  84. package/dist/assets/contracts/skill.schema.json +30 -0
  85. package/dist/assets/contracts/target-preview.schema.json +75 -0
  86. package/dist/assets/integrations/manifest.json +17 -0
  87. package/dist/assets/integrations/xagent-skill/SKILL.md +28 -0
  88. package/dist/assets/integrations/xagent-skill/agents/openai.yaml +4 -0
  89. package/dist/assets/integrations/xagent-skill/references/cli-mcp-interop.md +10 -0
  90. package/dist/assets/integrations/xagent-skill/references/host-adapters.md +9 -0
  91. package/dist/assets/integrations/xagent-skill/references/installation.md +10 -0
  92. package/dist/assets/integrations/xagent-skill/references/privacy.md +3 -0
  93. package/dist/assets/integrations/xagent-skill/references/routing.md +32 -0
  94. package/dist/assets/integrations/xagent-skill/scripts/install-cli.ps1 +5 -0
  95. package/dist/assets/integrations/xagent-skill/scripts/install-cli.sh +6 -0
  96. package/dist/assets/skills/xagent-analyze-failure/SKILL.md +13 -0
  97. package/dist/assets/skills/xagent-analyze-failure/agents/openai.yaml +4 -0
  98. package/dist/assets/skills/xagent-analyze-failure/references/failure-classification.md +20 -0
  99. package/dist/assets/skills/xagent-author-test/SKILL.md +19 -0
  100. package/dist/assets/skills/xagent-author-test/agents/openai.yaml +4 -0
  101. package/dist/assets/skills/xagent-author-test/references/authoring-workflow.md +41 -0
  102. package/dist/assets/skills/xagent-author-test/references/host-interaction-adapters.md +81 -0
  103. package/dist/assets/skills/xagent-author-test/references/interaction-modes.md +97 -0
  104. package/dist/assets/skills/xagent-author-test/references/interactive-steering.md +57 -0
  105. package/dist/assets/skills/xagent-author-test/references/script-actions.md +34 -0
  106. package/dist/assets/skills/xagent-author-test/references/script-format.md +100 -0
  107. package/dist/assets/skills/xagent-cli/SKILL.md +31 -0
  108. package/dist/assets/skills/xagent-cli/agents/openai.yaml +4 -0
  109. package/dist/assets/skills/xagent-cli/references/capability-routing.md +36 -0
  110. package/dist/assets/skills/xagent-cli/references/cli-commands.md +23 -0
  111. package/dist/assets/skills/xagent-cli/references/failure-routing.md +18 -0
  112. package/dist/assets/skills/xagent-cli/references/host-modes.md +21 -0
  113. package/dist/assets/skills/xagent-cli/references/mcp-tools.md +26 -0
  114. package/dist/assets/skills/xagent-cli/references/permissions.md +17 -0
  115. package/dist/assets/skills/xagent-explore-device/SKILL.md +26 -0
  116. package/dist/assets/skills/xagent-explore-device/agents/openai.yaml +4 -0
  117. package/dist/assets/skills/xagent-explore-device/references/actions.md +24 -0
  118. package/dist/assets/skills/xagent-explore-device/references/single-action-protocol.md +59 -0
  119. package/dist/assets/skills/xagent-explore-device/references/tool-adapters.md +32 -0
  120. package/dist/assets/skills/xagent-repair-test/SKILL.md +16 -0
  121. package/dist/assets/skills/xagent-repair-test/agents/openai.yaml +4 -0
  122. package/dist/assets/skills/xagent-repair-test/references/repair-workflow.md +21 -0
  123. package/dist/assets/skills/xagent-run-test/SKILL.md +16 -0
  124. package/dist/assets/skills/xagent-run-test/agents/openai.yaml +4 -0
  125. package/dist/assets/skills/xagent-run-test/references/execution-modes.md +23 -0
  126. package/dist/assets/skills/xagent-run-test/references/result-status.md +13 -0
  127. package/dist/assets/skills/xagent-test-report/SKILL.md +20 -0
  128. package/dist/assets/skills/xagent-test-report/agents/openai.yaml +4 -0
  129. package/dist/assets/skills/xagent-test-report/references/evidence-policy.md +20 -0
  130. package/dist/assets/skills/xagent-test-report/references/report-template.md +41 -0
  131. package/dist/assets/skills/xagent-test-report/references/result-classification.md +13 -0
  132. package/dist/authoring/draft-store.d.ts +19 -0
  133. package/dist/authoring/draft-store.d.ts.map +1 -0
  134. package/dist/authoring/draft-store.js +104 -0
  135. package/dist/authoring/draft-store.js.map +1 -0
  136. package/dist/authoring/session-lease.d.ts +64 -0
  137. package/dist/authoring/session-lease.d.ts.map +1 -0
  138. package/dist/authoring/session-lease.js +190 -0
  139. package/dist/authoring/session-lease.js.map +1 -0
  140. package/dist/cli.d.ts +3 -0
  141. package/dist/cli.d.ts.map +1 -0
  142. package/dist/cli.js +529 -0
  143. package/dist/cli.js.map +1 -0
  144. package/dist/config/credentials.d.ts +16 -0
  145. package/dist/config/credentials.d.ts.map +1 -0
  146. package/dist/config/credentials.js +93 -0
  147. package/dist/config/credentials.js.map +1 -0
  148. package/dist/config/store.d.ts +37 -0
  149. package/dist/config/store.d.ts.map +1 -0
  150. package/dist/config/store.js +142 -0
  151. package/dist/config/store.js.map +1 -0
  152. package/dist/core/assets.d.ts +5 -0
  153. package/dist/core/assets.d.ts.map +1 -0
  154. package/dist/core/assets.js +46 -0
  155. package/dist/core/assets.js.map +1 -0
  156. package/dist/core/errors.d.ts +19 -0
  157. package/dist/core/errors.d.ts.map +1 -0
  158. package/dist/core/errors.js +36 -0
  159. package/dist/core/errors.js.map +1 -0
  160. package/dist/core/interrupt.d.ts +8 -0
  161. package/dist/core/interrupt.d.ts.map +1 -0
  162. package/dist/core/interrupt.js +54 -0
  163. package/dist/core/interrupt.js.map +1 -0
  164. package/dist/core/json.d.ts +5 -0
  165. package/dist/core/json.d.ts.map +1 -0
  166. package/dist/core/json.js +21 -0
  167. package/dist/core/json.js.map +1 -0
  168. package/dist/core/version.d.ts +8 -0
  169. package/dist/core/version.d.ts.map +1 -0
  170. package/dist/core/version.js +8 -0
  171. package/dist/core/version.js.map +1 -0
  172. package/dist/integrations/manager.d.ts +12 -0
  173. package/dist/integrations/manager.d.ts.map +1 -0
  174. package/dist/integrations/manager.js +218 -0
  175. package/dist/integrations/manager.js.map +1 -0
  176. package/dist/integrations/routing.d.ts +105 -0
  177. package/dist/integrations/routing.d.ts.map +1 -0
  178. package/dist/integrations/routing.js +85 -0
  179. package/dist/integrations/routing.js.map +1 -0
  180. package/dist/mcp/server.d.ts +4 -0
  181. package/dist/mcp/server.d.ts.map +1 -0
  182. package/dist/mcp/server.js +69 -0
  183. package/dist/mcp/server.js.map +1 -0
  184. package/dist/mcp/tools.d.ts +30 -0
  185. package/dist/mcp/tools.d.ts.map +1 -0
  186. package/dist/mcp/tools.js +345 -0
  187. package/dist/mcp/tools.js.map +1 -0
  188. package/dist/project/config.d.ts +15 -0
  189. package/dist/project/config.d.ts.map +1 -0
  190. package/dist/project/config.js +46 -0
  191. package/dist/project/config.js.map +1 -0
  192. package/dist/run/progress.d.ts +5 -0
  193. package/dist/run/progress.d.ts.map +1 -0
  194. package/dist/run/progress.js +29 -0
  195. package/dist/run/progress.js.map +1 -0
  196. package/dist/script/service.d.ts +42 -0
  197. package/dist/script/service.d.ts.map +1 -0
  198. package/dist/script/service.js +457 -0
  199. package/dist/script/service.js.map +1 -0
  200. package/dist/sdk/authoring.d.ts +19 -0
  201. package/dist/sdk/authoring.d.ts.map +1 -0
  202. package/dist/sdk/authoring.js +43 -0
  203. package/dist/sdk/authoring.js.map +1 -0
  204. package/dist/sdk/client.d.ts +49 -0
  205. package/dist/sdk/client.d.ts.map +1 -0
  206. package/dist/sdk/client.js +241 -0
  207. package/dist/sdk/client.js.map +1 -0
  208. package/dist/skills/catalog.d.ts +7 -0
  209. package/dist/skills/catalog.d.ts.map +1 -0
  210. package/dist/skills/catalog.js +59 -0
  211. package/dist/skills/catalog.js.map +1 -0
  212. package/package.json +45 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "cases": [
3
+ {
4
+ "name": "personal_token_with_target",
5
+ "command": "run",
6
+ "token_type": "personal",
7
+ "arguments": {"target": "smoke"},
8
+ "valid": false,
9
+ "error": "token_type_mismatch"
10
+ },
11
+ {
12
+ "name": "project_ci_token_with_device_id",
13
+ "command": "run",
14
+ "token_type": "project_ci",
15
+ "arguments": {"device_id": "DEVICE_001"},
16
+ "valid": false,
17
+ "error": "token_type_mismatch"
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,227 @@
1
+ schema_version: xagent-compat-script/v1
2
+ name: 平台全部动作交换测试
3
+ description: 覆盖平台编辑器全部可执行动作和编辑态字段
4
+ metadata:
5
+ appid: 7001
6
+ dir_id: 23
7
+ ostype: 1
8
+ script_type: 1
9
+ tags: all-actions
10
+ record_type: 0
11
+ update_desc: 全动作往返
12
+ package_id: 7001
13
+ runtime_version: 3
14
+ content_fields:
15
+ source_mode: platform-editor
16
+ variables:
17
+ - key: username
18
+ type: string
19
+ defaultValue: demo-user
20
+ - key: retries
21
+ type: number
22
+ defaultValue: 3
23
+ steps:
24
+ - action: click
25
+ target: 登录
26
+ type: text
27
+ userText: 点击登录
28
+ desc: 点击动作备注
29
+ frontStepType: step
30
+ stepIdFront: step-click
31
+ stepIndex: 1
32
+ descVisible: true
33
+ isEdit: false
34
+ actionLocked: false
35
+ ai_content: 点击登录
36
+ content: 点击登录按钮
37
+ task: 登录
38
+ element: 登录按钮
39
+ actionText: 点击「登录」
40
+ smartWaitDisplay: true
41
+ smart_wait_display: true
42
+ postWaitCondition: 登录页面加载完成
43
+ post_wait_condition: 登录页面加载完成
44
+ targetAst:
45
+ kind: literal
46
+ value: 登录
47
+ userTextAst:
48
+ kind: literal
49
+ value: 点击登录
50
+ postWaitConditionAst:
51
+ kind: literal
52
+ value: 登录页面加载完成
53
+ - action: input
54
+ target: 用户名输入框
55
+ text: "{{username}}"
56
+ inputMode: smart
57
+ clearFirst: true
58
+ userText: 输入用户名
59
+ desc: 输入动作备注
60
+ frontStepType: step
61
+ stepIdFront: step-input
62
+ descVisible: false
63
+ isEdit: true
64
+ actionLocked: false
65
+ - action: input
66
+ text: "{{username}}"
67
+ keyboardLayout: alphabetic
68
+ userText: 使用字母键盘输入用户名
69
+ desc: 键盘布局输入备注
70
+ frontStepType: step
71
+ stepIdFront: step-input-layout
72
+ - action: scroll
73
+ direction: UP
74
+ distance: 0.5
75
+ target: 首页入口
76
+ condition: 首页入口可见
77
+ maxSwipes: 5
78
+ scope: container
79
+ containerRole: vertical
80
+ containerAnchor: 内容列表
81
+ containerHint: 首页内容列表
82
+ scrollAreaTarget: 内容列表
83
+ untilScope: container
84
+ stopMode: visible
85
+ untilMatchMode: exact
86
+ spatialConstraints:
87
+ - anchor: 首页入口
88
+ relation: inside
89
+ userText: 向上滑动
90
+ desc: 滑动动作备注
91
+ frontStepType: step
92
+ stepIdFront: step-scroll
93
+ - action: install
94
+ appDownloadUrl: https://example.invalid/demo.apk
95
+ url: https://example.invalid/demo.apk
96
+ appUrl: https://example.invalid/demo.apk
97
+ appPackage: com.example.demo
98
+ packageName: com.example.demo
99
+ coverInstall: true
100
+ resign: false
101
+ userText: 安装示例应用
102
+ desc: 安装动作备注
103
+ frontStepType: step
104
+ stepIdFront: step-install
105
+ actionLocked: true
106
+ - action: uninstall
107
+ appPackage: com.example.demo
108
+ packageName: com.example.demo
109
+ userText: 卸载示例应用
110
+ desc: 卸载动作备注
111
+ frontStepType: step
112
+ stepIdFront: step-uninstall
113
+ actionLocked: true
114
+ - action: appLaunch
115
+ appName: 示例应用
116
+ launchPath: com.example.demo/.MainActivity
117
+ userText: 打开示例应用
118
+ desc: 打开应用备注
119
+ frontStepType: step
120
+ stepIdFront: step-launch
121
+ actionLocked: true
122
+ - action: appStop
123
+ appPackage: com.example.demo
124
+ userText: 关闭示例应用
125
+ desc: 关闭应用备注
126
+ frontStepType: step
127
+ stepIdFront: step-stop
128
+ actionLocked: true
129
+ - action: appClean
130
+ appName: 示例应用
131
+ userText: 清空示例应用数据
132
+ desc: 清空应用备注
133
+ frontStepType: step
134
+ stepIdFront: step-clean
135
+ - action: waitFor
136
+ time: 1000
137
+ condition: 首页加载完成
138
+ target: 首页
139
+ timeout: 30000
140
+ judge:
141
+ raw: 首页加载完成
142
+ logic: single
143
+ parts:
144
+ - kind: ai_assert
145
+ text: 首页加载完成
146
+ userText: 等待一秒
147
+ desc: 等待动作备注
148
+ frontStepType: step
149
+ stepIdFront: step-wait
150
+ - action: assert
151
+ conditionType: textVisible
152
+ target: 首页
153
+ condition: 首页可见
154
+ text: 首页
155
+ message: 首页未显示
156
+ judge:
157
+ raw: 首页可见
158
+ logic: single
159
+ parts:
160
+ - kind: ai_assert
161
+ text: 首页可见
162
+ userText: 断言首页可见
163
+ desc: 断言动作备注
164
+ frontStepType: step
165
+ stepIdFront: step-assert
166
+ - action: screenshot
167
+ var: homeScreenshot
168
+ userText: 截取首页
169
+ desc: 截图动作备注
170
+ frontStepType: step
171
+ stepIdFront: step-screenshot
172
+ - action: set
173
+ varName: result
174
+ value:
175
+ status: passed
176
+ retries: 3
177
+ userText: 保存测试结果
178
+ desc: 变量赋值备注
179
+ frontStepType: step
180
+ stepIdFront: step-set
181
+ - action: press_back
182
+ userText: 返回上一页
183
+ desc: 返回动作备注
184
+ frontStepType: step
185
+ stepIdFront: step-back
186
+ - action: press_home
187
+ userText: 返回桌面
188
+ desc: 桌面动作备注
189
+ frontStepType: step
190
+ stepIdFront: step-home
191
+ - action: if
192
+ frontStepType: if
193
+ userText: 页面显示登录入口
194
+ desc: 条件分支备注
195
+ stepIdFront: step-if
196
+ children:
197
+ - action: click
198
+ target: 登录入口
199
+ type: text
200
+ userText: 点击登录入口
201
+ desc: 点击条件分支中的登录入口
202
+ frontStepType: step
203
+ stepIdFront: step-if-click
204
+ elseIfChildren:
205
+ - action: else-if
206
+ frontStepType: else-if
207
+ userText: 页面显示重新登录
208
+ desc: 否则如果分支备注
209
+ stepIdFront: step-else-if
210
+ children:
211
+ - action: screenshot
212
+ userText: 截取重新登录页面
213
+ desc: 截取重新登录页面
214
+ frontStepType: step
215
+ stepIdFront: step-else-if-screenshot
216
+ elseChildren:
217
+ - action: else
218
+ frontStepType: else
219
+ userText: 否则
220
+ desc: 否则分支备注
221
+ stepIdFront: step-else
222
+ children:
223
+ - action: press_home
224
+ userText: 返回桌面
225
+ desc: 返回桌面
226
+ frontStepType: step
227
+ stepIdFront: step-else-home
@@ -0,0 +1,7 @@
1
+ {
2
+ "device_ids": ["DEVICE_001"],
3
+ "device_filters": [
4
+ {"os": "Android", "count": 1, "strategy": "random"}
5
+ ],
6
+ "concurrency": 1
7
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "device_ids": ["DEVICE_001"],
3
+ "concurrency": 2
4
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "device_filters": [
3
+ {"os": "Android", "count": 2, "strategy": "random"}
4
+ ],
5
+ "concurrency": 1
6
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "device_filters": [
3
+ {
4
+ "os": "Android",
5
+ "brand": "Huawei",
6
+ "model": "P30",
7
+ "count": 1,
8
+ "strategy": "weight"
9
+ }
10
+ ],
11
+ "concurrency": 1
12
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "device_ids": ["DEVICE_001"],
3
+ "concurrency": 1
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "device_ids": ["DEVICE_001", "DEVICE_002"],
3
+ "concurrency": 1
4
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "device_filters": [
3
+ {"os": "Android", "brand": "Huawei", "count": 1, "strategy": "weight"},
4
+ {"os": "Android", "brand": "Samsung", "count": 1, "strategy": "weight"}
5
+ ],
6
+ "concurrency": 1
7
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "device_filters": [
3
+ {"os": "Android", "count": 1, "strategy": "all"}
4
+ ],
5
+ "concurrency": 1
6
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "idempotency_key": "ci-build-1001",
3
+ "first_request": {
4
+ "schema_version": "xagent-run-create/v2",
5
+ "script": {
6
+ "schema_version": "xagent-script/v1",
7
+ "steps": [{"action": "assert", "condition": "当前页面显示首页"}]
8
+ },
9
+ "variables": {"environment": "test"},
10
+ "target_name": "smoke",
11
+ "target_hash": "7421b1b045bc23af0dde562f99a07719238b76932a2dd168eb7db3ee2b973b91",
12
+ "target": {"device_ids": ["DEVICE_001"], "concurrency": 1}
13
+ },
14
+ "retry_request": {
15
+ "schema_version": "xagent-run-create/v2",
16
+ "script": {
17
+ "schema_version": "xagent-script/v1",
18
+ "steps": [{"action": "assert", "condition": "当前页面显示首页"}]
19
+ },
20
+ "variables": {"environment": "production"},
21
+ "target_name": "smoke",
22
+ "target_hash": "7421b1b045bc23af0dde562f99a07719238b76932a2dd168eb7db3ee2b973b91",
23
+ "target": {"device_ids": ["DEVICE_001"], "concurrency": 1}
24
+ },
25
+ "expected_error": "idempotency_conflict"
26
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "idempotency_key": "ci-build-1001",
3
+ "first_request": {
4
+ "schema_version": "xagent-run-create/v2",
5
+ "script": {
6
+ "schema_version": "xagent-script/v1",
7
+ "steps": [{"action": "assert", "condition": "当前页面显示首页"}]
8
+ },
9
+ "variables": {"environment": "test"},
10
+ "target_name": "smoke",
11
+ "target_hash": "7421b1b045bc23af0dde562f99a07719238b76932a2dd168eb7db3ee2b973b91",
12
+ "target": {"device_ids": ["DEVICE_001"], "concurrency": 1}
13
+ },
14
+ "retry_request": {
15
+ "target": {"concurrency": 1, "device_ids": ["DEVICE_001"]},
16
+ "target_hash": "7421b1b045bc23af0dde562f99a07719238b76932a2dd168eb7db3ee2b973b91",
17
+ "target_name": "smoke",
18
+ "variables": {"environment": "test"},
19
+ "script": {
20
+ "steps": [{"condition": "当前页面显示首页", "action": "assert"}],
21
+ "schema_version": "xagent-script/v1"
22
+ },
23
+ "schema_version": "xagent-run-create/v2"
24
+ },
25
+ "expected": "same_run"
26
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "schema_version": "xagent-principal/v1",
3
+ "token_type": "personal",
4
+ "eid": 1001,
5
+ "project_id": 2001,
6
+ "subject": {
7
+ "type": "user",
8
+ "id": "3001"
9
+ },
10
+ "capabilities": [
11
+ "app:upload",
12
+ "authoring:execute",
13
+ "authoring:read",
14
+ "authoring:write",
15
+ "device:read",
16
+ "principal:read",
17
+ "run:cancel",
18
+ "run:create",
19
+ "run:read",
20
+ "script:validate",
21
+ "skill:read"
22
+ ]
23
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "schema_version": "xagent-principal/v1",
3
+ "token_type": "project_ci",
4
+ "eid": 1001,
5
+ "project_id": 2001,
6
+ "subject": {
7
+ "type": "project_service",
8
+ "id": "ci-3001"
9
+ },
10
+ "capabilities": [
11
+ "app:upload",
12
+ "device:read",
13
+ "principal:read",
14
+ "run:cancel",
15
+ "run:create",
16
+ "run:read",
17
+ "script:validate",
18
+ "skill:read"
19
+ ]
20
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "schema_version": "xagent-project/v1",
3
+ "targets": {
4
+ "smoke": {
5
+ "device_ids": ["DEVICE_001"],
6
+ "concurrency": 1
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "xagent-project/v1",
3
+ "token": "禁止写入项目配置",
4
+ "targets": {
5
+ "smoke": {
6
+ "device_ids": ["DEVICE_001"],
7
+ "concurrency": 1
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "xagent-project/v1",
3
+ "default_target": "1-smoke",
4
+ "targets": {
5
+ "1-smoke": {
6
+ "device_ids": ["DEVICE_001"],
7
+ "concurrency": 1
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "schema_version": "xagent-project/v1",
3
+ "default_target": "smoke",
4
+ "targets": {
5
+ "smoke": {
6
+ "device_ids": ["DEVICE_001"],
7
+ "concurrency": 1
8
+ },
9
+ "android_weighted": {
10
+ "device_filters": [
11
+ {
12
+ "os": "Android",
13
+ "brand": "Huawei",
14
+ "model": "P30",
15
+ "count": 1,
16
+ "strategy": "weight"
17
+ }
18
+ ],
19
+ "concurrency": 1
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,39 @@
1
+ schema_version: xagent-script/v1
2
+ name: CLI 全部公共动作编译测试
3
+ package_id: 7001
4
+ variables:
5
+ username: demo-user
6
+ steps:
7
+ - { action: install, appPackage: com.example.demo, description: 安装 }
8
+ - { action: appLaunch, appPackage: com.example.demo, description: 打开应用 }
9
+ - { action: uninstall, appPackage: com.example.demo, description: 卸载 }
10
+ - { action: click, target: 登录, type: longPress, duration: 1000, description: 点击 }
11
+ - { action: input, text: demo-user, inputMode: secret, clearFirst: true, description: 输入 }
12
+ - { action: scroll, direction: UP, distance: 0.5, description: 滑动 }
13
+ - { action: scroll_between, from: 卡片顶部, to: 卡片底部, duration: 500, description: 区间滑动 }
14
+ - { action: drag, from: 图标, to: 文件夹, speed: normal, description: 拖动 }
15
+ - { action: screenshot, var: screenshotResult, description: 截图 }
16
+ - { action: extract, target: 订单号, varName: orderId, type: text, description: 提取 }
17
+ - { action: waitFor, time: 1000, description: 等待 }
18
+ - { action: assert, conditionType: textVisible, target: 首页, text: 首页, description: 断言 }
19
+ - action: if
20
+ condition: 页面显示隐私协议
21
+ description: 条件判断
22
+ then:
23
+ - { action: click, target: 同意 }
24
+ else:
25
+ - { action: screenshot }
26
+ - { action: appStop, appPackage: com.example.demo, description: 关闭应用 }
27
+ - { action: appClean, appPackage: com.example.demo, description: 清空应用 }
28
+ - { action: set, varName: result, value: passed, description: 变量赋值 }
29
+ - { action: randomVar, varName: phone, type: phone, length: 11, description: 随机变量 }
30
+ - action: for
31
+ count: 1
32
+ description: 循环
33
+ steps:
34
+ - { action: break, description: 跳出循环 }
35
+ - { action: throw, message: expected test error, description: 抛出错误 }
36
+ - { action: press_key, key: A, description: 单键 }
37
+ - { action: press_home, description: 返回桌面 }
38
+ - { action: press_back, description: 返回上一页 }
39
+ - { action: press_enter, description: 回车 }
@@ -0,0 +1,8 @@
1
+ {
2
+ "schema_version": "xagent-script/v1",
3
+ "steps": [
4
+ {"action": "click"},
5
+ {"action": "unsupported", "target": "按钮"}
6
+ ]
7
+ }
8
+
@@ -0,0 +1,17 @@
1
+ {
2
+ "schema_version": "xagent-script/v1",
3
+ "name": "登录冒烟测试",
4
+ "package_id": 7001,
5
+ "variables": {
6
+ "username": "demo-user"
7
+ },
8
+ "steps": [
9
+ {"action": "install", "appPackage": "com.example.demo"},
10
+ {"action": "appLaunch", "appPackage": "com.example.demo"},
11
+ {"action": "click", "target": "登录按钮"},
12
+ {"action": "input", "target": "用户名", "text": "{{username}}"},
13
+ {"action": "waitFor", "condition": "登录成功提示出现", "timeout": 10000},
14
+ {"action": "assert", "condition": "当前页面显示登录成功"},
15
+ {"action": "uninstall", "appPackage": "com.example.demo"}
16
+ ]
17
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "schema_version": "xagent-run-create/v2",
3
+ "script": {
4
+ "schema_version": "xagent-script/v1",
5
+ "steps": [
6
+ {"action": "assert", "condition": "当前页面显示首页"}
7
+ ]
8
+ },
9
+ "device_id": "DEVICE_001",
10
+ "target_name": "smoke",
11
+ "target_hash": "7421b1b045bc23af0dde562f99a07719238b76932a2dd168eb7db3ee2b973b91",
12
+ "target": {
13
+ "device_ids": ["DEVICE_001"],
14
+ "concurrency": 1
15
+ }
16
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "schema_version": "xagent-run-create/v1",
3
+ "script": {
4
+ "schema_version": "xagent-script/v1",
5
+ "name": "personal local APK smoke",
6
+ "steps": [
7
+ {
8
+ "action": "install",
9
+ "appPackage": "cn.testin.atomic.lab"
10
+ },
11
+ {
12
+ "action": "appLaunch",
13
+ "appPackage": "cn.testin.atomic.lab"
14
+ }
15
+ ]
16
+ },
17
+ "app_upload_id": "appup_0123456789abcdef0123456789abcdef",
18
+ "device_id": "DEVICE_001",
19
+ "timeout_ms": 600000
20
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "schema_version": "xagent-run-create/v1",
3
+ "script": {
4
+ "schema_version": "xagent-script/v1",
5
+ "name": "登录冒烟测试",
6
+ "package_id": 7001,
7
+ "variables": {"username": "demo-user"},
8
+ "steps": [
9
+ {"action": "install", "appPackage": "com.example.demo"},
10
+ {"action": "appLaunch", "appPackage": "com.example.demo"},
11
+ {"action": "click", "target": "登录按钮"},
12
+ {"action": "assert", "condition": "当前页面显示登录成功"},
13
+ {"action": "uninstall", "appPackage": "com.example.demo"}
14
+ ]
15
+ },
16
+ "device_id": "device-001",
17
+ "timeout_ms": 600000,
18
+ "source_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
19
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "schema_version": "xagent-run-create/v2",
3
+ "script": {
4
+ "schema_version": "xagent-script/v1",
5
+ "name": "项目 CI 冒烟测试",
6
+ "package_id": 7001,
7
+ "steps": [
8
+ {"action": "install", "appPackage": "com.example.demo"},
9
+ {"action": "appLaunch", "appPackage": "com.example.demo"},
10
+ {"action": "assert", "condition": "当前页面显示首页"}
11
+ ]
12
+ },
13
+ "variables": {"environment": "test"},
14
+ "timeout_ms": 600000,
15
+ "source_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
16
+ "target_name": "smoke",
17
+ "target_hash": "7421b1b045bc23af0dde562f99a07719238b76932a2dd168eb7db3ee2b973b91",
18
+ "target": {
19
+ "device_ids": ["DEVICE_001"],
20
+ "concurrency": 1
21
+ }
22
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "schema_version": "xagent-run/v1",
3
+ "id": "run_01JTEST000000000000000001",
4
+ "status": "queued",
5
+ "script_snapshot": {
6
+ "source_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
7
+ "canonical_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
8
+ "schema_version": "xagent-script/v1",
9
+ "compiler_version": "xagent-compiler/1"
10
+ },
11
+ "device_executions": [
12
+ {
13
+ "id": "exec_01JTEST000000000000000001",
14
+ "device_id": "device-001",
15
+ "status": "created"
16
+ }
17
+ ]
18
+ }
19
+