目录
- 背景
- 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]