Appcrawler自动遍历工具-智能遍历测试与测试用例生成

30 阅读8分钟

效率与成本的抉择

在软件开发过程中,测试环节直接影响产品质量和用户体验。随着系统迭代频繁、功能复杂化,企业在测试方法的选择上面临困境:手工测试灵活却效率低,自动化测试高效却前期投入大。那么,我们到底应该如何选择合适的测试方法,以兼顾质量、效率与成本呢?

手工测试与自动化测试的对比

维度手工测试自动化测试
质量灵活性高,适合发现界面细节和用户体验问题;但容易受人为失误影响稳定性高,结果一致,可覆盖大规模回归;对复杂交互判断依赖脚本设计
效能执行速度慢,重复测试耗时长,不适合大规模或高频回归执行速度快,可批量、多环境、多数据运行,高效回归测试
成本前期投入低,仅需人工和用例;长期重复测试人工成本高前期投入高,需要工具和脚本开发;长期可降低人工成本,规模化应用 ROI 高

手工测试与自动化测试的困境

测试类型困境严重度/影响
手工测试执行效率低,重复测试耗时长🔴 高
易受人为失误影响,结果不稳定🔴 高
难以覆盖大规模数据和复杂场景🟠 中
对频繁迭代的需求适应慢🟠 中
长期人工成本高,难以规模化🔴 高
自动化测试前期投入高,需要工具、环境和脚本开发🔴 高
脚本维护成本高,需求变动容易导致脚本失效🔴 高
对复杂交互和体验类问题判断能力有限🟠 中
初学者门槛高,需要一定技术背景🟠 中
自动化覆盖率与测试设计质量高度依赖测试人员能力🟠 中

图例:

🔴 高:影响大,必须关注

🟠 中:影响中等,需要注意

我们到底需要什么样的测试方法

模块类型推荐测试方法原因
稳定功能 / 核心流程自动化测试高重复性,降低长期成本,提高回归效率
新功能 / 高变动手工测试灵活快速,发现用户体验与细节问题
高风险 / 关键路径手工 + 自动化结合探索性和回归性,保障质量
性能 / 压力需求自动化测试批量、高并发测试,手工难以实现
界面 / 用户体验手工测试感知真实用户体验,发现自动化难覆盖问题

智能遍历测试

  • 将被测系统理解为一个有限状态机,通过遍历的方式达到充分的路径覆盖
  • 通过对模型的分析实现自动断言与测试用例自动生成
  • 自动遍历测试是基于模型的测试方法的一种应用场景

基于模型的测试方法

  • 将 app 的业务行为理解为一个有向图

  • 有向图中的节点代表业务状态

  • 有向图中的路径代表达到特定状态的行为

  • 以充分遍历所有状态为目标

图片

智能遍历测试的特点

对比维度手工测试自动化测试智能遍历测试
业务覆盖度高❤️ 可累积的自动化用例高❤️ 可累积的自动化模型
执行速度高❤️ 使用自动化高❤️ 使用自动化
维护成本低❤️ 不需要维护代码低❤️ 不需要维护代码
学习成本低❤️ 不依赖自动化技术低❤️ 不依赖自动化技术与经验

智能遍历测试相关工具

工具名称是否开源AndroidiOS用途方法论
monkey开源支持-压力测试工具、健壮性测试-
百度 smart_monkey-支持-健壮性测试改进版 monkey
腾讯 newmonkey-支持-健壮性测试改进版 monkey
Android App Crawler开源支持-遍历测试基于模型
zhangzhao/Maxim-支持-健壮性测试、遍历测试基于模型
蚂蚁金服 macaca/nosmoke开源支持支持遍历测试基于模型
霍格沃兹测试开发学社 appcrawler开源支持支持遍历测试基于模型
字节跳动 Fastbot-支持支持遍历测试基于模型

Google Android App Crawler

图片

Android App Crawler 中文介绍

图片

Robo 测试

图片

Firebase** 在线的 AppCrawler 云服务

图片

图片

霍格沃兹测试开发学社 AppCrawler

AppCrawler 介绍
  • Appcrawler 是一个基于自动遍历的 App 爬虫工具,支持 Android 和 I0S,支持真机和模拟器。最大的特点是灵活性高,可通过配置来设定遍历的规则

appcrawler 全平台自动遍历测试工具 Q&A:ceshiren.com/c/opensourc… author:seveniruby

基于模型分享探索路径与测试用例生成

图片

保留每一步截图

图片

AppCrawler 报告

图片

AppCrawler quick start
#Android时钟a
ppcrawler --capability "appPackage=com.google.android,deskclock,appActivity=com.android.deskclock,Deskclock”

#生成默认配置文件
java -jar appcrawler.jar --demo

#使用配置文件
java -jar appcrawler.jar-c demo yml
--capability "appPackage=com,xuegiu,android,appActivity=,view,WelcomeActivityAlias"
核心配置
  • capability 设置:与 selenium appium 完全一致
  • testcase:用于启动 app后的基础测试用例
  • selectedList:遍历范围设定
  • triggerActions:特定条件触发执行动作的设置
配置语法
  • testcase 的简写形态

  • xpath:对应when 里的xpath

  • action:对应when的action

  • testcase 的完整形态

  • given:所有的先决条件

  • when:先决条件成立后的行为

  • then:断言集合

图片

递归遍历过程
  • crawl():
  • 把当前 app 的界面 dump 为 xml 结构
  • 获取待遍历元素
  • 遍历范围 selectedList
  • 过滤黑名单 小控件 不可见控件 blackList
  • 重排控件顺序 firstList lastList
  • 跳过已点击+跳过限制点击的控件 tagLimit
  • 根据匹配的规则执行 action中
  • crawl()
UI界面结构获取

图片

遍历策略

列表优先策略

图片

深度优先策略

图片

列表项代码逻辑基本相同

默认只遍历其中的部分数据,可大大减少遍历工作量

图片

少部分列表项每个逻辑都不同全部遍历

对特殊的菜单与相似项提供额外的遍历额度

图片

遍历算法的综合
  • 基于界面流程
  • 深度优先
  • 广度优先
  • 基于 U 控件属性的遍历策略
  • 深度:控件在布局中的层级
  • 列表优先:ListView RecyclerView通常是核心数据
  • 非菜单优先:selected 属性为 true 的一般用于菜单展示
  • 实现方式:sortByAttribute:[depth, list, selected ]
智能遍历的三要素
  • 界面与控件结构识别
  • 自动化 RPA
  • 遍历算法
纯adb** 也可以完成遍历测试
  • adb shell uiautomator dump
  • adb shell screencap
  • adb input
  • 设计通用遍历算法

Web 遍历技术

Web 遍历的流程
  • 需要首先解决 page source 为 html 的问题

  • 利用 ExecuteScript 植入js 获取页面结构

  • 转成兼容 android 的格式

图片

测试用例生成

大前端 (Web/App)测试框架

图片

测试用例生成价值
  • 行业目前问题
    • 行业目前哈没有统一的测试框架
    • 编写测试用例费时费力
    • 用例无法自动生成与探索
  • 解决方案
    • 打造统一测试框架
    • 提供多种测试框架的测试用例生成
    • 利用模型驱动测试方法自动扩展测试用例

App Diff 测试方法

diff方法 diffy 思路的借鉴

图片

Diff 测试结果

图片

Diff测试案例

图片

图片

通过DOM 对比差异

图片

图片

图片

Diff 测试报告

图片

技术交流

由霍格沃兹测试开发学社维护,技术交流与issue提交请移步 ceshiren.com/c/opensourc… 交流

推荐阅读
juejin.cn/post/755103…

juejin.cn/post/755124…

juejin.cn/post/753578…

学社精选

技术成长路线

系统化进阶路径与学习方案

  • 人工智能测试开发路径

  • 名企定向就业路径

  • 测试开发进阶路线

  • 测试开发高阶路线

  • 性能测试进阶路径

  • 测试管理专项提升路径

  • 私教一对一技术指导

  • 全日制 / 周末学习计划

  • 公众号:霍格沃兹测试学院

  • 视频号:霍格沃兹软件测试

  • ChatGPT体验地址:霍格沃兹测试开发学社

  • 霍格沃兹测试开发学社

企业级解决方案

测试体系建设与项目落地

技术平台与工具

自研工具与开放资源

人工智能测试开发学习专区