41.多平台自动遍历测试工具AppCrawler 使用手册

发布时间 2023-12-26 15:53:39作者: 想要暴富的小男孩

目录

 
  • 背景
  • AppCrawler简介

需求背景

 
  • 业务变更快速
  • 业务线众多
  • 业务流程复杂
  • 依赖第三方接口较多

业务常见问题举例

 
  • 功能问题
    • app某界面崩溃
    • app某接口有报错
    • 详情页中特定信息字段内容丢失或者数据异常
    • 微信分享不可用
  • 兼容性问题
    • 用户网络慢时发出请求后退出当前页面发生崩溃
    • 某些界面在4.4和5.0的系统上操作体验不同

测试痛点

 
  • 快速迭代中传统的基于用例维护的自动化用例使用不当
    • 没有采用合理的分层测试体系,尝试用UI自动化覆盖所有测试场景
    • 没有采用PageObject模式导致自动化用例维护成本大
    • 对自动化框架掌握程度不够
  • 测试内容太多导致手工测试无法充分覆盖
    • UI自动化只能覆盖核心业务逻辑,新功能来不及上自动化
    • 产品业务测试量较大,新版发布后,老功能来不及全面回归,容易漏测
    • 时间长,强度大的工作后,人容易产生疲乏,对数字的位数,文字的显示等错误信息的敏感度下降
    • 产品的界面深度很深,且包含大量的展示信息功能
    • 专项测试回归难度大:内存泄漏、健壮性测试、弱网等测试太多

什么是 AppCrawler?

 

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

环境准备

 
  • JDK版本 ≥ 1.8
  • jar包下载地址:https://github.com/seveniruby/AppCrawler/releases/
  • SDK 环境

基本使用-命令行参数

 
选项说明
-a Android或者iOS的文件地址, 可以是网络地址, 赋值给appium的app选项
-e 设置编码格式,例如UTF-8 GBK
-c 配置文件路径
-p 平台类型android或者ios, 默认会根据app后缀名自动判断
-t 最大运行时间. 单位为秒. 超过此值会退出. 默认最长运行3个小时
-u appium的url地址
-o 遍历结果的保存目录. 里面会存放遍历生成的截图和日志

基本使用-命令行参数

 
选项说明
–capability k1=v1,k2=v2… Valuappium capability选项, 这个参数会覆盖-c指定的配置模板参数, 用于在模板配置之上的参数微调
-r 输出html和xml报告
–template 输出代码模板
-v 是否展示更多debug信息
-vv 是否展示更多trace信息
–help 显示帮助信息

基本使用-配置文件参数

 
  • capability设置:与appium完全一致
  • testcase:用于启动app后的基础测试用例
  • selectedList:遍历范围设定
  • triggerActions:特定条件触发执行动作的设置
  • selectedList:需要被遍历的元素范围
  • firstList:优先被点击
  • lastList:最后被点击
  • tagLimitMax:同祖先(同类型)的元素最多点击多少次
  • backButton:当所有元素都被点击后默认后退控件定位
  • blackList:黑名单,讲不想被点击的元素加入黑名单
  • maxDepth: 遍历的最大深度
  • waitAppLoadedTimeout:等待app启动时间
  • waitAppLoaded:设置APP成功启动的标识;若元素加载出来,则认为APP已成功启动

testcase 配置示例

 
  • 启动APP后,通过testcase进行登录,完成前置操作
testcase:
  name: "霍格沃兹测试开发学社"
  steps:
    - xpath: "//*[@text='我的']"
      action: click
    - xpath: "//*[@text='未登录']"
      action:  click
    - xpath: "//*[@resource-id='login_account']"
      action: hogwarts
    - xpath: "//*[@text='请输入8-16位密码']"
      action: hogwarts
    - xpath: "//*[@text='请输入验证码']"
      action: 6666
    - xpath: "//*[@text='登录']"
      action: click

selectedList 配置示例

 
  • 遍历页面内元素属性name包含Button的元素
selectedList:
  - xpath: //*[contains(name(), 'Button')]

triggerActions 配置示例

 
  • 当页面存在取消这个元素时,会先点击取消
  • 当页面有支付这个元素时,会执行 back 操作
  • times 规则的使用次数
triggerActions: 
  - xpath: //*[@text='取消']
  - xpath: 支付
    action: driver.back()
  - xpath: //*[contains(@text, '支付成功后')]
    times: 5

action 定义

 
  • driver.back() 后退
  • driver.swipe(0.5,0.4,0.5,0.45) 滑动(百分比)
  • click 点击

功能介绍

 
 

生成样板配置示例

 
  • java -jar appcrawler.jar –demo
  • 会在当前目录下生成一个demo.yml

执行方式-参数模式

 

执行参数比配置文件优先级别高

java -jar <appcrawler.jar路径> appcrawler --capability \
"appPackage=com.xueqiu.android,appActivity=.view.\
WelcomeActivityAlias"

执行方式-配置文件 [推荐方式]

 
  • java -jar <appcrawler.jar路径> -c example.yml

xpath示例

 
  • 绝对定位 /xxx/ddd/dddd
  • 相对定位 //android.widget.Button
  • 查找
    • 所有元素://*
    • 包含条件://*[contains(@resource-id, ‘login’)]
    • 满足属性值://*[@text=‘登录’]
  • 多条件联合
    • //*[contains(@resource-id, ‘login’) and contains(@text, ‘登录’)]]
    • //*[contains(@text, ‘登录’) or contains(@label, ‘登录’)]]
  • 当多控件同时出现:
    • //*[contains(@text, '看点')]/ancestor::*//*[contains(name(), ‘EditText’)]
  • 根据可点击属性和文本内容长度筛选:
    • //*[@clickable="true"]//android.widget.TextView[string-length(@text)>0 and string-length(@text)<20]