分析 Android 项目源码,用 LLM 从多维度生成 AI 自动化测试所需的先验知识文档,打包上报测试平台。核心价值:让 AI 测试 Agent 在运行前就知道「测什么、怎么断言、有哪些陷阱」。触发词:「分析我的 Android 项目」「生成测试画像」「理解这个 App 的业务」「提取测试先验知识」「帮我分析 Android 源码」
AI 自动化测试要能智能地测试 App,需要知道以下 5 件事:
本 Skill 从源码中提取上述所有信息,生成 9 份文档,打包成 static-profile。
与 AITestSDK 分工:
绝不重复 AITestSDK 已有的结构数据(Activity 数量、控件 ID 枚举等)。
询问用户项目路径。也接受:APK、GitHub 链接、直接粘贴的代码。
bash
按优先级 read 每个文件前 300 行(优先读 Activity 源文件)。
读取时重点关注:
拿到源码后,逐个生成以下文档。每份文档聚焦一个维度,独立分析。
分析维度:
输出 JSON:
{
businessType: 移动电商/工具/社交/...,
summary: 一句话描述这个 App 是干什么的,
modules: [模块名: 功能描述],
unimplemented: [功能名: 现状描述(如:点击仅弹Toast)],
techStack: {
navigation: startActivity / Jetpack Navigation,
network: Retrofit / 无网络,
di: Hilt / 无
}
}
分析维度:
输出 JSON:
{
journeys: [
{
name: 流程名(如:核心购买流程),
priority: P0必测/P1重要/P2可选,
steps: [
{
step: 1,
page: LoginFlowActivity,
action: 输入用户名和密码,点击登录,
keyControls: [etusername, etpassword, btn_login],
waitCondition: 等待页面跳转或 Toast 出现
}
],
preconditions: [前置状态:App 处于未登录状态],
expectedFinalState: 页面跳转至 HomeFlowActivity
}
]
}
这是最关键的文档。 AI 测试 Agent 需要知道每个操作后如何判断成功或失败。
分析维度:
输出 JSON:
{
assertions: [
{
scenario: 场景描述(如:空账号点登录),
page: LoginFlowActivity,
trigger: btn_login,
successCondition: {
type: pageSwitch / toast / controlChange,
target: 跳转到 HomeFlowActivity,
detail: Activity 变为 HomeFlowActivity
},
failureCondition: {
type: toast,
target: Toast 文本包含「请输入手机号/邮箱」,
detail: 页面停留在 LoginFlowActivity
},
waitMs: 500,
note: 登录是同步操作,无需长等待
},
{
scenario: 功能B前置条件未满足时触发操作,
page:
trigger:
successCondition: {
type: pageSwitch,
target: 跳转到 PageB
},
failureCondition: {
type: toast,
target: Toast 文本包含「请满足前置条件」
},
note: 前置条件:
}
]
}
🔗 文档4:状态依赖图(State Dependencies)
分析维度:
输出 JSON:
{
stateDependencies: [
{
feature: 进入功能模块B,
requires: [用户已完成登录流程],
howToReach: 从登录页完成登录后,进入 HomeFlowActivity 点击对应入口
},
{
feature: 触发核心操作,
requires: [已进入目标页面, 至少满足一项前置条件(如
howToReach: 进入
}
],
stateChanges: [
{
action: 核心操作完成,
before: 已进入目标页面,操作前状态已满足,
after: 清栈跳转回 HomeFlowActivity,页面状态未持久化(内存数据),
implication: 测试操作完成后,重新进入目标页面需要重新构造前置状态
}
]
}
⚠️ 文档5:边界与异常场景(Edge Cases)
分析维度:
输出 JSON:
{
edgeCases: [
{
scenario: 数值输入最小值(边界),
page: PageA,
setup:
action: 点击减少数量按钮,
expected: 数量保持最小值,出现 Toast「已达最小值」,
testValue: 最小值时再减,
assertType: toast + noChange
},
{
scenario: 数值输入超上限(超界),
page: PageA,
setup:
action: 点击增加数量按钮,
expected: 数量保持最大值,出现 Toast「超出范围」,
assertType: toast + noChange
},
{
scenario: 输入框大小写敏感验证,
page: PageA,
action: 输入框输入特殊值的小写形式,点击提交,
expected: Toast 提示「操作成功」(大小写不敏感),
assertType: toast
}
]
}
🚫 文档6:陷阱与禁区(Traps & Forbidden)
分析维度:
-
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 android-static-analyzer-1776009248 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 android-static-analyzer-1776009248 技能
skillhub install android-static-analyzer-1776009248
文件大小: 15.75 KB | 发布时间: 2026-4-13 09:20